软件工程-第9章第1节_第1页
软件工程-第9章第1节_第2页
软件工程-第9章第1节_第3页
软件工程-第9章第1节_第4页
软件工程-第9章第1节_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9

面向对象基础

面向对象的思想最初出现于挪威奥斯陆大学和挪威计算中心共同研制的Simula67语言中。其后,随着位于美国加利福尼亚的Xerox研究中心推出的Smalltalk76和80语言,面向对象的程序设计方法得到比较完善的实现。

面向对象是当前计算机界关心的重点,是20世纪90年代软件开发的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围,如数据库系统、交互式接口、应用结构、应用平台、分布式系统、网络管理结构、CAD技术和人工智能等领域。一些新的工程概念及其实现,如并发工程、综合集成工程等也需要面向对象的支持,所以面向对象是程序设计的新风范,是软件开发的一种新方法,是一种新的技术。9.1面向对象程序设计语言的发展9.1.1Simula语言Simula是在1967年由挪威的奥斯陆大学和挪威计算机中心的JohenDahl和Nygard设计的,当时取名为Simula67。这个名字反映了它是以前的一个仿真语言Simula的延续。然而,Simula67是一种真正的多功能程序设计语言,仿真只不过是其中的一个应用而已。9.1.1Simula语言Simula是在ALGOL60的基础上扩充了一些面向对象的概念而形成的一种语言,它的基本控制结构与ALGOL相同,基本数据类型也是从ALGOL60照搬过来的。一个可执行的Simula程序由包含多个程序单元(例程和类)的主程序组成,还支持以类为单位的有限形式的分块编译。Simula语言中引入了类、子类的概念,提供继承机制,也支持多态机制,还提供了协同例程,它模仿操作系统或实时软件系统中的并行进程概念。9.1.1Simula语言

在Simula中,协同例程通过类的实例来表示。Simula还包含对离散事件进行仿真的一整套原语,仿真是面向对象技术的应用中最直接受益的一个主要领域。Simula通过一个类SIMULATION来支持仿真概念,该类可作为其他任何类的父类,该类的任何子类称为仿真类。Simula是一种混合型的面向对象程序设计语言,它开创了面向对象思想的先河,具有特殊的贡献,它仍然具有活力,还拥有一定范围内的一批热心支持者。目前在许多公司的不同硬件环境中都装有Simula语言的编译器,这些公司大多数是挪威和瑞典的公司。9.1.2Smalltalk语言Smalltalk的思想是1972年由AlanKay在犹他大学提出的,后来当一个专门从事图形工作的研究小组得到Simula编译程序时,便认为这些概念可直接应用到他们的图形工作中。当Kay后来加入到Xerox研究中心后,他使用同样的原理作为一个高级个人计算机环境的基础。Smalltalk先是演变为Smalltalk76,然后是Smalltalk80。9.1.2Smalltalk语言Smalltalk是一种纯面向对象程序设计语言,它强调对象概念的归一性,引入了类、子类、方法、消息和实例等概念术语,应用了单继承性和动态联编,成为面向对象程序设计语言发展中一个引人注目的里程碑。9.1.2Smalltalk语言在Smalltalk80中,除了对象之外,没有其他形式的数据,对一个对象的唯一操作就是向它发送消息。在该语言中,类被看成是对象,类是元素的实例,它全面支持面向对象的概念,任何操作都以消息传递的方式进行。9.1.2Smalltalk语言Smalltalk是一种弱类型语言,程序中不作变量类型说明,系统也不作类型检查。它的虚拟机和虚拟像实现策略,使得数据和操作有统一的表示,即bytecode。它有利于移植和向面向对象数据库的演变,它有较强的动态存储管理功能,包括垃圾收集。

9.1.2Smalltalk语言Smalltalk不仅是一种程序设计语言,它还是一种程序设计环境。该环境包括硬件和操作系统涉及的许多方面,这是Smalltalk最有意义的贡献之一,它引入了用户界面的程序设计工具和类库:多窗口、图符、正文和图形的统一、下拉式菜单、使用鼠标定位、选择设备等。它们都是用类和对象实现的,在这些工具支持下,程序中的类、消息和方法的实现都可以在不同窗口中联机地设计、实现、浏览和调试。9.1.2Smalltalk语言在Smalltalk环境中,这些界面技术与面向对象程序设计技术融合在一起,使得面向对象程序设计中的“对象”对广大使用者来说是可见的,并且是具有实质内容的东西。Smalltalk的弱点是不支持强类型,执行效率不高,这是由该语言是解释执行bytecode和查找对象表为主的动态联编所带来的。9.1.3Eiffel语言Eiffel是20世纪80年代后期由ISE公司的B.Meyer等人开发的,它是继Smalltalk80之后又一个纯面向对象的程序设计语言。它的主要特点是全面的静态类型化、全面支持面向对象的概念、支持动态联编、支持多重继承和具有再命名机制可解决多重继承中的同名冲突问题。9.1.3Eiffel语言Eiffel还设置了一些机制来保证程序的质量。对一个方法可以附加前置条件和后置条件,以便对这个方法调用前后的状态进行检查,若这样的断言检查出了运行错误,而该方法又定义了关于异常处理的子句,则自动转向异常处理。可以对一个类附加类不变量的断言,以便对类的所有实例进行满足给定约束的检查。Eiffel还支持大量的开发工具,如垃圾收集、类库、图形化的浏览程序、语法制导编辑器和配置管理工具等。它在许多方面克服了Smalltalk80中存在的问题,因此在面向对象程序设计语言中有较高的地位,同时Eiffel语言还保留了一个开发架构,可以和UML-CASE工具、C/C++、Java、COM组件、.NET组件协同合作。9.1.4C++ 语言C++ 是一种混合型的面向对象的强类型语言,由AT&T公司下属的Bell实验室于1986年推出。C++ 是C语言的超集,融合了Simula的面向对象的机制,借鉴了ALGOL68中变量声明位置不受限制、操作符重载,形成一种比Smalltalk更接近于机器但又比C语言更接近问题的面向对象程序设计语言。9.1.4C++ 语言C++ 支持基本的如对象、类、方法、消息、子类和继承性面向对象的概念。C++ 的运行速度明显高于Smalltalk80,因为它在运行时不需作类型检查,不存在为bytecode的解释执行而产生的开销,动态联编的比重较小。C++ 基于C语言的特点,易于为广大C语言程序员所接受,可充分利用长期积累下来的C语言的丰富例程及应用。9.1.5Java语言1995年,美国SunMicrosystems公司正式向IT业界推出了Java语言,该语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点,程序员们纷纷尝试用Java语言编写网络应用程序,并利用网络把程序发布到世界各地进行运行。目前,Java语言已经成为最流行的网络编程语言之一,截止到2018年,全世界大约有500万Java程序员,占程序语言80%的使用人群,许多大学纷纷开设Java课程,java正逐步成为世界上程序员使用最多的编程语言。9.1.5Java语言C语言是面向过程的语言,C++语言是面向过程和面向对象混合的语言,Java语言产生于C++ 语言之后,是完全的面向对象的编程语言,充分吸取了C++ 语言的优点,采用了程序员所熟悉的C和C++ 语言的许多语法,同时又去掉了C语言中指针、内存申请和释放等影响程序健壮性的部分,可以说Java语言是站在C++ 语言这个“巨人的肩膀上”前进的。9.1.6面向对象程序设计语言从第一个面向对象程序设计语言Simula问世到现在,已有几十种面向对象语言出现,这些语言分为两大类:第一类是纯面向对象的程序设计语言,它们是Smalltalk-80,Eiffel,SELF,Java等;第二类是混合式面向对象程序设计语言,它们是C++,Simula,CLOS,CommonLoops,Objective-C,objectivePascal等。9.1.6面向对象程序设计语言面向对象的程序设计在相当长的时间内并没有引起软件界的重视,一个原因是理解这些成果的人长期没有超出大学的范围,只局限于研究人员的范围。在没有产生实际经济效益之前,很难说服软件产业采用一个全新的模式。另一个原因则是它们对计算机平台的要求很高,需要大量的存储空间、高速的硬件设备,这使得人们在经济上无法接受。另外,所开发的产品运行效率不高也制约了它们的运用。9.1.6面向对象程序设计语言到了20世纪80年代中期,硬件的迅速发展逐步排除了采用面向对象程序设计在性能价格比方面的障碍,就连个人计算机也能满足面向对象程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论