用正确的小汽车对象学习和熟悉类的概念(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 分享到饭否 订阅到入口网
 
相关评论
wind2007-12-11到此一游
 
昵称:
主页:
高级: [B] [I] [U]
评论:
 
首页 上一页 1 下一页 末页
日志分类
  · 随手文字 
  · 生活点滴 
  · 音乐人生 
  · 花火&流年 
最新日志
  · 新一年的继续
  · 技术日志搬家啦
  · 年末
  · 久违了,武汉的大雪!
  · 好久不见
  · Evison专辑设计
  · PHP处理INI文件
  · PHP丰富的数组函数
  · PHP和文件系统的维
  · 使用PHP本身的对话
  · PHP控制语句
  · 超链接的笔记
  · MFC编译时的Deb
  · 这个冬末,我听着音乐
  · VB选择语句笔记
  · 寒假的任务
  · 利用VB实现来回滚动
  · 佳诚科技ICO设计
  · 用正确的小汽车对象学
  · 用正确的小汽车对象学
最新评论
  · 狠好听的样子,很凌乱
  · 你的主頁很好,我很喜
  · 生活依在继续
  · 你们好帅捏`
  · 好好听
  · 好象谢停风的老爸哦哈
  · 在无锡过年啊[emo
  · 吥是愛,也不是錯,是
  · 冬天的雪,讓人想到許
  · 很有感觸,仿佛看見了
  · 我在百度上看到你这篇
  · 很好
  · 这样哦~
  · 哇···要放暑假啦?
  · 欢迎过来~~来的时候
  · [emot]6[/e
  · [emot]6[/e
  · ????
  · 好兄弟 才是一辈子的
  · 呀~~!![emot
最新留言
  · 你怎么就不多多写些啥
  · 羡慕你的生活,我没上
  · 大哥` 你是电脑高
  · [emot]13[/
  · ya~~一看什么电脑
  · 发现你这家伙,咋不写
  · 音乐不错~~~~~
  · 这个烟火有下载的,你
  · 我很喜欢你的烟火。能
  · 来看看一哲`的博客
  · 忙完!! 要你说的
  · 这的音乐我很喜欢。
  · 加油!又搞定一页
订阅