客串:屌絲的坑人表單神器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就是爲了實例化一個對象。
那麼這個就要說到對象這個概念了。
對象是類的實體,一個實實在在的物體。
瞭解到了對象,那麼我繼續問到:假設李四在吃飯,那麼張三也在吃飯嗎?
童鞋們回答到:不必定。
對象之間是相互獨立的。
瞭解了這麼多的概念,童鞋們對類的瞭解夠深入的了,只有理論知識,哪能架起橋樑。那麼如何找出類是他們迫切但願的技能。
要想更多的瞭解後續的知識,請關注:面向對象的認識---如何找出類
後面繼續請關注:面向對象的番外----思想的夢遊篇