Inside Object: 面向對象的發展

在咱們學習了多年面向對象的思想以後,回過頭來,看看面向對象是如何發展起來的,應該是一個很是有意思的事情。編程

面向對象(Object Oriented)編程技術最早被普遍使用的語言是C++,Bjarne Stroustrup寫的《The Design and Evolution of C++》(中文名: C++語言的設計和演化)中,詳細地描述瞭如何將C語言轉變成支持對象編程的C++語言。但是要真正瞭解面向對象的起源,還得往前追溯。架構

Simula

我常常問一個傻問題,那個時代,若是不出現面向對象技術,是否是會出現其餘技術?但回顧一下歷史,你或許會認爲,這是一個必然趨勢。只是有可能名稱有所變化而已。編程語言

面向對象技術的提出,最先是在編程語言Simula中提出的。其做者是Ole-Johan Dahl and Kristen Nygaard。Simula語言是兩個語言的統稱: SimulaI 和Simula 67(Simula 67 是在1967年發佈的)。Simula語言是公認的最先的面嚮對象語言,雖然他的實現並非很完整。但這是語言發展史上的一個重要的里程碑。ide

Kristen Nygaard在編寫一個計算機模擬系統的時候,感受到他必須找到一個更好的方式來描述和操做系統。後來Ole-Johan Dahl也加入了這個工做中來。在1962年,Kristen Nygaard在訪問Univac的時候,對當時的Uniac的系統架構師Robert Bemer第一次提出了Simula中的想法,並在Robert Bemer邀請參加的第二屆IFIP上,發表了《SIMULA -- An Extension of ALGOL to the Description of Discrete-Event Networks》。函數

在1966年,Dahl 和Nygaard 發表了關於在Simula中提出類(Class)和子類(SubClass)的概念。這些概念後來被應用到Simula 67中。1967年6月的一個會議上,Dahl建議對Type和Class概念進行明肯定義,這引起了一次認真嚴謹的討論,爲語言的標準化奠基了基礎。並在1968年2月份成立SIMULA Standards Group (SSG)來進行標準化工做。學習

 

Smalltalk

 雖然Simlua是第一個實現的面嚮對象語言,但並非第一個完整實現的,這點通常公認爲Smalltalk語言。Smalltalk雖然並無被普遍使用,但它對面向對象技術的推廣起了很是大的做用。lua

Smalltalk是一個支持面向對象、動態類型、類型反射的程序語言。是Alan Kay at Xerox Palo Alto Research Center (PARC)中發明的。Alan Kay設計的系統, Dan Ingalls實現的系統。實現的版本有不少,都是在20世紀的70年代。第一個版本是Smalltalk-71。Alan Kay在設計的時候,借用了Simula的message passing思想。操作系統

在Smalltak-76的版本中,加入了inheritance。在Smalltak-80中增長了meteclasses。這實現了一個思想:一切皆對象。Smalltak-80做爲第一個給PARC外界使用的版本。而現今流行的版本,也大可能是這個版本的後續版本。設計

C++

在面嚮對象語言中,C++是第一個被普遍使用的面嚮對象語言。C++是一個從C語言演化過來的支持面向對象編程的程序語言。Bells實驗室的Strustrup在1979年開始了這個跨時代的工做。對象

剛開始的版本叫:C with Classes。1983年10月份的時候正式命名爲C++。1990年5月,Borland C++發佈了第一個版本,同年6月和11月,Templates和Exceptions被接受。1992年3月,MircorSoft C++發佈了第一個版本。

相比於Simula和Smalltalk,C++的成功,從必定意義上說歸結於標準組織的創建和Borland公司和MicroSoft公司普遍推廣。成就了C++在面向對象編程語言中的重要位置。

其餘版本

在C++以後,影響巨大的就是Java和C#語言了。這兩個語言都引入了虛擬機的概念。另外一方面,也是更純粹的面嚮對象語言。由於在C++語言中,沒有類,也是能夠編程的。而在Java和C#中是不能夠的。

另外,Java和C#中都支持豐富的MetaClasses,這使得一切皆對象的概念支持的愈加深入。不過Java中的基礎類型在這方面的並無作到,也是一大遺憾。雖然如此,Java仍然是一個一直在學習的語言。

動態語言

在面向對象發展到現今,又出現了一些重大的變革。這就是動態語言的出現。他們也都是支持面向對象技術的。最典型的動態語言有JavaScript, Python, Ruby等等。

他們一個重大的變化就是,將類的信息改變爲動態的。並提出Ducking Type的概念。這在很大程度上,提高了編程的生產力。

詳細的資料能夠參考Python和Ruby的介紹。

爲何是面嚮對象語言

爲何是面嚮對象語言而不是其餘語言?這個問題有點愚蠢,可是縱觀面向對象的發展史,其實不難發現這是軟件工程發展的必然結果。在此以前,軟件工程遇到了不少問題。

  1. 程序愈來愈難以掌控。
  2. 若是缺乏了幫助,愈來愈難以掌握全部系統函數
  3. 程序難以複用之前的版本
  4. 編程不支持團隊開發。每個人必須瞭解程序中的全部地方,不能獨立處理系統的一個方面。
  5. 業務模型難以轉換到程序模型
  6. 獨立運行良好,但集成的時候卻不行。

從以上緣由看,必須出現一個新的複用技術,而這個技術必須比原來的函數級別要大。這就很天然地會將函數和其餘什麼的東西組合在一塊兒,進行統一封裝。

所以,面向對象的出現是必然的,若是讓這段歷史重來的話,最多隻是名稱的變化而已。

總結

面向對象發展是從Simula開始的,Smalltalk第一個作了相對完整的實現,而C++第一個被普遍使用的面嚮對象語言。

面向對象技術的出現是歷史發展的必然,而他在將來還會繼續發展。

相關文章
相關標籤/搜索