面向對象的認識----新生的初識


客串:屌絲的坑人表單神器

走過的那些事兒:數據庫那點事兒

推薦:手把手教你做關鍵詞匹配項目(搜索引擎)---- 第一天

最新:手把手教你做關鍵詞匹配項目(搜索引擎)---- 第十八天

探討:探討負載均衡


吐槽:最近博客園老大總是質疑我的文章,把我用來培訓的文章全部當作內容上不夠深入,對分享的知識點缺少足夠的文字講解,每份文章都是一個多小時的結晶就被批判成這樣,看樣子確實值得要深思,把每個點寫透寫明白,不給讀者一個思考的機會。

最近感覺自己越來越像老師,每天都要講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就是為了實例化一個對象
那么這個就要說到對象這個概念了。

對象是類的實體,一個實實在在的物體。

了解到了對象,那么我繼續問到:假設李四在吃飯,那么張三也在吃飯嗎?
童鞋們回答到:不一定。

對象之間是相互獨立的。

了解了這么多的概念,童鞋們對類的了解夠深刻的了,只有理論知識,哪能架起橋梁。那么如何找出類是他們迫切希望的技能。

要想更多的了解后續的知識,請關注:面向對象的認識---如何找出類

后面繼續請關注:面向對象的番外----思想的夢游篇


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM