離開學校已經有一些時間了,在接觸了各種各樣的編程工具,各種各樣的編程語言,各種各樣的花哨技術以后,我打算在理論方面進行一次回歸。初步的計劃是再看一遍大學里面學習過的數據結構、離散數學,然后看一下經典的《計算機程序設計藝術》。在回顧期間,做一些筆記。這些筆記將不會是上述教材中知識的簡單摘抄或者消化理解之類的,而主要是我重新看過這些書之后結合我平時工作的一些思考。
我在工作的時候做的一些項目多是企業應用類的,主要側重于業務面。所以我們在進行設計和開發的時候,會比較注重“面向對象”這個原則,同時也喜歡嘗試一些設計模式。
但是當我們以這種方式進行建模的時候,卻發現期間有兩種不同的思路存在。一種是對象--施加于對象的操作--對象屬性作為一個類進行設計;一種是對象--對象屬性作為一個類,操作作為單獨的控制類存在。我屬于前者的擁簇者。當然這僅僅屬于在設計中的不同習慣而已,對于設計本身不會構成什么根本性的不同。我比較感興趣的是,到底是什么造成了這兩種不同的認識呢?
直到我重新學習數據結構的時候,我才找到了這種差異的源頭,那就是:
數據元素(D)
數據結構(D,S)
數據類型(D,S,P)
其中S是數據關系,P是對D的基本操作集。
在大學期間對于面向對象的接觸并不是太多,最多就是一門C++程序設計,而且還是側重于語言的,于是我們就一直與這種數學模型打交道。當然這也無可厚非,因為它畢竟是由明確定義的、合理的模型,經過了無數的印證并變成了鉛字的出版物。它的關系側重于數據元素和數據元素之間的關系;它對于數據元素的基本操作似乎更注重閉包性。計算機最初也許就是這樣描述世界的,然后在這個基礎上語言變得更加自然,更加“對象化”。但是任何上層的東西都不會偏離根本和實質。這就好像一個建筑工程師和一個泥瓦匠眼中一棟建筑雖然有差別,但這種差別不會不讓建筑師去關注一個磚頭的質量和擺放情況。
存在即是有理。殊途同歸的東西沒理由再去爭辯。這便是我的想法。