分享
 
 
 

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

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

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

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

<?php

$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('<br<b小车一切正常,目前还有燃油:'.$myCar-getGas().'</b');//获得燃油数

}

else

{

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

}

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

print('<br我的小车现在<br 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 类中,同时我们还给这个类增加了一个初始化的函数 这个函数名字和类的名字一样,这样就有了一个大体的框架。

<?php

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 类变成这个样子了:

<?php

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')

{

$this-position-setDirection($direction); //因为使用了Position 对象,小汽车不需要自己来操心XY坐标值了,交给Position 对象吧。

}

/**

* 开动小汽车

*@access public

*@param INT 公里数

*/

function run($km)

{

$goodRunFlag = true;//是否成功完成任务。

$maxDistance = $this-gas/$this-engine; //小车能够跑的最大距离。

if(($maxDistance)<$km)

{

$this-warning = '没有汽油了!';//设定警告信息,能跑多远就跑多远吧。

$goodRunFlag = false;//但是任务肯定完成不了。

}

else

{

$maxDistance=$km; //没有问题,完成任务以后就可以停下来休息了。

}

$this-position-move($maxDistance);//在坐标上移动由Position对象来完成,小汽车只要负责自己的油耗和公里表就可以了。

$this-gas -= $maxDistance*$this-engine;//消耗汽油

$this-meter += $maxDistance; //增加公里表计数

return $goodRunFlag;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有