连载:面向对象葵花宝典:思想、技巧与实践(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的流行。

==============================================================

转载请注明出处:http://blog.csdn.net/yunhua_lee/article/details/17279013

==============================================================

时间: 2024-09-16 04:24:05

连载:面向对象葵花宝典:思想、技巧与实践(2) - 面向对象语言发展历史的相关文章

连载:面向对象葵花宝典:思想、技巧与实践(28) - 设计原则:内聚&耦合

前面通过实例讲解了一个一环扣一环的面向对象的开发流程:用例模型 -> 领域模型 -> 设计模型(类模型 + 动态模型),解答了面向对象如何做的问题.接下来我们就要讲"如何做好面向对象设计"的技巧了 =================================================================== [内聚] 参考维基百科的解释,内聚的含义如下: cohesion refers to the degree to which the eleme

连载:面向对象葵花宝典:思想、技巧与实践(1) - 程序设计思想的发展

史前时代:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数据.简单来说,就是直接编写0和1的序列来代表程序语言.例如:使用0000 代表 加载(LOAD),0001 代表 存储(STORE)等.  机器语言由机器直接执行,速度快,但一个很明显的缺点就是:写起来实在是太困难了,一旦你发现自己写错了,改起来更蛋疼!这样直接导致程序编写效率十分低下,编写程序花费的时间往往是实际运行时间的几十倍或几百倍.  有一个关于机器语言和比尔盖茨的笑话,是说比尔

连载:面向对象葵花宝典:思想、技巧与实践(3) - 面向过程 vs 面向对象

面向过程 在介绍面向对象之前,我们首先要介绍"面向过程",首先是因为"面向过程"是软件思想中的鼻祖:其次是因为只有了解了面向过程,你才能更好的了解面向对象!正所谓:知己知彼百战百胜!  面向过程是一种以"过程"作为中心的编程思想,其中过程的含义就是"完成一件事情的步骤".  面向过程其实是一种"机械的思想",它就像流水线一样,一个阶段衔接一个阶段,每个阶段都有自己的输入.处理.输出,而在流水线上流动的就是我

013_《Delphi面向对象编程思想》

<Delphi面向对象编程思想> Delphi 教程 系列书籍 (013) <Delphi面向对象编程思想> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 刘艺 [作译者介绍] 丛书名: Borland核心技术丛书 出版社:机械工业出版社 ISBN:7111127722 上架时间:2003-10-10 出版日期:2003 年9月 开本:16开 页码:476 版次:1-1 内容简介 这是一本纯粹讨论dlephi面向对象编程的力作. 本书以精

Silverlight游戏设计:(五)面向对象的思想塑造游戏对象

传说,面向对象的开发模式最初是因为程序员偷懒而不小心诞生的.发展至今,人们从最初的热忠于 讨论某某语言是否足够面向对象到现在开始更广泛的关注面向对象的思想而不是具体内容.面向对象的思 想其实并不深奥,它存在的目的只有一个:让程序开发更贴近我们的现实世界. 还记得猫.猫叫:狗.狗吃东西吗?无数的程序员都喜欢将此类似的情形设计当作面向对象最好的例 子.是的,非常生动且形象:但实际运用中你是否能真正做到举一反三? 回述到游戏设计中,大家是否时常会感觉游戏世界与我们的真实世界如此贴近?游戏中的精灵好比我

java语言学习002_面向对象编程思想

      人类在认识世界时,为了方便自己和智慧提升,很自然的对事物进行了分类.对世界进行了抽象,若把所有各个事物看做对象,纵观所有对象,这些对象具有各自的或共有的特征,并且又有共有的或各自的的能力,这样就可以对具有相同一些特征和一些能力的事物进行了归类.       比如,车,有汽车,火车他们都有哪些属性?                  汽车,特征:长度,颜色,速度,轮胎,载重,平面行走--能力:移动,载东西,--                  火车,特征:长度,颜色,速度,轮胎,载重

求助、面向对象的思想查找字符串中的数字

问题描述 要用面向对象的思想来查找字符串中的数字.实现判断某个字符是否位数字的方法如下:publicstaticboolgetNumeric(stringstr){boolb=false;string[]ArrayInt=newstring[]{"1","2","3","4","5","6","7","8","9","

将面向对象的思想带入TC

写TC貌似是很简单的工作,但当动手写的时候往往会出现,不知道写什么,又感觉有一堆的东西需要写,即使一个简单的日常也会觉得里面的逻辑非常复杂,然后就是晕得不知所向. 个人认为,写TC没有固定的模式,也没有唯一的答案,每个人的方式不同,习惯不同,TC中的如何分类归纳也就自然不相同.但目标是一致的,基本目标是覆盖需求.无盲区:加强目标是加深测试点,完善用户友好性等. 下面分享下我写TC的几种思路. 第一种思路--先对象,后流程 面向对象是在平常入门学习中 首先接触到的概念,它不仅仅存在于代码的编写中,

重温面向对象的思想——构造器和重载

1.this关键字 this表示这个对象的参考名称:例如this.age1=age2;表示将age2的值,赋值给这个对象的私有属性age1. 2. .重温面向对象的思想--构造器和重载 构造器:创建一个对象时,有时候需要对在实例化一个对象时,对这个对象进行初始化,这个时候我们就需要构造方法来进行这种初始化. 重载:当这种初始化需要按照不同的语境,不同的参数的构造器来进行初始化. 总结--方法的重载是多种构造器,用以完成不同的初始化. -注意:构造器==构造方法,两者一样 3.构造方法和自定义方法