OO真經——關于面向對象的哲學體系及科學體系的探討(中)

作者: T2噬菌體  來源: 博客園  發布時間: 2009-04-13 09:48  閱讀: 3999 次  推薦: 0   原文鏈接   [收藏]  
 
摘要:要想真正描述一個世界,僅有結構式不行的。開始我們說過,世界觀主要關注兩個方面:一是世界是什么樣子的(結構),另一個就是世界時如何演進的(運作)。現在,我們來討論對象論中關于世界運作的理論。
[1] 世界本沒有類
[2] 程序世界
[3] 依賴是如何被倒置的

 

真經第六章——運作 Moving

      “運動是絕對的——牛頓”

6.1、導言

      在前五章中,我們從世界觀的這話題開始,逐步引出了抽象、層次、繼承和耦合。這些內容,形成了對象論中關于世界的結構體系。
      然而,要想真正描述一個世界,僅有結構式不行的。開始我們說過,世界觀主要關注兩個方面:一是世界是什么樣子的(結構),另一個就是世界時如何演進的(運作)。現在,我們來討論對象論中關于世界運作的理論。
      這里首先要指出一點,“對象論”是關于程序世界(即將一個軟件系統看成一個世界)的世界觀,而非關于現實世界的,所以,將對象論應用于現實世界時,往往會有所偏頗。其實前面的某些地方已經體現出這一點,而在運作理論這里,會體現的尤其明顯。但是為了直觀起見,我依然會將對象論應用于現實世界去舉例子,當然我會非常謹慎和小心,并且會明確指出對象論應用于現實世界的偏頗在哪里。

6.2、世界本沒有類

      對象論認為:世界的演進,是而且只是各種對象通過互相調用其他對象的公開服務而完成交互。

      注意,是對象交互,而不是類交互!沒錯,類之間是永遠不可能交互的。因為不論是現實世界還是程序世界,從來不存在具體的類。類只是抽象思維作用于對象的產物,它幫助我們理解、記憶、分析和設計。類是抽象的概念,它“客觀”存在,但不是“具體”的存在。
      例如,現實世界中,我們可以找出很多個“具體的蘋果”對象,但是你能找出一個東西,說它是“蘋果”這個類嗎?你這一輩子吃的每一個蘋果,都是一個具體的蘋果對象,從來沒有具體的“蘋果類”和你交互過。再上升一點,你一生交互過的所有東西,都是對象,而沒有一個具體的類。“類”不過是你的抽象思維作用于對象形成的幫助你理解認識世界的抽象概念罷了。“類們”從不曾和你真正交互。
      程序世界中也是一樣,程序運行起來,從來都是具體對象之間的交互,類只是幫助你分析設計的概念工具罷了。
      認識到上面幾點對于理解對象論的世界運行理論非常重要,時刻銘記,參與真正世界運行的,只有對象,沒有類!對象在世界中,類在我們心中!
      這一小節的標題是“世界本沒有類”,代表兩個意思:一是世界“本來”沒有類,二是世界“本質”沒有類。
      你可能會問,在第五章“耦合”中,不是說依賴關系是“兩個類因為可能交互而產生的關系”嗎?其實,確切點說,應該是“兩個類所能映射到的對象因為可能交互而產生的關系”,本質上,依賴本來是對象間的依賴,只不過在抽象時被同時抽象到類里面了。

6.3、程序世界——大同的和諧世界

      雖然在對象論里,現實世界和抽象世界的基本運作機理是一樣的,但程序世界和現實世界在具體運作上有很大差別。首先,我要告訴你,程序世界時多么的大同和和諧!

      程序世界與現實世界第一點區別:現實世界的依賴以對象為單位,程序世界的依賴以類為單位。

      沒明白這意味著什么?
      舉個例子,在現實世界中,是不是關系很重要啊。為什么?因為你認識的人多,可依賴的人就多。例如你生病了,如果你有個醫生朋友,看病就方便很多;如果你要打官司,而你又恰巧認識律師朋友,是不是很爽呢;如果你想上清華大學,剛好清華大學校長是你親戚,那一切就好辦多了是吧。
      為什么會這樣?究其本質,是因為現實世界中對象間的依賴是以對象為單位的,這種依賴關系不會隨著泛化過程而被泛化到類里面去。例如,有一個人現在在北京航空航天大學上學,從這“一個人可”以泛化出“人”這個類,而北航可以泛化出“大學”這個類,但這個具體的人和北航的這種關系可沒有被泛化到兩個類中,也就是說,并不是每一個“人對象”都可以去任何一個“大學對象”去上學的。
      不過,如果是程序世界里,上面的推理是可行的,因為程序世界中對象間的依賴是以類為單位的,這種依賴關系會隨著泛化過程而被泛化到類里面去。并且,只要兩個類建立了依賴,那么兩個類之間的所有對象都兩兩依賴了。換句話說,在程序世界里,只要有一個“人”和一個“大學”發生了聯系,那么這種聯系就被泛化到類中了,隨后,所有的“人”都可以上“任何”的大學。

6.1

圖6.1、兩個世界中依賴的區別

      看圖6.1,假設世界上只有三個人和三所大學。在現實世界中,小龍女考上了清華,不過這和其他人其他大學一點關系也沒有,這種關系并沒有體現在類上,看,兩個類沒有任何聯系。但在程序世界中,小龍女考上了清華,一下子人和大學兩個類就關聯起來了,接著,張無忌和郭靖這兩個不好好學習的學生也沾了光,和三所大學都聯系起來了。(提示:其實這里和第四章講到的OCP和LSP聯系非常緊密,讀者可以聯系OCP和LSP兩個原則自己思考一下為什么程序世界會這樣。)
      你知道了吧,在程序世界里,全世界的醫生隨你看,律師隨你用,大學隨你上,美食隨你吃!多么和諧大同的美好世界!

      看了上面對程序世界的描述,你是不是已經垂涎三尺了?恨不得自己變成一段代碼,跑到程序世界里。不過別著急,事情也許沒有你想象的那么美好。下面我們來看另一個程序世界與現實世界的區別。

0
0
 
標簽:面向對象
 
 

文章列表

全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()