簡介
奧利·約翰·達爾Ole-Johan Dah,出生於1931年10月12日於Mandal,挪威,去世於2002年6月29日。
1961年到1965年,逾Nygaard一起,Dahl設計開發了著名的Simula 1語言和後來的Simula 67語言(1965–1968)。Simula被認為是第一個面向對象的高級程式語言。
1968年,Dahl開始任職於挪威Oslo大學(www.uio.no). 在Oslo大學其間,Dahl,與著名的CAR Hoare, Edsger Dijkstra,合作撰寫了著名的結構化編程(Structured Programming)一書。該書可能是上世紀70年代關於軟體設計方面最有名的學術書籍。
2001年,與Nygaard 一道,Dahl獲得IEEE的IEEE John von Neumann Medal
2002年2月,與Nygaard一道,Dahl獲得了圖靈獎。同年6月,Dahl離開了人世。
經歷與成就
1967年5月20日,在挪威奧斯陸郊外的小鎮莉沙布舉行的IFIP TC-2 工作會議上,挪威科學家Ole-Johan Dahl和Kristen Nygaard正式發布了Simula 67語言。Simula 67被認為是最早的面向對象程式設計語言,它引入了所有後來面向對象程式設計語言所遵循的基礎概念:對象、類、繼承。之後,在1968年2月形成了Simula 67的正式文本。Ole-Johan Dahl與Nygaard 挪威科學家Ole-Johan Dahl,Kristen Nygaard
也是在1968年,荷蘭教授E.W.Dijkstra提出了“GOTO語句是有害的”觀點,指出程式的質量與程式中所包含的GOTO語句的數量成反比,認為應該在一切高級語言中取消GOTO語句。這一觀點在計算機學術界激起了強烈的反響,引發了一場長達數年的廣泛的論戰,其直接結果是結構化程式設計方法的產生。
相信當時沒有任何人預見到當年發生的這兩件事對後來計算機技術,特別是軟體技術所產生的深遠影響。儘管這兩種方法的思想差異巨大,但是多年以後,無論是Ole-Johan Dahl和Kristen Nygaard,還是E.W.Dijkstra,都因其在這一年所取得的成就,獲得了計算機界的諾貝爾獎——圖靈獎。 為了紀念挪威的這兩位科學家的卓越貢獻,在挪威研究基金會(Norwegian Research Council)的籌劃下,Simula研究所 (Simula Research Laboratory)於2001年1月正式成立。
隨著計算機技術的迅猛發展,硬體成本不斷降低,而軟體成本卻不斷增加,因此,如何縮短軟體生產周期和提高維護效率,研製出高質量的軟體產品成為一個重要課題。
程式設計思想的進步
在20世紀60年代,軟體曾出現過嚴重危機,由軟體錯誤而引起的信息丟失、系統報廢事件屢有發生。為此,1968年,荷蘭學者E.W.Dijkstra提出了程式設計中常用的GOTO語句的三大危害:破壞了程式的靜動一致性;程式不易測試;限制了代碼最佳化。
Ole-Johan Dahl此舉引起了軟體界長達數年的論戰,並由此產生了結構化程式設計方法,同時誕生了基於這一設計方法的程式設計語言Pascal。
由瑞士計算機科學家Niklaus Wirth開發的Pascal,一經推出,它的簡潔明了以及豐富的數據結構和控制結構,為程式設計師提供了極大的方便性與靈活性,同時它特別適合微計算機系統,因此大受歡迎。結構化程式設計思想採用了模組分解與功能抽象和自頂向下、分而治之的方法,從而有效地將一個較複雜的程式系統設計任務分解成許多易於控制和處理的子程式,便於開發和維護。因此,結構化方法迅速走紅,並在整個20世紀70年代的軟體開發中占絕對統治地位。
但是,到了70年代末期,隨著計算機科學的發展和套用領域的不斷擴大,對計算機技術的要求越來越高。結構化程式設計語言和結構化分析與設計已無法滿足用戶需求的變化,於是面向對象技術開始浮出水面。
面向對象程式設計方法起源於Simula 67語言。在程式設計語言的發展史上,20世紀60年代後期是承上啟下的重要時期。這一時期有三種重要的語言問世,即Simula 67、由一批頂尖計算機科學家共同設計的Algol 68、以及為IBM 360系列機配套開發的PL/I。這三種語言雖均有所創新,但Simula 67的面向對象概念的影響是最巨大而深遠的。它本身雖因為比較難學、難用而未能廣泛流行,但在它的影響下所產生的面向對象技術卻迅速傳播開來,並在全世界掀起了一股OO熱潮,至今盛行不衰。面向對象程式設計在軟體開發領域引起了大的變革,極大地提高了軟體開發的效率,為解決軟體危機帶來了一線光明。
但是,事實表明,面向對象程式設計方法雖然比結構化方法能更自然地表現現實世界,但它不是靈丹妙藥,並不能解決所有問題,它本身存在固有的內在的局限性。最近興起的面向方面編程(AOP)正是為了改進上述程式設計方法學的不足。AOP被視為是“後”面向對象時代的一種新的重要的程式設計技術。而從更廣義的範疇看,在過去的40年裡,軟體體系結構試圖處理日益增長的軟體複雜性,但複雜性卻仍繼續增加,傳統的體系結構好像已經達到了其處理此類問題的極限。新興的Web 服務通過允許應用程式以對象模型中立的方式實現互連,從而提供了一個更強大、更靈活的編程模型,並將對軟體開發方法產生巨大的影響。
爭議
誰是面向對象之父?
說圖靈獎得主(2003年) Alan Kay是面向對象之父大概是有爭議的,因為公認的第一個OO語言是Simula,由另外兩個圖靈獎得主(2001年)Ole-Johan Dahl and Kristen Nygaard發明,所以Wikipedia將三者都稱為OO之父。不過考慮到面向對象編程這個名字卻是Alan Kay的發明。
時光倒轉到1966年,當時Kay還在猶他大學讀研究生,師從圖靈獎得主(1988年)Ivan Sutherland。受Sketchpad, Simula, ARPAnet 的設計和 Burroughs B5000 (一種有獨特設計的大型機,1961年問世,實現了最早的虛擬機)等等的影響,他開始思考程式設計的架構。1967年的某個時候,當被人問及自己在做什麼的時候,Kay回答:“It's object-oriented programming”。Kay回憶,OO最初的概念來自四部分:
1. 對象就像是生物學裡的細胞,或者網路中的一台計算機,只能夠通過訊息來通信(因此訊息概念出現很早,但是它在程式設計語言中實際可用卻花了較長時間。)
2. 我想去掉數據(【劉江按】此處可能指數據的封裝,因為B5000的設計特點之一是禁止非授權的數據訪問)。B5000通過其令人難以置信的硬體架構實現了這一點。我意識到,細胞/計算機的隱喻有可能實現這一目的, "<-" 符號可以只是表示訊息而已。(這一點花了我很長時間,因為我實際上認為所有這些符號都是函式和過程的名字。)
3. 我的數學背景使我意識到,每個對象可以有很多運算,而且可以有很多系列運算,這樣會非常有用。術語”多態“是非常晚(應該是由Peter Wegner)提出的,而且不那么合理,因為它實際上來自函式術語體系,而我所考慮的含義不僅僅是函式。我發明了一個術語" genericity"來指代擬代數(quasi-algebraic)形式的泛型行為。
4. 我不喜歡Simula I 或者Simula 67的繼承方式(雖然我認為Nygaard和Dahl都是偉大的思想者和設計者)。因此我決定在有了更深刻理解之前,先不考慮將繼承作為內置特性。
我對這種架構的最初實驗是在van Wijngaarten和Wirth的"Generalization of Algol"和Wirth的Euler基礎上的修改,都是類似LISP的,但具有更傳統的可讀性更好的語法。我那時候還不太理解 LISP古怪的元語言概念,但是從其他來源包括Irons' IMP那裡獲得了類似的可擴展語言的想法。
第二階段,我最終理解了LISP,然後以此為基礎設計了更小也更強大的遲綁定底層結構。Dave Fisher的論文是以McCarthy風格完成的,他有關可擴展控制結構的想法對我非常有幫助。這時另一個大的影響是Carl Hewitt的PLANNER。
最初的Smalltalk版本就出自以上這些來源。而對於後來的Smalltalk版本,歷史對它們的批評是:又倒退回Simula的老路上,沒有實現更安全的儘可能隨處可用的擴展機制。
在被問及面向對象程式設計的含義時,Alan Kay這樣回答:
我並不反對類型,但是我不知道哪個類型系統沒有大問題的,因此我仍然喜歡動態類型化。
對我而言,面向對象程式設計只意味著訊息傳送(messaging),狀態處理的局部保存、保護和隱藏(local retention and protection and hiding of state-process),還有一切東西的極端遲綁定(extreme late-binding of all things)。這些在Smalltalk和LISP中都可以實現。可能還有其他系統,但我不知道。
對上面比較令人費解的”狀態處理的局部保存“那句,Alan Kay又做了進一步解釋,但仍然不好懂。大概意思似乎是說面向對象有兩條道路,一種是他所支持的比較小眾的無數據(bio/net non-data-procedure route),一種是現在比較主流的ADT。
獲獎
Ole-Johan Dahl (10/12/1931—06/29/2002)圖靈獎獲得時間:2001年。 第三十六位圖靈獎(2001年)獲得者。
圖靈獎引用(Turing Award Citation):
For ideas fundamental to the emergence of object oriented programming, through their design of the programming languages Simula I and Simula 67.
(授予Ole-Johan Dahl 圖靈獎以表彰其在)通過設計程式語言Simula I和Simula 67中產生的對面向對象程式語言出現至關重要的觀念。
Simula 概念上講是Algol 60的一個超集,引入了對象(Object),類(Class),子類(Subclasses),虛擬方法(Virtual Methods),垃圾收集(Garbage collection)等等面向對象程式語言的概念和機制。Simula也因此被認為是第一個面向對象的程式語言。