|
| 用正确的小汽车对象学习和熟悉类的概念(2) |
2007-12-11 13:37:25 |
|
| |
这时候最关键的两个方法 setHeading 和 run 就变得简单了,由于小车装备了 Position 对象 $this->position, 所以关于坐标定位的事情它也不用管了, 交给 Position 对象好了, 他自己只要管理好自己的油表,里程表就可以了。完成以后的 Car 类变成这个样子了:
[复制到剪切板] CODE:
<?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; } } ?>
讲到这里我想我的这篇文章也该结束了。别着急,我当然还记得 Position 类还没有完成,但是有了上面小汽车的例子 Position 应该就非常简单了, 如果你理解了这个小汽车的类, 现在就是你一展身手的时候了, 你来完成这个Position 对象吧, 我相信你能够完成它(其实这正是面向对象和封装的美妙之处)。你需要记住先从Position 的方法开始设计比如:
getX() getY() move() setDirection() 所谓类就是指某一类的事物,它可以是具体的(Car)也可以是抽象的(Position),我们通过封装简化了使用和操作就像我们使用电视,手机一样一点都不复杂。
一篇好的入门教程应该
生动真实的例子。 不但提供了正确的概念,在变量和函数命名,函数封装和调用上也值的学习。 即便你熟悉了面向对象编程以后也不会认为当初的例子有什么不妥之处。 如果你读完教程动手的话一定能够深刻体会到教程的美妙之处,大大减少了走弯路的机会。 好的代码是可以被人像书一样读懂,你认为呢? |
| |
标签:PHP 评论:1 浏览:711  |
| |
 |
相关评论 |
|
|
|