<marquee width=358>欢迎来到月影社区,希望这里可以成为您美丽的梦幻花园,如果你觉得这里好请分享给您的朋友!- wf66.com</marquee> 将月影社区设置为您的首页将月影社区地址加入到您的收藏栏
月影社区时尚音乐音乐查询IP手机许愿之瓶最新更新文件加密访客留言爱音乐
欢迎您,首页 >> 信息中心 >> Java咖啡馆(7)——大话面向对象(上)

请输入您关键字:


Java咖啡馆(7)——大话面向对象(上)

推荐查看本文HTML版本

归根结底,计算机的发展史可以归纳为“抽象”两个字。应用存储程序的理论,人们从最早的现代计算机抽象出软件(Software)和硬件(Hardware)两个独立部分。为了让软件各司其职,软件又被抽象成专门与硬件打交道的操作系统(Operating System)和建筑在操作系统之上的应用软件(Application)。数据处理又是许多应用软件必须的前提,从而抽象出数据库系统(Database System)。到了网络时代,为了更好地适应网络软件的开发,应用软件中又抽象出应用服务器(Application Server)提供各种服务。

编程语言的发展亦复如是。让我们在这回的咖啡馆中看看编程语言的发展简史,从头认识Java中的面向对象编程技术。

一、前世
1946年2月15日,随着第一台现代电子计算机ENIAC轰鸣着来到这个世界,编写程序也成为三百六十行之外的一个崭新职业。我们称编写程序的工程师为程序员或者开发者。

ENIAC是一台重达30吨的庞然大物,由19000多个晶体管、1500多个继电器组成。为了给它下达指令,程序员必须通过不同的连接线组合进行编程。要编制运行新的程序,还必须拔掉连线重新来过。整天面对二进制编程的工作相当枯燥乏味,而且是直接对程序地址读写,自然出错频繁。阅读由连线表达的程序更不亚于揣摩天书,维护和改造程序的价格成本居高不下。更要命的是,早期的计算机制造价格相当昂贵,而在程序编制调试完成之前,计算机不得不一直空转,导致软件开发的费用竟然远远超过硬件的投入。

为了解决软件开发的难题,计算机科学家发明了汇编语言,通过一些助记符来减轻二进制编码的开发压力。这的确是行之有效的方法,直到现在,程序员在开发中还常常使用嵌入式汇编来提高软件运行速度,游戏引擎更是如此。然而,汇编语言太依赖程序员的素质,而且无法适应大规模的开发。

黄糖故事 Grace Murray Hopper、Bug和Debug

由于一次传奇般的投资,Mark I计算机把IBM从生产制表机、肉铺磅秤、咖啡碾磨机等乱七八糟玩意的行业,领入了计算机制造业的领地,最终成为如今的蓝色巨人。本系列文章中曾介绍过Mark I三个程序员之一的数学家Grace Hopper是如何创造了“BUG”和“DEBUG”这两个计算机史上著名的两个名词的。而这位Hopper女士,实在是一个不得了的人物。1952年,Hopper觉得用机器码编程是不是比较原始,为什么不能用类自然语言编写程序,然后再用一个工具把它转换成机器码呢?不久,她就开发出世界上第一套编译器A-0,是现代编译技术的原型。1956年她在第一台储存程序的商业电子计算机UNIVAC I、II上开发出B-0,之后叫做FLOW-MATIC,它导致了计算机商用语言COBOL(COmmon Business Oriented Language)的诞生。虽然Hopper有着“电脑之母”的美誉,但是传说她办公室有一个倒着走的钟,以及一面秀着骷髅头的海盗旗。

到了六十年代,FORTRAN (FORmula TRANslating)、COBOL、LISP、ALGOL 60等现代高级语言的出现了。程序员可以用接近自然语言的程序语言编制软件,然后通过编译器转换成机器可执行的代码。由于使用精确的形式语言来定义程序语言本身,并且通过对硬件的抽象使得程序与计算机平台无关,导致高级语言生产效率大大提高,维护费用自然降低不少,计算机软件业终于得以蓬勃发展。

好景不长。随着软件大规模的应用,程序的开发方法和管理手段逐渐无法跟上软件规模的膨胀,从而导致了软件危机的出现。就拿1963~1966年间的IBM 360系统来说,该系统有100万行的代码量,IBM每年动用5000人来维护该系统,但是,每个版本都是从上一个版本找出1000以上个错误而修订的结果,好像越改错误越多,根本没有改善的迹象。有人把IBM 360系统形容为一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷的越深,最后仍然无法逃脱灭顶的灾难。

人们不得不停下脚步思考,到底哪里出了问题。回想自己,每个人做事情,都是列举重点,然后细化并逐个完成。比如制造自行车,肯定是先把自行车按照功能分块,先造车架,然后是两个车轮,接着是踏板等传动装置,最后才是坐垫、车铃等零件。而制造车轮,肯定是要分别制造钢圈、钢丝、轮胎,而轮胎有分内外胎。如果软件开发能够遵循这种从大到小、逐步精确的思想,是不是能够解决这个软件危机呢?

没错,这种结构化的抽象分析方法,导致了结构化程序设计方法的诞生。

 黄糖故事 Niklaus Wirth和PASCAL

凡是学过一点计算机知识的人大概都知道“数据结构+算法二程序”这一著名公式。提出这一公式的瑞士计算机科学家Niklaus Wirth由于发明了多种影响深远的程序设计语言,并提出结构化程序设计这一革命性概念而获得了1984年的图灵奖。

Wirth开发的PASCAL在数据结构和过程控制结构方面都有很多创造,比如Java中字符型、引用型,以及if-then-else、while、for等多种控制结构,都是从PASCAL里面借鉴发展而来的。可以说,现代程序设计语言中常用的数据结构和控制结构绝大多数都是由PASCAL语言奠定基础的,因此PASCAL在程序设计语言的发展史上具有承上启下的重要里程碑意义。现在你知道为什么很多计算机专业的学生都要学PASCAL语言了吧。

1971年,Wirth基于其开发程序设计语言和编程的实践经验,首次提出了“结构化程序设计”(structured programming)的概念。这个概念的要点是:不要求一步就编制成可执行的程序,而是分若干步进行,逐步求精。第一步编出的程序抽象度最高,第二步编出的程序抽象度有所降低……最后一步编出的程序即为可执行的程序。用这种方法编程,似乎复杂,实际上优点很多,可使程序易读、易写、易调试、易维护、易保证其正确性及验证其正确性。结构化程序设计方法又称为“自顶向下”或“逐步求精”法,在程序设计领域引发了一场革命,成为程序开发的一个标准方法,尤其是在后来发展起来的软件工程中获得广泛应用。有人评价说沃思的结构化程序设计概念“完全改变了人们对程序设计的思维方式”,这是一点也不夸张的。

黄糖故事 Philippe Kahn的Borland传奇

Wirth开发PASCAL的初衷是为了有一个适合于教学的语言。但一经推出,由于它的简洁明了、提供丰富的数据结构和控制结构,使得程序开发大为简便,竟然大受欢迎。在C语言问世以前,PASCAL是风靡全球、最受欢迎的语言之一,不但创下了发行拷贝数最多的世界记录,而且成为大学数据结构教学的“惟一官方指定”语言。

Phillipe Kahn是Niklaus Wirth的学生,毕业后到美国加利福尼亚州创立了Borland公司,凭借拳头产品Turbo PASCAL,当时就卖出了100多万个拷贝,成为百万富翁。而Borland公司是程序员津津乐道到程序开发工具供应商,他们从最早的Turbo PASCAL、Turbo C、Turbo PROLOG等Turbo系列,到如今的Delphi、C++ Builder、JBuilder、C# Builder系列,无一不是举足轻重的开发工具,从而在开发者心目中有着崇高的地位。

二、今生[月影社区 http://wf66.com/]
虽然结构化程序设计使得程序员世界观经历了巨大变革,行之有效地解决了软件开发中的许多问题,然而,结构化程序设计并不能完全解决软件危机,人们仍然渴望生产效率更高、更可靠、易维护、易管理的开发思想和开发方法。

实际上,人们认识世界,是有一些基本的法则的:

·区分事物及其属性,如自行车和车子的颜色。
·区分整体对象及其组成部分,如区分自行车和车轮。[月影读书频道 http://wf66.com/]
·不同对象类的形成及其区分,如山地自行车和两人休闲车虽然有相当的区别,但都属于自行车这个类型。

心理学研究表明,把客观世界由许多对象组成,对象具有其属性和行为,之间存在着各种联系,这样能够更好的刻画问题域,也更接近人类的自然思维方式。这就是面向对象程序开发思想的由来。

对象的概念最早出现于五十年代人工智能的早期著作中,而OO(面向对象)的实际发展始于1966年的Kisten Nygaard和Ole-Johan Dahl开发的Simula语言。正如名字昭示的,Simula可以模拟客观世界。比如在著名的银行出纳问题中,你可以创建若干个出纳员对象,若干个客户对象,还有若干钱对象以及交易对象(即把存款、提款等交易动作看成一个对象)—— 这个世界是由对象组成的。所有出纳员对象,除了各自的状态不同,都是属于的出纳员这个抽象类别。出纳员对象和客户对象之间通过消息传递进行交互,并且最终生成若干个交易对象,而交易对象可以操纵钱对象,完成存款或者提款的动作。

你看,这个银行柜台世界,是不是完全可以由对象模拟呢?从而,面向对象设计程序,主要就是设计抽象的类。

面向对象程序设计思想是一个里程碑。Alan Kay设计了世界上第一个完全面向对象的语言Smalltalk并成为图灵奖得主,Bjarne Stroustrup明智地把面向对象和最流行的C语言结合而开发了有史以来取得最大成功的C++语言,Anders Hejlsberg把PASCAL的面向对象版本Object PASCAL结合构件的思想开发出Windows平台上最优秀的快速程序开发(RAD)工具之一Delphi,James Gosling结合Internet背景开发了本咖啡馆赖以谋生计的Java语言,Bill Gates把.Net体系结构完全构筑在面向对象之上……

黄糖故事 “面向对象”与“物件导向”

阅读台湾技术作家的文章时经常会遇到“物件导向”一词。实际上,这是港澳台地区的计算机科学家对“Object Oriented”的翻译,与我们所说的“面向对象”是一回事情。不过,如果仔细从OO的理念品评一下两者的味道,似乎“物件导向”这个翻译更雅,更原汁原味。

虽然面向对象只是从语法上引入为面向对象服务的封装、继承、多态等概念,但是必须看到,OO并非一种特殊的规定或者行业规范,而是一个优秀的理念,学习Java,应该把OO当作指导思想。(待续)

  [月影读书频道 http://wf66.com/]

Java咖啡馆(7)——大话面向对象(上) 2006-9-20
转到本主题第:[ 1 ]
相关评论

暂无评论

总计0页 [ ]上一页 下一页
发表评论(揪错)
呢称: * 您尚未登陆,请登录
来自: *
内容:
 

(为防止非法信息,您的言论提交后需要审核才能正常显示)

文学
精品文萃 情感天地 言情小说
网络小说 玄幻小说 悬疑恐怖
武侠小说 古典品谈 外国名著
儿童文学 会员原创 学习园地
杂谈其它
娱乐
爆笑网文 星座占卜 影音动漫
娱乐新闻 影视剧情
诗词
青竹诗歌 个人诗集 宋词雅赏
全唐诗录
新闻
国际新闻 国内新闻 科技新闻
体育新闻
图片
图文专区 艺术长廊 桌面壁纸
精品素材 像素图片
漫画
单幅漫画 爆笑四格 连环漫画
电脑
电脑入门 图形图像 编程开发
游戏
我爱Q宠 最新攻略 最新秘籍
游戏新闻 技巧心得
经济
帕格节电 财经资讯 股市证券
生活
百科知识 外语学院 潮流时尚
健康医疗 宠物花卉 汽车地带
行走天下
美食
面食甜点 家常菜品 药膳食疗
美食天下 烹饪技巧 松辽风味
燕京风味 巴蜀风味 滇黔风味
赣江风味 徽皖风味 闽台风味
齐鲁风味 中州风味 岭南风味
荆楚风味 三晋风味 淞沪风味
苏扬风味 潇湘风味 钱塘风味
民族风味 素斋仿荤
营销
管理杂谈 谈经论道 培训激励
经营战略 职场生涯 公关交际
关于我们版权声明本站导航友情连结作品演示 TOP↑
本论坛言论纯属发表者个人意见,与£月影社区£立场无关。 皖ICP备16024038号-1
禁止发布任何色情/政治/反动相关信息让我们共同来营造一个属于我们的梦幻家园
Copyright ©2001-2006 MoonShadow. All rights reserved.  Version 4.0  Licence 2006.4.2
建站天数:7216天 本站基于ASP+JS构建,完全自主开发,版权归属月影社区 管理员QQ:23165062 Time:62ms