用正确的小汽车对象学习和熟悉类的概念

2024-03-27 14:18

本文主要是介绍用正确的小汽车对象学习和熟悉类的概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用正确的小汽车对象学习和熟悉类的概念  2005-09-23 14:51:46

分类:

用正确的小汽车对象学习和熟悉类的概念

很多书讲到类总喜欢拿小汽车来做例子,但是有些例子实在是又臭又烂误人子弟,骗人钱财,毁人前程,弱智低级到瞎编一个什么 set_color()函数来教人。实在是白白糟踏了好东西。今天在phpx.com又看到一个受害者,忍不住花了两个小时写了这个教程。


闲话少说,我们来正经的,我们的小车可不是随便让人图图颜色就完了(只能图颜色的是废车)。我们的这个小车不但能够到处乱跑,而且装备了高级GPS全球定位系统,油表,里程表。由于使用了面向对象的技术,驾驭这样的一部小汽车一点都不难。

举例子首先要提供一些背景材料。我们有一辆小汽车,可以在一个拥有xy坐标的地图上按照东南西北方向任意的行驶,你可以设定小车行驶的方向和距离,小车会向你汇报它的坐标位置。

其实学习类应该和我们学习其它事物一样,从学习使用开始,然后再学习他的原理。所以我们先来熟悉一下如何正确驾驶这样的一个小汽车:


$startPoint 
= & new Position(3,9); //初始一个出发点坐标x=3,y=9 

$myCar = & new Car(500,$startPoint); //我得到一个新的小车,新车初始燃油 500 升,出发地点$startPoint 

$myCar->setHeading('s'); //给小车设定方向 s:南方 n:北方 w:西方 e:东方。 

if($myCar->run(100)) //然后让小车跑100公里,如果顺利完成任务显示燃油量。如果半途而废,我们显示警报信息。 

    print(
'
小车一切正常,目前还有燃油:'.$myCar->getGas().'');//获得燃油数 

else 

    print(
'
小车出问题了: '.$myCar->getWarning().'');//显示警报信息 


$myPosition=$myCar->getPosition();//获得小车当前的位置 

print('
我的小车现在
X:'
.$myPosition->getX().'Y:'.$myPosition->getY());//显示小车的坐标位置
?>

先给自己制造一个小汽车,并且给他装备上一个定位对象 Position 然后设定方向, 然后让小车奔跑。 最后检查并输出小车的方位。 复杂么?很难理解吗? 虽然这里我们用到了两个对象(类):Car  Position 但是我相信即使是初学者也不会觉得上面的代码很困难。

我们学会如何开车了以后,再来仔细看一看这个小车对象是怎样工作的。定义一个对象其实很简单只需要 用一个关键字class 和一对{}就可以了,所以我们这样定义这两个对象:

class Car {}
class Position{}

当然,仅仅这样的两个类什么也做不了,我们还需要给他们增加一些功能,先从小汽车开始,我们需要能够给小车设定方向并且让小车奔跑所以我们增加两个方法,也就是2个函数只不过这两个函数包含在小车对象内只有通过小车对象才可以使用。

·                        setHeading()

·                        run()

class Car
{
         function setHeading($direction)
         {
 
         }
 
         function run($km)
         {
 
         }
}

特别提示:设计一个良好的类的窍门是从如何使用它下手,也就是说先考虑这个对象应当有哪些方法,而不是先确定它有哪些属性。
为了更好的了解小车的状况我们还需要这些方法:

·                        getGas() 获得小车当前的燃油数

·                        getPosition() 获得小车当前的位置

·                        getWarning() 警报信息

为了完成这些功能我们的小车还需要自己的油表,警报消息,和定位仪。我们把这些也添加到 Car 类中,同时我们还给这个类增加了一个初始化的函数 这个函数名字和类的名字一样,这样就有了一个大体的框架。


class Car 

    
/** 
    * 
小车的汽油量 
    * 
    *@var 
    *@access 
    */ 
    
var $gas

    
/** 
    * 
里程记录 
    * 
    *@var 
    *@access 
    */ 
    
var $meter

    
/** 
    * 
车的位置(由GPS自动控制) 
    * 
    *@var Object position 
    *@access private 
    */ 
    
var $position
     
    
/** 
    * 
发动机每1公里耗油量,这个车是0.1 
    * 
    *@var Integer 
    *@access private 
    */ 
    
var $engine=0.1

    
/** 
    * 
警报信息 
    * 
    *@var 
    *@access 
    */ 
    
var $warning
     
    
/** 
    
小车的初始化。新车出场当然要 
    1
、加汽油。 
    2
、里程表归零。 
    3
、清除警报信息。 
    4
、设定出发位置。 
    */ 
    
function Car($gas,&$position
    { 
        
$this->gas$gas//加汽油 
        
$this->meter 0
        
$this->warning =''//清除警报信息 
        
$this->position $position//设定出发位置 
    

     
    function 
getWarning() //返回警报信息 
    

        return 
$this->warning
    } 
     
    function 
getGas() //返回汽油表指数 
    

        return 
$this->gas
    } 

    function &
getPosition() 
    { 
        return 
$this->position//返回当前小车的位置 
    


    function 
setHeading($direction='e'
    { 
         
    } 

    
/** 
    * 
开动小汽车 
    *@access public 
    *@param INT 
公里数 
    */ 
    
function run($km
    { 
         
    } 
     
}
?>

这时候最关键的两个方法 setHeading  run 就变得简单了,由于小车装备了 Position 对象 $this->position 所以关于坐标定位的事情它也不用管了, 交给 Position 对象好了, 他自己只要管理好自己的油表,里程表就可以了。完成以后的Car 类变成这个样子了:


class Car 

    
/** 
    * 
小车的汽油量 
    * 
    *@var 
    *@access 
    */ 
    
var $gas

    
/** 
    * 
里程记录 
    * 
    *@var 
    *@access 
    */ 
    
var $meter

这篇关于用正确的小汽车对象学习和熟悉类的概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/852386

相关文章

在java中如何将inputStream对象转换为File对象(不生成本地文件)

《在java中如何将inputStream对象转换为File对象(不生成本地文件)》:本文主要介绍在java中如何将inputStream对象转换为File对象(不生成本地文件),具有很好的参考价... 目录需求说明问题解决总结需求说明在后端中通过POI生成Excel文件流,将输出流(outputStre

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

SpringBoot实现导出复杂对象到Excel文件

《SpringBoot实现导出复杂对象到Excel文件》这篇文章主要为大家详细介绍了如何使用Hutool和EasyExcel两种方式来实现在SpringBoot项目中导出复杂对象到Excel文件,需要... 在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为