## 連載:面向對象葵花寶典:思想、技巧與實踐(2) - 面向對象語言發展歷史
**Simula**
面向對象技術最早是在編程語言Simula中提出的。1967年5月20日,在挪威奧斯陸郊外的小鎮莉沙布舉行的IFIP?TC-2?工作會議上,挪威科學家Ole-Johan?Dahl和Kristen?Nygaard正式發布了Simula?67語言。Simula?67被認為是最早的面向對象程序設計語言,是面向對象的開山祖師,它引入了所有后來面向對象程序設計語言所遵循的基礎概念:對象、類、繼承,但它的實現并不是很完整。?
Simula雖然最早提出面向對象的概念,但因為其本身復雜,比較難學,而并沒有大規模流行。但Simula提出的面向對象的概念對程序語言后繼的發展產生了巨大和深遠的影響。
?
**Smalltalk**?
Smalltalk是公認為歷史上第二個面向對象的程序語言,而且是第一個完整實現了面向對象技術的語言。?
最早的Smalltalk原型由艾倫·凱于70年代初提出。類(來自Simula-67)、海龜繪圖(來自MIT的LOGO)以及圖形界面等概念的有機組合,構成了Smalltalk的最初的藍圖。在1971年到1975年之間,艾倫·凱在Xerox?PARC的小組設計并實現了第一個真正的Smalltalk語言系統。?
Smalltalk引領了面向對象的設計思想的思潮,對其它眾多的程序設計語言的產生起到了極大的推動作用。C++,C#,Objective-C,Actor,Java和Ruby等,無一不受到Smalltalk的影響,這些程序語言中也隨處可見Smalltalk的影子。?
除了編程語言受到Smalltalk的影響外,90年代的許多軟件開發思想得利于Smalltalk,例如設計模式、敏捷編程和代碼重構等。
?
**C++**
C++是第一個大規模使用的面向對象語言,面向對象程序設計在80年代成為了一種主導思想,這很大程度上得益于C++的流行。而且與Simula、Smalltalk不同的是,C++到現在為止還是排名前三的編程語言,并沒有湮沒在歷史的洪流中。?
C++由貝爾實驗室的Bjarne?Strou-strup與1983年推出,C++進一步擴充和完善了C語言,成為一種面向?對象的程序設計語言。?
C++最開始的時候不是叫做C++,而是C?with?class,這是把它當作一種C語言的有效擴充。由于當時C語言在編程界居于老大的地位,要想發展一種新的語言,最強大的競爭對手就是C語言,所以當時有兩個問題最受關注:C++要在運行時間、代碼緊湊性和數據緊湊性方面能夠與C語言相媲美,但是還要盡量避免在語言應用領域的限制。在這種情況下,一個很自然的想法就是讓C++從C語言繼承過來,但如果只是簡單繼承的話,就不能有所突破了,因此Bjarne博士采取了拿來主義,參考了很多的語言,將它們的優點“繼承”過來了。例如:從Simula繼承了類的概念,從Algol68繼承了運算符重載、引用以及在任何地方聲明變量的能力,從BCPL獲得了//注釋,從Ada得到了模板、名字空間,從Ada、Clu和ML取來了異常。?
正是因為C++兼容C,同時又具備了面向對象的能力,使得C++能夠大行其道,廣受歡迎;然而也正是C++是一個超級大雜燴,語言本身很復雜,導致針對C++存在很多批評和爭議。有一個玩笑是說:Bjarne?Strou-strup發明C++語言的時候就沒有指望任何一個程序員能夠完全掌握C++!
?
**Java**
Java是目前使用最廣的面向對象編程語言,擁有全球最多的開發者,常年穩居開發語言排行榜第一名(偶爾和C交換一下位置)。如果說C++促進了面向對象的流行,那么Java就將面向對象推上了王座。比爾蓋茨曾這樣評價“Java是很長時間以來最優秀的程序設計語言”。?
Java是由Sun?Microsystems公司于?1995年5月推出,由“Java之父”James?Gosling和一群技術天才創造,并在1995年正式推出。最初的Java被稱為Oak?——?以Gosling辦公室外的一棵橡樹命名,后來由于商標版權問題,改名為Java?——?據說取名的靈感來自印尼爪哇島味道優美的咖啡。?
Sun?公司在推出?Java?之際就將其作為一種開放的技術,并且定位于互聯網應用。因此隨著互聯網的發展和流行,加上開源運動的發展,Java逐漸成為了最流行的編程語言。?
相比C++來說,Java語言是一個更加純凈、更加易用的面向對象編程語言。Java語言的編程風格和C++比較相似,但去掉了很多C++中復雜和容易出錯的特性,例如指針,多繼承等,同時增加了垃圾回收等大大提升生產率的特性。Sun公司對Java語言的解釋是:“Java編程語言是個簡單、面向對象、分布式、解釋性、健壯、安全與系統無關、可移植、高性能、多線程和動態的語言”,雖然有點王婆賣瓜的味道,但Java針對C++的改進,確實大大提升了生產力,降低了復雜度,客觀上也促進了Java的流行。
- 前言
- (1) - 程序設計思想的發展
- (2) - 面向對象語言發展歷史
- (3) - 面向過程 vs 面向對象
- (4) - 面向對象是瑞士軍刀還是一把錘子?
- (5) - 面向對象迷思:面向對象導致性能下降?
- (6) - 不要說你懂“類”
- (7) - “對象”新解
- (8) - “接口” 詳解
- (9) - “抽象類” 詳解
- (10) - “抽象” 詳解
- (11) - “封裝” 詳解
- (12) - “繼承” 詳解
- (13) - “多態” 詳解
- (14) - 面向對象開發技術流程
- (15) - 需求詳解
- (16) - 需求分析終極目的
- (17) - 需求分析518方法
- (18) - 用例分析
- (19) - 功能點提取
- (20) - 用例圖的陷阱
- (21) - SSD
- (22) - 領域模型
- (23) - 領域建模三字經
- (24) - 設計模型
- (25) - 類模型
- (26) - 類模型三板斧
- (27) - 動態模型設計
- (28) - 設計原則:內聚&耦合
- (29) - 高內聚低耦合
- (30) - SRP原則
- (31) - OCP原則
- (32) - LSP原則
- (33) - ISP原則
- (34) - DIP原則
- (35) - NOP原則
- (36) - 設計原則如何用?
- (37) - 設計模式:瑞士軍刀 or 錘子?
- (38) - 設計模式之道
- (39) - 設計原則 vs 設計模式
- (40) - DECORATOR模式
- (完)- 書籍已經出版