目前為止,程序的表現形式是對過程的敘述,順序、分支、循環結構是最基本的原子形式。而面向過程的分析和設計無疑是最自然的框架結構,它將過程形式的代碼段再次迭代的以過程形式組合,形成整個程序。就像將句子連成段,將段連成章,將章連成篇,將篇連成書。這也是最符合閱讀者思維的形式,整個程序就像一個內含超鏈接的文本小說,主體上是流暢的,符合連續思維的。
面向對象程序不能說是顛覆性改變,它的原子表現形式仍然是順序、分支和循環。而由于依賴于過程性系統的裝載,其整體的最外層仍然是一個過程性的函數。它與面向過程在其表現形式上的不同,僅僅存在于中間層。
面向對象程序的表現形式是詞條式的,至少是傳記體的,而不是編年史。你可以想象,一部小說,作者首先把所有的故事按照角色重新歸類,再分割為一個個小故事,可以想象是這樣的:
——傳記式:
《張三傳》
張三,秦人,少年,虬髯黑臉,為人仗義。
逸事一:若傍晚時訪之,必留宿,夜必邀相飲。三十三年春,李四自華陰來,……
《李四傳》
李四,中原人,白臉壯年書生,十六歲舉秀才。
逸事一:其人好游,某年遇張三……
——詞條式:
醉酒: 張三與李四飲酒,大醉……
舉秀才: 李四,十六時……
張三其人: 秦人,少年,虬髯黑臉,為人仗義……
巧遇: 三十三年,李四巧遇張三……
仗義好客: 張三好客,若傍晚時訪之,必留宿,夜必邀相飲……
這種表現形式是某種詞條式的分裂,故事被不斷的片段化,一個比較好的面向對象程序一般會有大量的細粒度對象,對象的屬性和方法都不多,方法都很短。雖然這種表現形式能解決一些過程性敘述的不足,但無疑過分的碎片化會帶來理解上困難,傳記式尚好,詞條式就很難了。這就是面向對象程序在形式上出現的弱點。分析設計時,需時時腦中回想整體結構,以防偏離。而閱讀維護時,需要把這些片段慢慢織起來,連成一個故事。
----------------------------------------------
將SICP的注腳240記在這里:
對象模型對世界的近似在于將其分割為獨立的片斷,函數式模型則不是沿著對象間的邊界去做模塊化,當“對象”之間不共享的狀態遠遠大于它們所共享的狀態時,對象模型就特別好用。這種對象觀點失效的一個地方就是量子力學,在那里,將物體看作獨立的粒子就會導致悖論和混亂。將對象觀點與函數式觀點合并可能與程序設計的關系不大,而是與基本認識論有關的論題。