面向对象实现精选PPT.ppt
《面向对象实现精选PPT.ppt》由会员分享,可在线阅读,更多相关《面向对象实现精选PPT.ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、面向对象实现面向对象实现第1页,此课件共58页哦面向对象实现主要包括两项工作:面向对象实现主要包括两项工作:把面向对象设计结把面向对象设计结果翻译成用某种程序语言书写的面向对象程序;测试果翻译成用某种程序语言书写的面向对象程序;测试并调试面向对象的程序。并调试面向对象的程序。面向对象程序的质量基本上由面向对象设计的质量决定,面向对象程序的质量基本上由面向对象设计的质量决定,但是,所采用的程序语言的特点和程序设计风格也将对程但是,所采用的程序语言的特点和程序设计风格也将对程序的可靠性、可重用性及可维护性产生深远影响。序的可靠性、可重用性及可维护性产生深远影响。目前,软件测试仍然是保证软件可靠性的
2、主要措施,对于目前,软件测试仍然是保证软件可靠性的主要措施,对于面向对象的软件来说,情况也是如此。面向对象测试的目面向对象的软件来说,情况也是如此。面向对象测试的目标,也是用尽可能低的测试成本发现尽可能多的软件错误。标,也是用尽可能低的测试成本发现尽可能多的软件错误。第2页,此课件共58页哦 面向对象设计的结果既可以用面向对象语言、也可以用非面向对象设计的结果既可以用面向对象语言、也可以用非面向对象语言实现。面向对象语言实现。使用面向对象语言时,由于语言本身充分支持面向对象概使用面向对象语言时,由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念映射到念的实现,因此,编
3、译程序可以自动把面向对象概念映射到目标程序中。目标程序中。12.1 程序设计语言程序设计语言 12.1.1 面向对象语言的优点面向对象语言的优点第3页,此课件共58页哦到底应该选用面向对象语言还是非面向对象语言,关键到底应该选用面向对象语言还是非面向对象语言,关键不在于语言功能强弱。从原理上说,使用任何一种通用不在于语言功能强弱。从原理上说,使用任何一种通用语言都可以实现面向对象概念。当然,使用面向对象语语言都可以实现面向对象概念。当然,使用面向对象语言,实现面向对象概念,远比使用非面向对象语言方便,言,实现面向对象概念,远比使用非面向对象语言方便,但是,方便性也并不是决定选择何种语言的关键因
4、素。但是,方便性也并不是决定选择何种语言的关键因素。选择编程语言的关键因素,是语言的一致的表达能力、选择编程语言的关键因素,是语言的一致的表达能力、可重用性及可维护性。从面向对象观点看来,能够更完可重用性及可维护性。从面向对象观点看来,能够更完整、更准确地表达问题域语义的面向对象语言的语法是整、更准确地表达问题域语义的面向对象语言的语法是非常重要的,因为这会带来下述几个重要优点:非常重要的,因为这会带来下述几个重要优点:第4页,此课件共58页哦1.一致的表示方法一致的表示方法面向对象开发基于不随时间变化的、一致的表示方法。这面向对象开发基于不随时间变化的、一致的表示方法。这种表示方法应该从问题
5、域到种表示方法应该从问题域到OOA,从,从OOA到到OOD,最后,最后从从OOD到面向对象编程到面向对象编程(OOP),始终稳定不变。一致的,始终稳定不变。一致的表示方法既有利于在软件开发过程中始终使用统一的表示方法既有利于在软件开发过程中始终使用统一的概念,也有利于维护人员理解软件的各种配置成分。概念,也有利于维护人员理解软件的各种配置成分。第5页,此课件共58页哦2.可重用性可重用性为了能带来可观的商业利益,必须在更广泛的范围中运用重为了能带来可观的商业利益,必须在更广泛的范围中运用重用机制,而不是仅仅在程序设计这个层次上进行重用。因此,用机制,而不是仅仅在程序设计这个层次上进行重用。因此
6、,在在OOA,OOD直到直到OOP中都显式地表示问题域语义,中都显式地表示问题域语义,其意义是十分深远的。随着时间的推移,软件开发组其意义是十分深远的。随着时间的推移,软件开发组织既可能重用它在某个问题域内的织既可能重用它在某个问题域内的OOA结果,也可能重结果,也可能重用相应的用相应的OOD和和OOP结果。结果。第6页,此课件共58页哦3.可维护性可维护性尽管人们反复强调保持文档与源程序一致的必要性,但是,尽管人们反复强调保持文档与源程序一致的必要性,但是,在实际工作中很难做到交付两类不同的文档,并使它们保持在实际工作中很难做到交付两类不同的文档,并使它们保持彼此完全一致。特别是考虑到进度、
7、预算、能力和人员等限彼此完全一致。特别是考虑到进度、预算、能力和人员等限制因素时,做到两类文档完全一致几乎是不可能的。因此,制因素时,做到两类文档完全一致几乎是不可能的。因此,维护人员最终面对的往往只有源程序本身。维护人员最终面对的往往只有源程序本身。第7页,此课件共58页哦两大类面向对象语言。两大类面向对象语言。一类是纯面向对象语言,如一类是纯面向对象语言,如Smalltalk和和Eiffel等语言。等语言。另一类是混合型面向对象语言,也就是在过程语言的基础上增加另一类是混合型面向对象语言,也就是在过程语言的基础上增加面向对象机制,如面向对象机制,如C+等语言。等语言。一般说来,纯面向对象语
8、言着重支持面向对象方法研究和一般说来,纯面向对象语言着重支持面向对象方法研究和快速原型的实现,而混合型面向对象语言的目标则是提高快速原型的实现,而混合型面向对象语言的目标则是提高运行速度和使传统程序员容易接受面向对象思想。成熟的运行速度和使传统程序员容易接受面向对象思想。成熟的面向对象语言通常都提供丰富的类库和强有力的开发环境。面向对象语言通常都提供丰富的类库和强有力的开发环境。12.1.2 面向对象语言的技术特点面向对象语言的技术特点第8页,此课件共58页哦1.支持类与对象概念的机制支持类与对象概念的机制所有面向对象语言都允许用户动态创建对象,并且可以用所有面向对象语言都允许用户动态创建对象
9、,并且可以用指针引用动态创建的对象。允许动态创建对象,就意味着指针引用动态创建的对象。允许动态创建对象,就意味着系统必须处理内存管理问题系统必须处理内存管理问题(释放内存释放内存)有两种管理内存的方法,一种是由语言的运行机制自有两种管理内存的方法,一种是由语言的运行机制自动管理内存,即提供自动回收动管理内存,即提供自动回收“垃圾垃圾”的机制;另一的机制;另一种是由程序员编写释放内存的代码。种是由程序员编写释放内存的代码。第9页,此课件共58页哦2.实现整体实现整体-部分部分(即聚集即聚集)结构的机制结构的机制一般说来,有两种实现方法,分别使用指针和独立的一般说来,有两种实现方法,分别使用指针和
10、独立的关联对象实现整体关联对象实现整体-部分结构。大多数现有的面向对象语部分结构。大多数现有的面向对象语言并不显式支持独立的关联对象,在这种情况下,使用言并不显式支持独立的关联对象,在这种情况下,使用指针是最容易的实现方法,通过增加内部指针可以方便指针是最容易的实现方法,通过增加内部指针可以方便地实现关联。地实现关联。第10页,此课件共58页哦3.实现一般实现一般-特殊特殊(即泛化即泛化)结构的机制结构的机制既包括实现继承的机制也包括解决名字冲突的机制。所既包括实现继承的机制也包括解决名字冲突的机制。所谓解决名字冲突,指的是处理在多个基类中可能出现的谓解决名字冲突,指的是处理在多个基类中可能出
11、现的重名问题,这个问题仅在支持多重继承的语言中才会遇重名问题,这个问题仅在支持多重继承的语言中才会遇到。某些语言拒绝接受有名字冲突的程序,另一些语言到。某些语言拒绝接受有名字冲突的程序,另一些语言提供了解决冲突的协议。不论使用何种语言,程序员都提供了解决冲突的协议。不论使用何种语言,程序员都应该尽力避免出现名字冲突。应该尽力避免出现名字冲突。第11页,此课件共58页哦4.实现属性和服务的机制实现属性和服务的机制对于实现属性的机制应该着重考虑以下几个方面:对于实现属性的机制应该着重考虑以下几个方面:支持支持实例连接的机制;属性的可见性控制;对属性值的约束。实例连接的机制;属性的可见性控制;对属性
12、值的约束。对于服务来说,主要应该考虑下列因素:对于服务来说,主要应该考虑下列因素:支持消息连接支持消息连接(即表达对象交互关系即表达对象交互关系)的机制;控制服务可见性的机制;的机制;控制服务可见性的机制;动态联编。动态联编。所谓动态联编,是指应用系统在运行过程中,当需要执行一所谓动态联编,是指应用系统在运行过程中,当需要执行一个特定服务的时候,选择个特定服务的时候,选择(或联编或联编)实现该服务的适当算法实现该服务的适当算法的能力。动态联编机制使得程序员在向对象发送消息时的能力。动态联编机制使得程序员在向对象发送消息时拥有较大自由,在发送消息前,无须知道接受消息的对拥有较大自由,在发送消息前
13、,无须知道接受消息的对象当时属于哪个类。象当时属于哪个类。第12页,此课件共58页哦5.类型检查类型检查程序设计语言可以按照编译时进行类型检查的严格程度程序设计语言可以按照编译时进行类型检查的严格程度来分类。如果语言仅要求每个变量或属性隶属于一个对来分类。如果语言仅要求每个变量或属性隶属于一个对象,则是弱类型的;如果语法规定每个变量或属性必须象,则是弱类型的;如果语法规定每个变量或属性必须准确地属于某个特定的类,则这样的语言是强类型的。准确地属于某个特定的类,则这样的语言是强类型的。面向对象语言在这方面差异很大,例如,面向对象语言在这方面差异很大,例如,Smalltalk实际实际上是一种无类型
14、语言上是一种无类型语言(所有变量都是未指定类的对象所有变量都是未指定类的对象);C+和和Eiffel则是强类型语言。混合型语言则是强类型语言。混合型语言(如如C+,Objective_C等等)甚至允许属性值不是对象而是某种预定义的基本类型数据甚至允许属性值不是对象而是某种预定义的基本类型数据(如整数,浮点数等如整数,浮点数等),这可以提高操作的效率。,这可以提高操作的效率。第13页,此课件共58页哦强类型语言主要有两个优点:强类型语言主要有两个优点:一是有利于在编译时发现一是有利于在编译时发现程序错误,二是增加了优化的可能性。通常使用强类型程序错误,二是增加了优化的可能性。通常使用强类型编译型
15、语言开发软件产品,使用弱类型解释型语言快速编译型语言开发软件产品,使用弱类型解释型语言快速开发原型。总的说来,强类型语言有助于提高软件的可开发原型。总的说来,强类型语言有助于提高软件的可靠性和运行效率,现代的程序语言理论支持强类型检查,靠性和运行效率,现代的程序语言理论支持强类型检查,大多数新语言都是强类型的。大多数新语言都是强类型的。6.类库类库大多数面向对象语言都提供一个实用的类库。某些语言本大多数面向对象语言都提供一个实用的类库。某些语言本身并没有规定提供什么样的类库,而是由实现这种语言的身并没有规定提供什么样的类库,而是由实现这种语言的编译系统自行提供类库。存在类库,许多软构件就不必由
16、编译系统自行提供类库。存在类库,许多软构件就不必由程序员重头编写了,这为实现软件重用带来很大方便。程序员重头编写了,这为实现软件重用带来很大方便。第14页,此课件共58页哦类库中往往包含实现通用数据结构类库中往往包含实现通用数据结构(例如,动态数组、表、例如,动态数组、表、队列、栈、树等等队列、栈、树等等)的类,通常把这些类称为包容类。在的类,通常把这些类称为包容类。在类库中还可以找到实现各种关联的类。类库中还可以找到实现各种关联的类。更完整的类库通常还提供独立于具体设备的接口类更完整的类库通常还提供独立于具体设备的接口类(例如,例如,输入输出流输入输出流),此外,用于实现窗口系统的用户界面类
17、,此外,用于实现窗口系统的用户界面类也非常有用,它们构成一个相对独立的图形库。也非常有用,它们构成一个相对独立的图形库。第15页,此课件共58页哦7.效率效率许多人认为面向对象语言的主要缺点是效率低。产生这许多人认为面向对象语言的主要缺点是效率低。产生这种印象的一个原因是,某些早期的面向对象语言是解释种印象的一个原因是,某些早期的面向对象语言是解释型的而不是编译型的。事实上,使用拥有完整类库的面型的而不是编译型的。事实上,使用拥有完整类库的面向对象语言,有时能比使用非面向对象语言得到运行更向对象语言,有时能比使用非面向对象语言得到运行更快的代码。这是因为类库中提供了更高效的算法和更好快的代码。
18、这是因为类库中提供了更高效的算法和更好的数据结构,例如,程序员已经无须编写实现哈希表或的数据结构,例如,程序员已经无须编写实现哈希表或平衡树算法的代码了,类库中已经提供了这类数据结构,平衡树算法的代码了,类库中已经提供了这类数据结构,而且算法先进、代码精巧可靠。而且算法先进、代码精巧可靠。第16页,此课件共58页哦 认为面向对象语言效率低的另一个理由是,这种语认为面向对象语言效率低的另一个理由是,这种语言在运行时使用动态联编实现多态性,这似乎需要在言在运行时使用动态联编实现多态性,这似乎需要在运行时查找继承树,以得到定义给定操作的类。事实运行时查找继承树,以得到定义给定操作的类。事实上,绝大多
19、数面向对象语言都优化了这个查找过程,上,绝大多数面向对象语言都优化了这个查找过程,从而实现了高效率查找。只要在程序运行时始终保持从而实现了高效率查找。只要在程序运行时始终保持类结构不变,就能在子类中存储各个操作的正确入口类结构不变,就能在子类中存储各个操作的正确入口点,从而使得动态联编成为查找哈希表的高效过程,点,从而使得动态联编成为查找哈希表的高效过程,不会由于继承树深度加大或类中定义的操作数增加而不会由于继承树深度加大或类中定义的操作数增加而降低效率。降低效率。第17页,此课件共58页哦8.持久保存对象持久保存对象任何应用程序都对数据进行处理,如果希望数据能够不依任何应用程序都对数据进行处
20、理,如果希望数据能够不依赖于程序执行的生命期而长时间保存下来,则需要提供某赖于程序执行的生命期而长时间保存下来,则需要提供某种保存数据的方法。希望长期保存数据主要出于以下两个种保存数据的方法。希望长期保存数据主要出于以下两个原因:原因:(1)为实现在不同程序之间传递数据,需要保存数据;为实现在不同程序之间传递数据,需要保存数据;(2)为恢复被中断了的程序的运行,首先需要保存数据。为恢复被中断了的程序的运行,首先需要保存数据。一些面向对象语言,没有提供直接存储对象的机制。这些语一些面向对象语言,没有提供直接存储对象的机制。这些语言的用户必须自己管理对象的输入输出,或者购买面向对象言的用户必须自己
21、管理对象的输入输出,或者购买面向对象的数据库管理系统。的数据库管理系统。第18页,此课件共58页哦另外一些面向对象语言另外一些面向对象语言(例如,例如,Smalltalk),把当前的执行,把当前的执行状态完整地保存在磁盘上。还有一些面向对象语言,提供状态完整地保存在磁盘上。还有一些面向对象语言,提供了访问磁盘对象的输入输出操作。了访问磁盘对象的输入输出操作。通过在类库中增加对象存储管理功能,可以在不改变语言定通过在类库中增加对象存储管理功能,可以在不改变语言定义或不增加关键字的情况下,就在开发环境中提供这种功能。义或不增加关键字的情况下,就在开发环境中提供这种功能。然后,可以从然后,可以从“可
22、存储的类可存储的类”中派生出需要持久保存的对象,中派生出需要持久保存的对象,该对象自然继承了对象存储管理功能。这就是该对象自然继承了对象存储管理功能。这就是Eiffel语言采语言采用的策略。用的策略。理想情况下,应该使程序设计语言语法与对象存储管理想情况下,应该使程序设计语言语法与对象存储管理语法实现无缝集成。理语法实现无缝集成。第19页,此课件共58页哦9.参数化类参数化类在实际的应用程序中,常常看到这样一些软件元素在实际的应用程序中,常常看到这样一些软件元素(即函数、即函数、类等软件成分类等软件成分),从它们的逻辑功能看,彼此是相同的,从它们的逻辑功能看,彼此是相同的,所不同的主要是处理的
23、对象所不同的主要是处理的对象(数据数据)类型不同。例如,对类型不同。例如,对于一个向量于一个向量(一维数组一维数组)类来说,不论是整型向量,浮点型向类来说,不论是整型向量,浮点型向量,还是其他任何类型的向量,针对它的数据元素所进行的量,还是其他任何类型的向量,针对它的数据元素所进行的基本操作都是相同的基本操作都是相同的(例如,插入、删除、检索等例如,插入、删除、检索等),当然,当然,不同向量的数据元素的类型是不同的。如果程序语言不同向量的数据元素的类型是不同的。如果程序语言提供一种能抽象出这类共性的机制,则对减少冗余和提供一种能抽象出这类共性的机制,则对减少冗余和提高可重用性是大有好处的。提高
24、可重用性是大有好处的。第20页,此课件共58页哦所谓参数化类,就是使用一个或多个类型去参数化一个类的所谓参数化类,就是使用一个或多个类型去参数化一个类的机制,有了这种机制,程序员就可以先定义一个参数化的类机制,有了这种机制,程序员就可以先定义一个参数化的类模板模板(即在类定义中包含以参数形式出现的一个或多个类即在类定义中包含以参数形式出现的一个或多个类型型),然后把数据类型作为参数传递进来,从而把这个类模板,然后把数据类型作为参数传递进来,从而把这个类模板应用在不同的应用程序中,或用在同一应用程序的不同部分。应用在不同的应用程序中,或用在同一应用程序的不同部分。Eiffel语言中就有参数化类,
25、语言中就有参数化类,C+语言也提供了类模板。语言也提供了类模板。第21页,此课件共58页哦10.开发环境开发环境软件工具和软件工程环境对软件生产率有很大影响。由软件工具和软件工程环境对软件生产率有很大影响。由于面向对象程序中继承关系和动态联编等引入的特殊复于面向对象程序中继承关系和动态联编等引入的特殊复杂性,面向对象语言所提供的软件工具或开发环境就显杂性,面向对象语言所提供的软件工具或开发环境就显得尤其重要了。至少应该包括下列一些最基本的软件工得尤其重要了。至少应该包括下列一些最基本的软件工具:具:编辑程序,编译程序或解释程序,浏览工具,调试编辑程序,编译程序或解释程序,浏览工具,调试器器(d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 实现 精选 PPT
限制150内