面向对象的认识----新生的初识
客串:屌丝的坑人表单神器
走过的那些事儿:数据库那点事儿
推荐:手把手教你做关键词匹配项目(搜索引擎)---- 第一天
最新:手把手教你做关键词匹配项目(搜索引擎)---- 第十八天
探讨:探讨负载均衡
吐槽:最近博客园老大总是质疑我的文章,把我用来培训的文章全部当作内容上不够深入,对分享的知识点缺少足够的文字讲解,每份文章都是一个多小时的结晶就被批判成这样,看样子确实值得要深思,把每个点写透写明白,不给读者一个思考的机会。
最近感觉自己越来越像老师,每天都要讲3-4小时的培训课程,我就跟他们开玩笑说,你看我讲课讲得这么累,好歹也送瓶水给我喝,大家都笑了,公司缺心,缺粮,最不缺的就是水了。
最近在跟博客园的棒子们纠结,所以那份手教你做关键词匹配项目(搜索引擎)更新会相对慢点。
回到正文:
我一说到类,童鞋们的反应就是封装、继承和多态。我当然不反对大家是这样的反应,我继续说到,这个太难了,我有点不太懂,能不能给个简单的方法来比喻他。
童鞋们:…..(心里估计在骂我,就一装B货)
我只好继续说到:我们这么多人在这儿,我们统称人叫什么…..是不是人类?
大家这次的反应很激动,回答到:是。
我指着桌子说到,那这个桌子的统称叫……?
童鞋们回得也快:桌子类…..家具…..四角桌类。
当然我都没有否定他们的说法。
然后我指着风扇说到,那这个风扇的统称叫……?
童鞋们回答到:风扇类、电器类…能想到的基本都说出来了。
我说道,好了,我们该做总结的时候了。
类:一类事物的统称或者归类。
那么我们在计算机里面如何表示人类。
童鞋们很快就写出了
class Person { }
那我就继续说了,人都有眼睛,手,嘴巴。
所有的童鞋们都说是类的属性。我看到有个童鞋在沉思,我就问他,童鞋你在想什么?神游了。
他弱弱的回答到:我在想……眼睛是不是也是个类。
这个我要留给读者去思考了,这不会博客园的棒子们批我了吧。
后续的对话跳过……
然后我继续说:人是不是可以吃饭?
童鞋们很happy的说,这是类的方法或者行为。
小小童鞋们很兴奋丫,然后我就写了个类,专门来处理吃饭的问题(php 版本):
Class Person { private $eyes; private $hand; private $mouse; public function eat(){ #手使用筷子 $this->hand->use($chopsticks); #筷子夹起食物 $chopsticks->Pickup($food); #食物放进嘴巴 $food->Putin($this->mouse); #…… } }
我就问大家,这段代码有没有问题。童鞋们很放心的说到没问题(估计对我比较依赖,认为我写的代码肯定是正确的)。
我反问了大家:筷子能夹起食物吗,它能夹起是谁的功劳?
童鞋们发觉气氛不对,颤抖的回答到:人的手。
然后我又反问了大家:食物能放进嘴巴吗,它能放进嘴巴是谁的功劳?
童鞋们越发觉气氛不对,越没信心的回答到:人的手。
最后的代码成了这样:
<?php class Person { private $eyes; private $hand; private $mouse; public function eat() { #手使用筷子 $this->hand->use($chopsticks); #手用筷子夹起食物 $this->hand->Pickup($food); #手把食物放进嘴巴 $this->hand->Putin($this->mouse); #…… } } class Hand { private $chopsticks; private $food; public function use($chopsticks){ $this->chopsticks = $chopsticks; } public function pickup($food) { if ($this->hasChopsticks()) { $this->food = $food; } else throw new Exception(“你还没有装备筷子”); } public function Putin($mouse) { If ($mouse->isFull()) { Throw new Exception(“嘴巴里面的东西塞满了,不能再塞了”); } If ($this->hasFood()) { Throw new Exception(“手上没食物,请先拿食物”); } $mouse->add($this->food); } }
我就跟他们说:在写方法的时候,多想想这件事是不是他应该做的事情。
我瞄了一眼,上次那位童鞋又在沉思,估计昨天的dota或者lol没打过不甘心。
我看不下去了,我在这儿夸夸奇谈,他在那儿梦游。
我就专门问了下他,童鞋你有什么高见?
这位童鞋就讲了,我在想….就那位xx同事 写代码类里面对每个参数都进行检测,他是不是有点恐惧症,生怕人家传的参数是错误的,我的意思就是想说,何时需要对参数的完整性做校验,是否还有更好的方案来做这个校验问题?
尼玛,坑爹丫,突然来个好复杂的问题,思想飘得好远,佩服。
我的回答是:后续的对话跳过……读者自行领悟,或者专门开个课程来讲解这些,这尼玛又不得不再坑下那些博客园的棒子们。
其实当时我是回答了那位童鞋的….
类就告一段路了,我们继续讲下面的课程.
我就在白板上面写了这个
Person->eat();
下面的童鞋马上尖叫起来了,这是错误的,不能用,要求纠正。
纠正之后的代码是这样的
$person1 = new Person(); $person1->eat();
我也一样问到大家,那样写为什么是错误的,要new一个出来才能用,这个new到底是什么呢?
下面的童鞋说到:没有实例化,不能用eat,new就是为了实例化一个对象。
那么这个就要说到对象这个概念了。
对象是类的实体,一个实实在在的物体。
了解到了对象,那么我继续问到:假设李四在吃饭,那么张三也在吃饭吗?
童鞋们回答到:不一定。
对象之间是相互独立的。
了解了这么多的概念,童鞋们对类的了解够深刻的了,只有理论知识,哪能架起桥梁。那么如何找出类是他们迫切希望的技能。
要想更多的了解后续的知识,请关注:面向对象的认识---如何找出类
后面继续请关注:面向对象的番外----思想的梦游篇
出处:http://www.cnblogs.com/oshine/
本作品由oShine.Q 创作, 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接。如您有任何疑问,请给我留言。