OO,OO以後,及其極限(1)
1、什麼是軟體開發?
軟體開發的過程就是人們使用各種計算機語言將人們關心的現實世界對映到計算機世界的過程;
現在的計算機的數學理論基礎是由計算機的開山鼻祖,大名鼎鼎的圖靈於1937年提出的圖靈機模型。 隨後不到十年,電子計算機就誕生了(1945)。(埃尼亞克)
我們都知道,它當時的主要任務之一就是用於導彈彈道軌跡的計算。當時的軟體開發(如果可以稱之為軟體開發的話)與現在的大不相同。為了算一道題,要有人事先把完成加減乘除等各類運算的部件像搭積木那樣搭起來,如果換一道題,則要把這些部件分解開來,根據新的要求重新搭建,效率極低(與現在比)。
現代電子計算機的體系結構及實際計算模型來自馮.諾依曼的思想。 1946年他和他的同事們發現了埃尼亞克的缺陷,發表了一份報告,提出了程式放入記憶體,順序執行的思想,這樣,當算一道新題時就只需採取改變計算機中的程式的“軟”的方法。
英國的科學家維爾克斯實現了馮.諾依曼的思想,領導研製了“艾克薩克”,在技術上比埃尼亞克來了個大的飛躍。
因此,現在的計算機通常被稱為馮.諾依曼計算機。
軟體開發的歷史也從此正式開始。
早期程式設計師們使用機器語言來進行程式設計運算;隨著編譯技術的出現,人們設計了許多更高級別的語言;這些語言擺脫了機器語言繁瑣的細節,更接近於人的自然語言,迅速流行開來。 據統計,全世界的高階語言起碼有幾千種,但從可計算性的角度看,它們的計算能力都等價於圖靈機。 已經證明,一個計算機語言,只要除了賦值語句之外,還包括順序語句,條件語句和迴圈語句,它的計算能力即相當於圖靈機。 這裡當然要排除其他技術因素的影響,如程式長度,變數個數,資料精度等。
由於圖靈機的想法是把問題轉化為一步一步按規則執行的機械求解過程,各種計算機語言也不過都是某種形式語言,因此軟體開發的過程實質上就是程式設計師們對客觀世界問題域的形式化的過程。 程式設計師們先建立問題的模型(形式化),再用計算機語言加以合適的表達,最後再輸入計算機裡進行計算。
2 從 PO(面向過程)到OO(面向物件)
從上一節的論述我們知道:
軟體開發的過程就是人們使用各種計算機語言將人們關心的現實世界(問題域)對映到計算機世界的過程;如下圖:
現實世界問題域 → 建立模型(藉助某種建模思想) → 程式設計實現(藉助某種程式語言) → 計算機世界執行求解
在談論OO之前,先讓我們回顧一下高階語言的歷史。
最早的高階語言大約誕生於1945年,是德國人楚譯為他的Z-4計算機設計的Plan Calcul,比第一臺電子計算機還早幾個月;在電子計算機上實現的第一個高階語言是美國尤尼法克公司於1952年研製成功的Short Code;而真正得到推廣使用,至今仍在流行的第一個高階語言是美國的電腦科學家巴科斯設計,並於1956年首先在IBM公司的計算機上實現的FORTRAN語言。
早期的高階語言主要是應用於科學和工程計算,其代表作有FORTRAN和ALGOL60。計算機進入商業和行政管理領域以後,出現了COBOL和 RPG等便於商界使用的語言。近年來,這類語言和資料庫技術,圖形介面技術(視覺化程式設計),面向物件的思想及RAD(Rapid Application Devolopment)的概念相結合,形成了一批更方便使用的所謂第四代語言(4GL),如Powerbuilder,Delphi,VB等。
前一類應用於科學和工程計算的大型語言相對來說更為基礎,因而也更為靈活,應用範圍更為廣泛。 在FORTRAN,BASIC(學習型)之後,自70年代以來,模組特徵更明顯,簡單易用,可靠性強的PASCAL異軍突起,在世界範圍內廣泛流行。 但進入80年代以後,它的地位又逐漸為更實用的C語言替代。 到現在,C語言的地位已相當於一種“高階組合語言”了。
80年代後期,面向物件的語言開始浮出水面,C++藉助使用C語言的龐大程式設計師隊伍,一舉建立了面嚮物件語言的老大地位。從而OO的思想正式統治了整個軟體開發界。C++的流行甚至使得美國軍方從80年開始大力扶植的Ada語言還未及推廣便胎死腹中了。
90年代以後,計算機世界更是發生了天翻地覆的變化,原先的單機平臺讓位於WEB,“網路就是計算機”,新的語言不僅要是OO的,Visual的,更要是基於WEB的。 Java語言借INTERNET的東風,橫空出世,一夜紅遍天下,變化之快令人瞠目結舌。
上述這些變化,表面是不同的程式設計工具在城頭變幻大王旗,但其背後反映的卻是一種更為深刻的認識論的改變,即你是用何種觀點來認識這個世界的? 在PO中,程式設計師們分析了問題域之後,得到一個PO的模型,其中常見的詞語是變數,函式,過程等;
PO: 現實世界 → 流程圖(變數,函式) → PO語言 → 執行求解
在OO中,程式設計師們先得到一個OO的模型,其中常見的詞語是類,物件,方法,訊息等;
OO: 現實世界 → 類圖(物件,方法) → OO語言 → 執行求解
我們可以看到:
PO更接近於計算機世界的物理實現;OO則更符合於人們的認識習慣;
如果說,軟體危機的根源在於人們認識表達的過程(不斷反覆,逐步深化)和馮.諾依曼計算機的實現過程(順序執行)之間存在巨大鴻溝的話,那麼從PO到OO意味這這鴻溝在逐漸縮小;
OO作為一種思想及程式語言,為軟體開發的整個過程——從分析設計到coding——提供了一個完整解決方案。 OO堪稱是軟體發展取得的里程碑式的偉大成就,人們無不為之喝彩!
一提到OO,我們將會聯想到C++,smalltalk,simula,聯想到Use Case,ROSE,Mr Jacboson 以及Rational公司,但卻很少有人會提及維特跟斯坦(Wittgenstein)。 然而,正是這位充滿傳奇色彩的哲學家,不僅第一次清楚地表達了OO的思想,更進一步提及了OO以後的事情,及其最後的極限所在。
在目前這個變幻莫測的時代重溫並認真思考一下這位先哲的思想,或許能使我們更加清醒,更明確前方道路的漫長。
(未完待續)