第11章面向对象实现课件

上传人:我*** 文档编号:140640183 上传时间:2020-07-31 格式:PPT 页数:98 大小:361.50KB
返回 下载 相关 举报
第11章面向对象实现课件_第1页
第1页 / 共98页
第11章面向对象实现课件_第2页
第2页 / 共98页
第11章面向对象实现课件_第3页
第3页 / 共98页
第11章面向对象实现课件_第4页
第4页 / 共98页
第11章面向对象实现课件_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《第11章面向对象实现课件》由会员分享,可在线阅读,更多相关《第11章面向对象实现课件(98页珍藏版)》请在金锄头文库上搜索。

1、第11章 面向对象实现,11.1 面向对象的程序设计语言 11.2 面向对象的程序实现特征 11.3 面向对象测试 11.4 组件技术简介,11.1 面向对象的程序设计语言,11.1.1 面向对象语言的优点 编码相对软件生命期的各个阶段来说是最容易的,所以为数较多的初级程序员均可参加这一阶段的工作。但是在软件生命期中,程序是经常需要被阅读的,例如设计测试用例、排错、修改、功能扩充等都需要程序员或其他人员阅读程序。可以这样说,在软件开发过程中,读程序的时间比写程序的时间还要多,因此,如何能够更完整、更准确地表达问题域语义,使所开发出的程序易于阅读,使所开发的系统具有很强的可重用性和可维护性,选择

2、一种什么样的语言作为开发工具就显得尤为重要。,面向对象设计的结果要转换为计算机系统可以识别的代码,既可以用面向对象语言,也可以用非面向对象语言实现。设计阶段设计的对象和关联最终都必须用具体的编程语言或数据库实现。使用OO语言来实现OO设计相对来说比较容易,因为语言的结构与设计的构造是相似的,OO语言支持对象、多态性和继承性。使用非OO语言需要特别注意和规定保留程序的OO结构,OO概念可以映射到非OO语言结构中,这只是一个表达方式的问题,不是语言能力的问题,因为编程语言最终要转换为机器语言,但OO语言良好的风格尤为突出。由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念

3、映射到目标程序中。使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中。,例如人语言并不直接支持类或对象的概念,程序员只能在结构中定义变量和相应的函数(事实上,不能直接在结构中定义函数而是要利用指针间接定义)。所有非面向对象语言都不支持一般到特殊结构的实现,使用这类语言编程时要么完全回避继承的概念,要么在声明特殊化类时,把对一般化类的引用嵌套在它里面。,我们说选用面向对象语言还是非面向对象语言,这只是一个表达方式的问题,不是语言能力的问题。从原理上说,使用任何一种通用语言都可以实现面向对象概念。在传统的面向功能的方法学中,强调的是确定和分解系统功能,这种做法虽然

4、是目标的最直接的实现方式,但由于功能是软件系统中最不稳定、最容易变化的方面,因而获得的程序往往难于维护和扩充。OO方法开发软件,其结构源于客观世界稳定的对象结构,与传统软件相比,软件本身的内部结构发生了质的变化,易重用性和易扩充性都得到提高。围绕对象来组织软件系统,可以自然地将现实世界模型映射到软件结构中。因此,使用面向对象语言,实现面向对象概念,远比使用非面向对象语言方便。当然,方便性也并不是决定选择何种语言的关键因素。,选择程序设计语言的关键因素,是语言的一致的表达能力、可重用性及可维护性。面向对象语言刻画客观系统较为自然,它具有: 识认性,系统中的基本构件可识认为一组可识别的离散对象;

5、类别性,系统具有相同数据结构与行为的所有对象可组成一类; 多态性,对象具有惟一的静态类型和多个可能的动态类型; 继承性,在基于层次关系的不同类中共享数据和操作等特点。 因此,能够更完整、更准确地表达问题域语义的面向对象语言的语法是非常重要的,这将会对系统带来下述几个重要优点。,1. 一致的表示方法 从前面章节的讲述中可以知道,面向对象开发基于不随时间变化的、一致的表示方法。这种表示方法应该从问题域到OOA,从OOA到OOD,最后从OOD到面向对象编程(OOP),始终稳定不变。一致的表示方法既有利于在软件开发过程中始终使用统一的概念,也有利于编程人员理解软件的各种配置成分。 我们以“自动饮料售货

6、机”为例,说明面向对象开发基于不随时间变化的、一致的表示方法。对于“自动饮料售货机”这一实例,在问题域、OOA、OOD或是OOP的各个阶段所用到的概念都是一致的、不变的。如:退币杆、找零、熄灯、投币口、投币、饮料、饮料倒出等,这对于用户、分析人员、编程人员、测试人员、维护人员来说,无疑是有很大的帮助的。,2. 可重用性 软件的可重用性的好坏对于提高软件产品的质量和软件开发效率意义重大。为了能带来可观的商业利益,必须在更广泛的范围中运用重用机制,而不是仅仅在程序设计这个层次上进行重用。因此,在OOA、OOD直到OOP中都显式地表示问题域语义,其意义是十分深远的。随着时间的推移,软件开发组织既可能

7、重用它在某个问题域内的OOA结果,也可能重用相应的OOD和OOP结果。,我们仍以“自动饮料售货机”为例,说明可重用性对于提高软件产品的质量和软件开发效率意义重大。假设该“自动饮料售货机”可提供汽水、洛神、红茶、可乐、奶昔等五种饮料,有关这五种饮料所实施的操作是相同的,因此,可以构造一个饮料类,然后由该类构造汽水、洛神、红茶、可乐、奶昔等五种不同的对象。这对于提高软件开发质量和软件开发效率具有重要的意义。,3. 可维护性 软件维护是一件极为复杂的事情,在软件的开发成本中约占到70%左右。为了降低维护成本,尽管人们反复强调保持文档与源程序一致的必要性,但是,在实际工作中很难做到交付两类不同的文档,

8、并使它们保持彼此完全一致。特别是考虑到进度、预算、能力和人员等限制因素时,做到两类文档完全一致几乎是不可能的。因此,维护人员最终面对的往往只有源程序本身。,以ATM(自动取款机)系统为例,说明在程序内部表达问题域语义对维护工作的意义。假设在维护该系统时没有合适的文档资料可供参阅,于是维护人员人工浏览程序或使用软件工具扫描程序,记下或打印出程序显式陈述的问题域语义,维护人员看到“ATM”、“账户”和“现金兑换卡”等,这对维护人员理解所要维护的软件将有很大帮助。 因此,在选择编程语言时,应该考虑的首要因素,是在供选择的语言中哪个语言能最好地表达问题域语义。,11.1.2 面向对象语言的技术特点 面

9、向对象语言借鉴了20世纪50年代诞生的人工智能语言LISP,引入了动态绑定的概念和交互式开发环境的思想;始于20世纪60年代的离散事件模拟语言SIMULA 67,引入了类的概念和继承机制;形成于20世纪70年代的Smalltalk语言。面向对象语言发展有两大方向,一是纯面向对象的语言,如 Smalltalk、EIFFEL、Java等语言;另一类是混合型面向对象语言,也就是在过程语言或其他语言中增加了类、继承等面向对象机制,如C+、Objective_C等语言。就两种形式的面向对象语言比较而言,纯面向对象语言更加适合面向对象方法研究和快速原型的实现;而混合型面向对象语言则更加注重于提高系统的运行

10、速度,使传统使用结构化编程方式的程序员容易接受面向对象思想。,面向对象程序设计语言以对象为中心,对象是程序运行时的基本成分。面向对象程序设计语言中提供了类、继承等机制。面向对象的程序设计即为设计类及由类构造程序的方法和过程,用计算机对象模拟现实世界。成熟的面向对象的程序设计语言通常都提供丰富的类库和强有力的开发环境。,1. 支持类与对象概念的机制 面向对象语言都允许用户动态创建对象,并且可以用指针引用动态创建的对象。允许动态创建对象,就意味着系统必须处理内存管理问题,如果不及时释放不再需要的对象所占用的内存,动态存储分配就有可能耗尽内存,出现内存不足的问题。通常,对这类问题的解决方法有两种,一

11、种是由语言的运行机制自动管理内存,即提供自动回收“垃圾”的机制;另一种是由程序员编写释放内存的代码。自动管理内存不仅方便而且安全,但是必须采用先进的垃圾收集算法才能减少开销。某些面向对象的语言(如C+)允许程序员定义析构函数(Destructor)。每当一个对象超出范围或被显式删除时,就自动调用析构函数。这种机制使得程序员能够方便地构造和唤醒释放内存的操作,却又不是采用垃圾收集机制。,2. 实现整体 - 部分结构的机制 实现整体 - 部分结构的机制有两种方法,一种是使用指针实现整体 - 部分结构,另一种是使用独立的关联对象实现整体 - 部分结构。一般来说,通过增加内部指针可以方便地实现关联,使

12、用指针是最容易的实现方法。但是,大多数现有的面向对象语言并不显式支持独立的关联对象。,3. 实现一般 - 特殊结构的机制 实现一般 - 特殊结构的机制,包括实现继承的机制和解决名字冲突的机制。所谓解决名字冲突,是指在支持多重继承的语言中,处理在多个基类中可能出现的重名问题。通常,有些语言拒绝接受有名字冲突的程序,另一些语言提供了解决冲突的协议。无论使用何种语言,程序员都应该尽力避免出现名字冲突。,4. 实现属性和服务的机制 实现属性的机制应该着重考虑的几个因素:支持实例连接的机制;属性的可见性控制;对属性值的约束。对于实现服务的机制来说,主要应该考虑下列因素:支持消息连接的机制;控制服务可见性

13、的机制;动态联编。 所谓动态联编,是指应用系统在运行过程中,当需要执行一个特定服务的时候,选择(或联编)实现该服务的适当算法的能力。动态联编机制使得程序员在向对象发送消息时拥有较大自由,在发送消息前,无须知道接收消息的对象当时属于哪个类。,5. 类型检查 按照编译时进行类型检查的严格程度,程序设计语言可以分为三种类型:弱类型、强类型和混合型。弱类型:语言仅要求每个变量或属性隶属于一个对象。强类型:语法规定每个变量或属性必须准确地属于某个特定的类。面向对象语言包含不同类型的语言,例如,Smalltalk实际上是一种无类型语言(所有变量都是未指定类的对象);C+则是强类型语言。混合型语言:为了提高

14、操作的效率,甚至允许属性值不是对象而是某种预定义的基本类型数据(如整数、浮点数等),如C+,Objective_C等。,强类型语言主要有两个优点:有利于在编译时发现程序错误;增加了优化的可能性。通常使用强类型编译型语言开发软件产品,使用弱类型解释型语言快速开发原型。一般来说,强类型语言有助于提高软件的可靠性和运行效率,现代的程序语言都是强类型的,大多数理论支持强类型检查。,6. 类库 目前,基本所有的面向对象的程序设计语言都提供一个实用的类库。某些语言本身并没有规定提供什么样的类库,而是由实现这种语言的编译系统自行提供类库。有了类库,程序员可以重用许多软构件,不必重新编写,这为实现软件重用带来

15、很大方便。 类库中通常包含实现通用数据结构的类,例如,动态数组、表、队列、栈和树等,通常把这些类称为包容类。类库中还包含了实现各种关联的类。 更完整的类库通常还提供了接口类和图形库。接口类是独立于具体设备的(例如,输入输出流),图形库是用于实现窗口系统的用户界面类的一个相对独立的库。,7. 效率 某些早期的面向对象语言是解释型的而不是编译型的。许多人认为这些语言的主要缺点是效率低。当今的面向对象语言都拥有完整类库,类库中提供了更高效的算法和更好的数据结构,与非面向对象语言相比,能得到更快运行的代码。例如,库中已经提供了算法先进、代码可靠的一类数据结构,程序员再不必编写像实现哈希表或平衡树算法的

16、代码了,因此,提高了编程效率和运行效率。,面向对象语言在运行时使用动态联编实现多态性,这似乎需要在运行时查找继承树,以得到定义给定操作的类。这也是人们认为面向对象语言效率低的另一个理由。当今的绝大多数面向对象语言都优化了这个查找过程,从而实现了高效率查找。只要在程序运行时始终保持类结构不变,就能在子类中存储各个操作的正确入口点,从而使得动态联编成为查找哈希表的高效过程,不会由于继承树深度加大或类中定义的操作数增加而降低效率。,8. 永久保存对象 在一个程序都对数据进行处理时,希望数据能够长时间保存下来,以备后用。保存数据需要提供某种保存数据的方法。长期保存数据主要有两个原因: 为实现在不同程序之间传递数据,需要保存数据; 为恢复被中断了的程序的运行,首先需要保存数据。,对于不同面向对象语言,长期保存数据的方法也不同。有些面向对象语言(例如C+)没有提供直接存储对象的机制,这些语言的用户必须自己管理对象的输入输出,或者购买面向对象的数据库管理系统。有些面向对象语言(例如Smalltalk)把当前的执

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号