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