面向对象的认识----新生的初识

客串:屌丝的坑人表单神器

走过的那些事儿:数据库那点事儿

推荐:手把手教你做关键词匹配项目(搜索引擎)---- 第一天

最新:手把手教你做关键词匹配项目(搜索引擎)---- 第十八天

探讨:探讨负载均衡


吐槽:最近博客园老大总是质疑我的文章,把我用来培训的文章全部当作内容上不够深入,对分享的知识点缺少足够的文字讲解,每份文章都是一个多小时的结晶就被批判成这样,看样子确实值得要深思,把每个点写透写明白,不给读者一个思考的机会。

最近感觉自己越来越像老师,每天都要讲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就是为了实例化一个对象
那么这个就要说到对象这个概念了。

对象是类的实体,一个实实在在的物体。

了解到了对象,那么我继续问到:假设李四在吃饭,那么张三也在吃饭吗?
童鞋们回答到:不一定。

对象之间是相互独立的。

了解了这么多的概念,童鞋们对类的了解够深刻的了,只有理论知识,哪能架起桥梁。那么如何找出类是他们迫切希望的技能。

要想更多的了解后续的知识,请关注:面向对象的认识---如何找出类

后面继续请关注:面向对象的番外----思想的梦游篇

posted @ 2014-08-29 12:33  oShine.Q  阅读(2027)  评论(6编辑  收藏  举报