艾達否立刻緊張起來,“對不起兒子,為父錯了,你想知道物件導向和麵向過程的區別是吧,爸爸我這就給你講,包你聽懂。”
他坐起身,輕了輕嗓子:“其實很簡單,拿史書做個比喻,程序導向是編年體,是《資治通鑑》;物件導向是紀傳體,是《史記》。”
“然後呢?”盧赫追問。
“沒有然後了,就這麼簡單。看你悟性了。”
盧赫擺出一幅黑臉,“我要是有時間悟,還來找你幹什麼?”
艾達否縷了縷並不存在的鬍子,“那還是讓為父告訴你吧。
編年體中,展示的是世間萬物隨時間軸的變化過程,今年發生了什麼,明年發生了什麼,相當於程式一行一行順序執行各種動作,你編寫的是這些動作的實現過程。
而紀傳體中,是有主角的,主角是一個人,一個物件。這個物件他是誰,他有什麼性格,他說話有什麼口癖,他有什麼能耐,這些都需要你事先定義好。有人才有歷史。
這相當於你定義了一個類,在類中定義了各種功能,例項化它,把它變成活生生的物件,你才能借它的手眼,去推演這個世界。”
盧赫聽了直點頭,可沒一會兒又開始搖頭,“什麼是類和例項?”
“類就是一個模板,你可以在其中定義它的屬性和方法。比如哺乳動物就是一個類。
什麼是哺乳動物?全身被毛、運動快速、恆溫胎生、體內有膈,符合這些特徵的就是哺乳動物,這是它們的屬性。
哺乳動物能幹什麼?能用肺呼吸、能跑能跳、能嗷嗷叫、能動腦子,這是它們的方法。
這章沒有結束,請點選下一頁繼續閱讀!
哺乳動物這四個字是抽象的,它不指代現實中的任何一種生物,它只是一個模板,一個類。
而例項,是根據這個模板創造出來的物件,就是我們剛剛提到的物件。每個物件都有和模板相同的屬性和方法,但它們各自的資料可以不盡相同。
比如,狗和貓都是哺乳動物,都是物件。它們都全身被毛、運動快速、恆溫胎生、體內有膈,但長得不一樣。它們都能用肺呼吸、能跑能跳、能嗷嗷叫、能動腦子,但狗是汪汪叫,貓是喵喵叫。它們各自的資料不同。”
艾達否說完,幽幽地望著盧赫,臉上竟然帶著一絲期待。
盧赫轉了轉眼珠,“物件導向搞得這麼複雜,相對於程序導向有什麼優越性嗎?”
“很好。”艾達否滿意地點了點頭,“我那些三年了連線口文件都看不懂的師弟師妹們也曾問過這個問題。
物件導向的優越性,在於繼承和多型。
我們剛剛定義了一個名為哺乳動物的類對吧,哺乳動物可以被稱為一個基類,或者父類。而狗和貓,都是它的子類。
這個很好理解,跟動物分類學一樣,界門綱目科屬種,大類下面有小類,逐級劃分。
倘若有一天,你昇天之後成為了造物主,閒著沒事想要自己創造一個新的哺乳動物。注意你要創造哺乳動物,也就是不論你設計出了什麼逆天東西,它都得符合哺乳動物的屬性和方法,被歸為哺乳綱。
這個時候,你不用從頭開始去編寫它的基因、去從一團泥巴開始捏泥人,而是可以命名一個子類,讓它繼承父類的屬性和方法,自動成為哺乳動物,用肺呼吸、能跑能跳、能嗷嗷叫、能動腦子。
也許你還想要給這個世界一個小小的震撼,讓這個哺乳動物有一些逆天的功能,比如一蹦三尺高、不好好四腳走路非要滾著走。你就可以覆寫子類的方法,用你所定義的‘能跑能跳’去代替父類一般意義上的能跑能跳。這個就叫做多型。
進一步的,如果有一天你心裡不太舒坦,想要對世間萬物降下懲罰,讓它們每走兩步必須仰天長叫一聲。這個時候你不需要重新定義父類和子類,只需要寫一個函式,就可以實現你的惡趣味。
你只需要把子類傳入函式中,函式本身並不事先知道你傳的是貓還是狗,但是當你給它貓時,它就喵喵叫,給它狗時,它就汪汪叫。
這就是多型的威力。”
艾達否說完,眨巴著眼,“聽懂了嗎?這些概念十分抽象,和指標一樣,被稱為程式設計初學者的攔路虎。”
盧赫若有所思,好像有點悟了,“這麼精妙的設計,它的創造者一定個天才。”
艾達否看到盧赫的反應,一臉神棍像地坐直身,意味深長地說:
“人從自然中來。物件導向的創造者aan kay擁有生物學背景,他只是在模仿而已。”
喜歡四進製造物主請大家收藏:()四進製造物主書更新速度全網最快。