## 连载:面向对象葵花宝典:思想、技巧与实践(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模式
- (完)- 书籍已经出版