用正确的小汽车对象学习和熟悉类的概念(1) 2007-12-11 13:35:19

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

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

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

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

[复制到剪切板]
CODE:

<?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 类中,同时我们还给这个类增加了一个初始化的函数 这个函数名字和类的名字一样,这样就有了一个大体的框架

[复制到剪切板]
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')  
    {  
         
    }  

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