天天看點

《UML面向對象設計基礎》—第2章2.1節面向對象的起源

本節書摘來自異步社群《uml面向對象設計基礎》一書中的第2章2.1節面向對象的起源,作者【美】meliir page-jones,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

第2章 面向對象簡史

uml面向對象設計基礎

前面讨論了面向對象的固有特性,現在來看一下面向對象是如何适用于軟體開發的廣闊領域。

當聽說wolfgang pauli教授提出一種新的基本粒子(μ介子,μ- meson或muon)時,isidor i .rabi教授曾經立即予以反駁:“誰承認這種說法?”鑒于此事例,我在本章開頭部分列出一些對面向對象有貢獻的人士。下面将面向對象置于社會環境中,讨論對這種軟體方法的看法。然後,将面向對象置于工程環境中,将面向對象與電子學做一個類比。最後,闡述面向對象對企業中的程式員、系統分析員及經理們究竟能帶來哪些益處。

2.1 面向對象的起源

與人類發明史上的許多創舉不同,面向對象不是在瞬間出現的。面向對象不是某個人在浴缸中的突發其想,而是許多人曆經多年研究積累的産物。第1章中介紹的面向對象概念,就像幾個支流通過曆史的變遷而彙集到一起,最後形成面向對象的河流。

下面列舉了(按年代排序)在理論研究方面和在工程實踐中,對面向對象做出了重大貢獻的人士,如有遺漏請諒解。

2.1.1 larry constantine

談到任何軟體範疇的貢獻者都會提到larry constantine,是以就從資深的larry constantine說起。雖然20世紀60年代,constantine并沒有在“面向對象”的旗号下做任何事,但他卻緻力于研究軟體設計的基本準則(參見本書後面參考文獻中列出的constantine,1968,此寫法為文獻的縮寫形式)。實際上,他是最先提出軟體在程式設計之前應該進行設計的幾個人之一。constantine的許多著名觀點(如耦合和内聚)一直沿用到現今的面向對象領域。

2.1.2 o.-j. dahl 和k.nygaard

dahl 和nygaard引入的幾個概念現在已成為面向對象的組成部分。類的概念就是一個最好的例子,這個概念首次出現在simula語言中(參見[dahl 和nygaard,1966])。

2.1.3 alan kay,adele goldberg等人

kay,goldberg及其同僚經過幾年的研究,于1970年左右在xerox公司的palo alto研究中心設計出了smalltalk語言(參見[kay ,1969])。這一研究成果提出了許多現在成為面向對象核心的概念(如消息和繼承)。許多人至今仍認為smalltalk語言和環境(參見[goldberg and robson,1989])是面向對象完美的實作。

2.1.4 edsger dijkstra

dijkstra的“軟體正确性的理念(conscience of software correctness)”,使人們幾十年來一直耿耿于懷。在dijkstra的早期研究中,提出了用抽象層構造軟體的觀點,在兩個相繼的層之間用嚴格的語義區分。這實際上是一種封裝的形式,也是面向對象的主要概念之一。

2.1.5 barbara liskov

在20世紀70年代,liskov使抽象資料類型(adt)的理論和實作有了重大的進展,奠定了面向對象的基礎。liskov的最著名的研究成果就是clu語言,支援隐藏内部資料表示方法,參見[liskov et al.,1981]。

2.1.6 david parnas

在具有劃時代意義的論文中,parnas提出了子產品軟體構造原則(參見[parnas,1972])。盡管面向對象的構造優于傳統的過程子產品,但parnas的資訊隐藏的許多基本思想仍然可以應用到面向對象的系統中。

2.1.7 jean ichbiah等人

ichbiah與其研究小組開發了“green”程式設計語言,是一種被美國國防部所采納的ada語言(現在稱為ada-83)。ada-83中的兩個概念(一般性和包)也是面向對象中非常重要的内容。這個語言的最新版本ada-95更為全面地支援面向對象。

2.1.8 bjarne stroustrup

c++語言有一個有趣的家譜。以前由martin richards開發了一種bcpl語言[richards 和whitby-strevens,1980]。由此産生b語言,bcpl的縮寫。由b語言産生c語言,經過stroustrup的研究由c語言産生了面向對象的c++語言。

下面引用一段stroustrup在“c++的産生”[stroustrup,1991,p.4]中的一段話:

c++主要是為程式設計人員而設計的,使其程式設計時不一定必須使用彙編,c或各種現有的進階語言。其主要目的讓每個程式設計人員可以更容易更愉快地寫出好的程式。曆來沒有有關c++設計的論文,設計、文檔及實作都是同時進行的。

由于c++的面向對象是從早期非面向對象并且十分低級的語言移植而來的,因而它的文法并不十厘清晰。然而,盡管有java語言的出現,c++仍然是最廣泛使用的面向對象語言。由于c++的前身是c,是以在許多機器和作業系統平台上具有可移植性,進而極大地推動了面向對象語言的流行。從這個意義上說,stroustrup的對該領域的貢獻是巨大的。

2.1.9 bertrand meyer

meyer的貢獻是将最佳的計算機科學思想與最佳的面向對象思想融合起來。其結果是産生一個稱為eiffel的語言和環境。eiffel在軟體界确實是個珍品,因為它對理論、軟體工程及希望優化代碼的人們都具有吸引力。無論你的企業選擇哪種面向對象語言,如果希望成為真正的面向對象專家,就應該學習eiffel中的概念,[wiener,1995]是學習eiffel的一本好書。

2.1.10 grady booch,ivar jacobson及jim rumbaugh

這三個人物一同被冠以“the three amigos”的綽号。盡管他們在面向對象領域都有各自的主張,但在20世紀90年代後期,他們通力合作将面向對象用合理的符号表示,産生了統一模組化語言(unified modeling language,uml)。 這個圖形化的模組化語言既有可視的表達形式,又有嚴謹的語義支撐。本書第3章至第7章介紹uml。