《面向对象实现》PPT课件.ppt
《《面向对象实现》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《面向对象实现》PPT课件.ppt(98页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第11章 面向对象实现 第11章 面向对象实现 11.1 面向对象的程序设计语言面向对象的程序设计语言 11.2 面向对象的程序实现特征面向对象的程序实现特征 11.3 面向对象测试面向对象测试 11.4 组件技术简介组件技术简介 第11章 面向对象实现 11.1 面向对象的程序设计语言面向对象的程序设计语言11.1.1 面向对象语言的优点面向对象语言的优点 编码相对软件生命期的各个阶段来说是最容易的,所以为数较多的初级程序员均可参加这一阶段的工作。但是在软件生命期中,程序是经常需要被阅读的,例如设计测试用例、排错、修改、功能扩充等都需要程序员或其他人员阅读程序。可以这样说,在软件开发过程中,
2、读程序的时间比写程序的时间还要多,因此,如何能够更完整、更准确地表达问题域语义,使所开发出的程序易于阅读,使所开发的系统具有很强的可重用性和可维护性,选择一种什么样的语言作为开发工具就显得尤为重要。第11章 面向对象实现 面向对象设计的结果要转换为计算机系统可以识别的代码,既可以用面向对象语言,也可以用非面向对象语言实现。设计阶段设计的对象和关联最终都必须用具体的编程语言或数据库实现。使用OO语言来实现OO设计相对来说比较容易,因为语言的结构与设计的构造是相似的,OO语言支持对象、多态性和继承性。使用非OO语言需要特别注意和规定保留程序的OO结构,OO概念可以映射到非OO语言结构中,这只是一个
3、表达方式的问题,不是语言能力的问题,因为编程语言最终要转换为机器语言,但OO语言良好的风格尤为突出。由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念映射到目标程序中。使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中。第11章 面向对象实现 例如人语言并不直接支持类或对象的概念,程序员只能在结构中定义变量和相应的函数(事实上,不能直接在结构中定义函数而是要利用指针间接定义)。所有非面向对象语言都不支持一般到特殊结构的实现,使用这类语言编程时要么完全回避继承的概念,要么在声明特殊化类时,把对一般化类的引用嵌套在它里面。第11章 面向对
4、象实现 我们说选用面向对象语言还是非面向对象语言,这只是一个表达方式的问题,不是语言能力的问题。从原理上说,使用任何一种通用语言都可以实现面向对象概念。在传统的面向功能的方法学中,强调的是确定和分解系统功能,这种做法虽然是目标的最直接的实现方式,但由于功能是软件系统中最不稳定、最容易变化的方面,因而获得的程序往往难于维护和扩充。OO方法开发软件,其结构源于客观世界稳定的对象结构,与传统软件相比,软件本身的内部结构发生了质的变化,易重用性和易扩充性都得到提高。围绕对象来组织软件系统,可以自然地将现实世界模型映射到软件结构中。因此,使用面向对象语言,实现面向对象概念,远比使用非面向对象语言方便。当
5、然,方便性也并不是决定选择何种语言的关键因素。第11章 面向对象实现 选择程序设计语言的关键因素,是语言的一致的表达能力、可重用性及可维护性。面向对象语言刻画客观系统较为自然,它具有:识认性,系统中的基本构件可识认为一组可识别的离散对象;类别性,系统具有相同数据结构与行为的所有对象可组成一类;多态性,对象具有惟一的静态类型和多个可能的动态类型;继承性,在基于层次关系的不同类中共享数据和操作等特点。因此,能够更完整、更准确地表达问题域语义的面向对象语言的语法是非常重要的,这将会对系统带来下述几个重要优点。第11章 面向对象实现 1.一致的表示方法一致的表示方法 从前面章节的讲述中可以知道,面向对
6、象开发基于不随时间变化的、一致的表示方法。这种表示方法应该从问题域到OOA,从OOA到OOD,最后从OOD到面向对象编程(OOP),始终稳定不变。一致的表示方法既有利于在软件开发过程中始终使用统一的概念,也有利于编程人员理解软件的各种配置成分。我们以“自动饮料售货机”为例,说明面向对象开发基于不随时间变化的、一致的表示方法。对于“自动饮料售货机”这一实例,在问题域、OOA、OOD或是OOP的各个阶段所用到的概念都是一致的、不变的。如:退币杆、找零、熄灯、投币口、投币、饮料、饮料倒出等,这对于用户、分析人员、编程人员、测试人员、维护人员来说,无疑是有很大的帮助的。第11章 面向对象实现 2.可重
7、用性可重用性 软件的可重用性的好坏对于提高软件产品的质量和软件开发效率意义重大。为了能带来可观的商业利益,必须在更广泛的范围中运用重用机制,而不是仅仅在程序设计这个层次上进行重用。因此,在OOA、OOD直到OOP中都显式地表示问题域语义,其意义是十分深远的。随着时间的推移,软件开发组织既可能重用它在某个问题域内的OOA结果,也可能重用相应的OOD和OOP结果。第11章 面向对象实现 我们仍以“自动饮料售货机”为例,说明可重用性对于提高软件产品的质量和软件开发效率意义重大。假设该“自动饮料售货机”可提供汽水、洛神、红茶、可乐、奶昔等五种饮料,有关这五种饮料所实施的操作是相同的,因此,可以构造一个
8、饮料类,然后由该类构造汽水、洛神、红茶、可乐、奶昔等五种不同的对象。这对于提高软件开发质量和软件开发效率具有重要的意义。第11章 面向对象实现 3.可维护性可维护性 软件维护是一件极为复杂的事情,在软件的开发成本中约占到70%左右。为了降低维护成本,尽管人们反复强调保持文档与源程序一致的必要性,但是,在实际工作中很难做到交付两类不同的文档,并使它们保持彼此完全一致。特别是考虑到进度、预算、能力和人员等限制因素时,做到两类文档完全一致几乎是不可能的。因此,维护人员最终面对的往往只有源程序本身。第11章 面向对象实现 以ATM(自动取款机)系统为例,说明在程序内部表达问题域语义对维护工作的意义。假
9、设在维护该系统时没有合适的文档资料可供参阅,于是维护人员人工浏览程序或使用软件工具扫描程序,记下或打印出程序显式陈述的问题域语义,维护人员看到“ATM”、“账户”和“现金兑换卡”等,这对维护人员理解所要维护的软件将有很大帮助。因此,在选择编程语言时,应该考虑的首要因素,是在供选择的语言中哪个语言能最好地表达问题域语义。第11章 面向对象实现 11.1.2 面向对象语言的技术特点面向对象语言的技术特点 面向对象语言借鉴了20世纪50年代诞生的人工智能语言LISP,引入了动态绑定的概念和交互式开发环境的思想;始于20世纪60年代的离散事件模拟语言SIMULA 67,引入了类的概念和继承机制;形成于
10、20世纪70年代的Smalltalk语言。面向对象语言发展有两大方向,一是纯面向对象的语言,如 Smalltalk、EIFFEL、Java等语言;另一类是混合型面向对象语言,也就是在过程语言或其他语言中增加了类、继承等面向对象机制,如C+、Objective_C等语言。就两种形式的面向对象语言比较而言,纯面向对象语言更加适合面向对象方法研究和快速原型的实现;而混合型面向对象语言则更加注重于提高系统的运行速度,使传统使用结构化编程方式的程序员容易接受面向对象思想。第11章 面向对象实现 面向对象程序设计语言以对象为中心,对象是程序运行时的基本成分。面向对象程序设计语言中提供了类、继承等机制。面向
11、对象的程序设计即为设计类及由类构造程序的方法和过程,用计算机对象模拟现实世界。成熟的面向对象的程序设计语言通常都提供丰富的类库和强有力的开发环境。第11章 面向对象实现 1.支持类与对象概念的机制支持类与对象概念的机制 面向对象语言都允许用户动态创建对象,并且可以用指针引用动态创建的对象。允许动态创建对象,就意味着系统必须处理内存管理问题,如果不及时释放不再需要的对象所占用的内存,动态存储分配就有可能耗尽内存,出现内存不足的问题。通常,对这类问题的解决方法有两种,一种是由语言的运行机制自动管理内存,即提供自动回收“垃圾”的机制;另一种是由程序员编写释放内存的代码。自动管理内存不仅方便而且安全,
12、但是必须采用先进的垃圾收集算法才能减少开销。某些面向对象的语言(如C+)允许程序员定义析构函数(Destructor)。每当一个对象超出范围或被显式删除时,就自动调用析构函数。这种机制使得程序员能够方便地构造和唤醒释放内存的操作,却又不是采用垃圾收集机制。第11章 面向对象实现 2.实现整体实现整体-部分结构的机制部分结构的机制 实现整体-部分结构的机制有两种方法,一种是使用指针实现整体-部分结构,另一种是使用独立的关联对象实现整体-部分结构。一般来说,通过增加内部指针可以方便地实现关联,使用指针是最容易的实现方法。但是,大多数现有的面向对象语言并不显式支持独立的关联对象。第11章 面向对象实
13、现 3.实现一般实现一般-特殊结构的机制特殊结构的机制 实现一般-特殊结构的机制,包括实现继承的机制和解决名字冲突的机制。所谓解决名字冲突,是指在支持多重继承的语言中,处理在多个基类中可能出现的重名问题。通常,有些语言拒绝接受有名字冲突的程序,另一些语言提供了解决冲突的协议。无论使用何种语言,程序员都应该尽力避免出现名字冲突。第11章 面向对象实现 4.实现属性和服务的机制实现属性和服务的机制 实现属性的机制应该着重考虑的几个因素:支持实例连接的机制;属性的可见性控制;对属性值的约束。对于实现服务的机制来说,主要应该考虑下列因素:支持消息连接的机制;控制服务可见性的机制;动态联编。所谓动态联编
14、,是指应用系统在运行过程中,当需要执行一个特定服务的时候,选择(或联编)实现该服务的适当算法的能力。动态联编机制使得程序员在向对象发送消息时拥有较大自由,在发送消息前,无须知道接收消息的对象当时属于哪个类。第11章 面向对象实现 5.类型检查类型检查 按照编译时进行类型检查的严格程度,程序设计语言可以分为三种类型:弱类型、强类型和混合型。弱类型:语言仅要求每个变量或属性隶属于一个对象。强类型:语法规定每个变量或属性必须准确地属于某个特定的类。面向对象语言包含不同类型的语言,例如,Smalltalk实际上是一种无类型语言(所有变量都是未指定类的对象);C+则是强类型语言。混合型语言:为了提高操作
15、的效率,甚至允许属性值不是对象而是某种预定义的基本类型数据(如整数、浮点数等),如C+,Objective_C等。第11章 面向对象实现 强类型语言主要有两个优点:有利于在编译时发现程序错误;增加了优化的可能性。通常使用强类型编译型语言开发软件产品,使用弱类型解释型语言快速开发原型。一般来说,强类型语言有助于提高软件的可靠性和运行效率,现代的程序语言都是强类型的,大多数理论支持强类型检查。第11章 面向对象实现 6.类库类库 目前,基本所有的面向对象的程序设计语言都提供一个实用的类库。某些语言本身并没有规定提供什么样的类库,而是由实现这种语言的编译系统自行提供类库。有了类库,程序员可以重用许多
16、软构件,不必重新编写,这为实现软件重用带来很大方便。类库中通常包含实现通用数据结构的类,例如,动态数组、表、队列、栈和树等,通常把这些类称为包容类。类库中还包含了实现各种关联的类。更完整的类库通常还提供了接口类和图形库。接口类是独立于具体设备的(例如,输入输出流),图形库是用于实现窗口系统的用户界面类的一个相对独立的库。第11章 面向对象实现 7.效率效率 某些早期的面向对象语言是解释型的而不是编译型的。许多人认为这些语言的主要缺点是效率低。当今的面向对象语言都拥有完整类库,类库中提供了更高效的算法和更好的数据结构,与非面向对象语言相比,能得到更快运行的代码。例如,库中已经提供了算法先进、代码
17、可靠的一类数据结构,程序员再不必编写像实现哈希表或平衡树算法的代码了,因此,提高了编程效率和运行效率。第11章 面向对象实现 面向对象语言在运行时使用动态联编实现多态性,这似乎需要在运行时查找继承树,以得到定义给定操作的类。这也是人们认为面向对象语言效率低的另一个理由。当今的绝大多数面向对象语言都优化了这个查找过程,从而实现了高效率查找。只要在程序运行时始终保持类结构不变,就能在子类中存储各个操作的正确入口点,从而使得动态联编成为查找哈希表的高效过程,不会由于继承树深度加大或类中定义的操作数增加而降低效率。第11章 面向对象实现 8.永久保存对象永久保存对象 在一个程序都对数据进行处理时,希望
18、数据能够长时间保存下来,以备后用。保存数据需要提供某种保存数据的方法。长期保存数据主要有两个原因:为实现在不同程序之间传递数据,需要保存数据;为恢复被中断了的程序的运行,首先需要保存数据。第11章 面向对象实现 对于不同面向对象语言,长期保存数据的方法也不同。有些面向对象语言(例如C+)没有提供直接存储对象的机制,这些语言的用户必须自己管理对象的输入输出,或者购买面向对象的数据库管理系统。有些面向对象语言(例如Smalltalk)把当前的执行状态完整地保存在磁盘上。还有一些面向对象语言提供了访问磁盘对象的输入输出操作。第11章 面向对象实现 通过在类库中增加对象存储管理功能(例如EIFFEL语
19、言采用的策略),可以在开发环境中提供对象存储管理功能,而且还不改变语言定义或不增加关键字。然后,可以从“可存储的类”中派生出需要永久保存的对象,该对象自然继承了对象存储管理功能。如果能使程序设计语言语法与对象存储管理语法实现无间隙集成,则是最理想的。第11章 面向对象实现 9.类模板类模板 在实际的应用系统开发中,经常用函数、类等软件元素处理不同类型的数据(对象),但是,对它们的数据元素所进行的基本操作都是相同的。例如,对于一个向量(一维数组)类来说,不论是整型向量,浮点型向量,还是其他任何类型的向量,针对它的数据元素所进行的基本操作都是相同的(例如,插入、删除、检索等)。在这种情况下,如果程
20、序语言提供一种能抽象出这类共性的机制,则对减少冗余和提高可重用性大有好处。第11章 面向对象实现 所谓参数化类,就是使用一个或多个类型去参数化一个类的机制,有了这种机制,程序员就可以先定义一个参数化的类模板(即在类定义中包含以参数形式出现的一个或多个类型),然后把数据类型作为参数传递进来,从而把这个类模板应用在不同的应用程序中,或用在同一应用程序的不同部分。EIFFEL语言中就有参数化类,C+语言也提供了类模板。Visual Basic和Visual C+提供了函数模板和类模板。第11章 面向对象实现 10.开发环境开发环境 在软件工程学中,方法和工具之间是相互依赖的关系,方法是工具研制的先导
21、,工具是方法的实在体现。软件开发环境是指在计算机的基本软件基础上,为了支持软件开发而提供的一组工具软件系统。软件工具和软件工程环境对软件生产率有很大影响。由于面向对象程序中继承关系和动态联编等引入的特殊复杂性,面向对象语言所提供的软件工具或开发环境就显得尤为重要了。一般来说,面向对象语言所提供的开发环境,至少应该包括下列一些最基本的软件工具:编辑程序、编译程序或解释程序、浏览工具和调试器等。第11章 面向对象实现 编译程序或解释程序是最基本、最重要的软件工具。编译与解释的差别主要是速度和效率不同。利用解释程序解释执行用户的源程序,虽然速度慢、效率低,但调试比较方便、灵活。编译型语言具有良好的优
22、化功能,并且生成目标代码效率很高,适于用来开发正式的软件产品。有些面向对象语言(例如 Objective_C)不但提供了编译程序,还提供了解释工具,这样给软件开发人员带来很大方便。第11章 面向对象实现 有些面向对象语言虽然提供编译程序,但是,源程序到目标代码翻译是间接的。它先把用户源程序翻译成一种中间语言程序,然后再把中间语言程序翻译成目标代码。像这类的编译程序,就很有可能使调试器不能理解原始的源程序。因此,使用调试器时,首先应该弄清楚它是针对原始的面向对象源程序,还是针对中间代码进行调试的。如果是针对中间代码进行调试的,则会给调试人员带来许多不便。除此之外,查看属性值和分析消息连接也是面向
23、对象的调试器应该具备的功能。在开发大型系统的时候,还可能需要系统构造工具和变动控制工具。因此应该考虑语言本身是否提供了这种工具,或者该语言能否与现有的这类工具很好地集成起来。第11章 面向对象实现 11.1.3 选择面向对象语言选择面向对象语言 总体来说,在使用面向对象的软件开发过程中,OO语言明显优于非OO语言,因此,除了在很特殊的应用领域,如:对程序的执行时间和使用空间都有很严格限制的情况;需要产生任意的甚至非法的指令序列;体系结构特殊的微处理器等。开发人员一般应该选择面向对象的程序设计语言,但是,目前面向对象的程序设计语种类繁多,究竟应该选择何种语言更利于系统开发和维护呢?在充分考虑到程
24、序设计语言特点(如应用领域、算法与计算的复杂性、数据结构的复杂性、效率等)的同时,还应该着重考虑以下一些实际因素。第11章 面向对象实现 1.未来能否占主导地位未来能否占主导地位 语言在未来能否占主导地位,是否具有很强的生命力,对于软件生存期具有相当重要的作用。因为,软件投入运行后,其维护和功能扩充是经常性的工作,如果在若干年以后,你所使用的面向对象的程序设计语言仍占主导地位,那么,你所开发的产品在若干年后仍然具有很强的生命力。否则,若干年后,其维护或功能扩充就很难实施了,你所开发的产品就会自动退役。第11章 面向对象实现 究竟如何来选择呢?通常情况下,就是依据目前该语言占有的市场份额,以及专
25、业书刊和学术会议上所做的分析、评价。这样,人们往往能够对未来哪种面向对象语言将占据主导地位做出预测。当然,最终决定选用哪种面向对象语言的实际因素,往往是诸如成本之类的经济因素而不是技术因素。第11章 面向对象实现 2.可重用性可重用性 采用面向对象方法开发软件的基本目的,是通过重用提高软件质量和软件生产率,增强系统的可维护性。面向对象语言的主要优点是能够最完整、最准确地表达问题域语义,因此,在开发系统时,应该优先选用面向对象语言。第11章 面向对象实现 3.类库和开发环境类库和开发环境 语言、开发环境和类库是决定可重用性的三个因素。可重用性除了依赖于面向对象程序语言本身以外,同时还依赖于开发环
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象实现 面向 对象 实现 PPT 课件
限制150内