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

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

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

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

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

探討:探討負載均衡負載均衡


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

最近感受本身愈來愈像老師,天天都要講3-4小時的培訓課程,我就跟他們開玩笑說,你看我講課講得這麼累,好歹也送瓶水給我喝,你們都笑了,公司缺心,缺糧,最不缺的就是水了。this

最近在跟博客園的棒子們糾結,因此那份手教你作關鍵詞匹配項目(搜索引擎)更新會相對慢點。搜索引擎

回到正文:
我一說到類,童鞋們的反應就是封裝、繼承和多態。我固然不反對你們是這樣的反應,我繼續說到,這個太難了,我有點不太懂,能不能給個簡單的方法來比喻他。
童鞋們:…..(內心估計在罵我,就一裝B貨)
我只好繼續說到:咱們這麼多人在這兒,咱們統稱人叫什麼…..是否是人類?
你們此次的反應很激動,回答到:是。
我指着桌子說到,那這個桌子的統稱叫……?
童鞋們回得也快:桌子類…..傢俱…..四角桌類。
固然我都沒有否認他們的說法。
而後我指着風扇說到,那這個風扇的統稱叫……?
童鞋們回答到:風扇類、電器類…能想到的基本都說出來了。
我說道,好了,咱們該作總結的時候了。spa


類:一類事物的統稱或者歸類。code


那麼咱們在計算機裏面如何表示人類。
童鞋們很快就寫出了

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就是爲了實例化一個對象
那麼這個就要說到對象這個概念了。

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

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

對象之間是相互獨立的。

瞭解了這麼多的概念,童鞋們對類的瞭解夠深入的了,只有理論知識,哪能架起橋樑。那麼如何找出類是他們迫切但願的技能。

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

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

相關文章
相關標籤/搜索