欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    软件工程软件工程软件工程 (12).ppt

    • 资源ID:84102546       资源大小:722.50KB        全文页数:63页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软件工程软件工程软件工程 (12).ppt

    1 1第第1212章章 面向对象实现面向对象实现l12.1 程序设计语言l12.2 程序设计风格l12.3 测试策略l12.4 设计测试用例2 2l l 把面向对象设计结果翻译成用某种程序语言书写的面向把面向对象设计结果翻译成用某种程序语言书写的面向对象程序;对象程序;l l测试并调试面向对象的程序。测试并调试面向对象的程序。l l 面向对象程序的质量基本上由面向对象设计的质量决定,面向对象程序的质量基本上由面向对象设计的质量决定,但是,所采用的程序语言的特点和程序设计风格也将对程序但是,所采用的程序语言的特点和程序设计风格也将对程序的可靠性、可重用性及可维护性产生深远影响。的可靠性、可重用性及可维护性产生深远影响。3 3l l 面向对象设计的结果既可以用面向对象语言、也可以用非面向对象设计的结果既可以用面向对象语言、也可以用非面向对象语言实现。面向对象语言实现。l l使用面向对象语言时,由于语言本身充分支持面向对象概使用面向对象语言时,由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念映射到念的实现,因此,编译程序可以自动把面向对象概念映射到目标程序中。目标程序中。l l方便性也并不是决定选择何种语言的关键因素。选择编程方便性也并不是决定选择何种语言的关键因素。选择编程语言的关键因素,是语言的语言的关键因素,是语言的一致的表达能力一致的表达能力一致的表达能力一致的表达能力、可重用性可重用性可重用性可重用性及及可可可可维护性维护性维护性维护性。12.1.112.1.1面向对象语言的优点面向对象语言的优点12.1 12.1 程序设计语言程序设计语言4 4l l一类是纯面向对象语言,如一类是纯面向对象语言,如SmalltalkSmalltalk和和EiffelEiffel等语言。纯等语言。纯面向对象语言着重支持面向对象方法研究和快速原型的实现。面向对象语言着重支持面向对象方法研究和快速原型的实现。l l另一类是混合型面向对象语言,也就是在过程语言的基础上另一类是混合型面向对象语言,也就是在过程语言的基础上增加面向对象机制,如增加面向对象机制,如C+C+等语言。混合型面向对象语言的目等语言。混合型面向对象语言的目标则是提高运行速度和使传统程序员容易接受面向对象思想。标则是提高运行速度和使传统程序员容易接受面向对象思想。l l成熟的面向对象语言通常都提供丰富的类库和强有力的开发成熟的面向对象语言通常都提供丰富的类库和强有力的开发环境。环境。12.1.212.1.2面向对象语言的特点面向对象语言的特点12.1 12.1 程序设计语言程序设计语言5 51.1.1.1.支持类与对象概念的机制支持类与对象概念的机制支持类与对象概念的机制支持类与对象概念的机制所有面向对象语言都允许用户所有面向对象语言都允许用户动态创建对象动态创建对象动态创建对象动态创建对象,并且可以用指,并且可以用指针引用动态创建的对象。允许动态创建对象,就意味着系统针引用动态创建的对象。允许动态创建对象,就意味着系统必须处理必须处理内存管理问题内存管理问题,如果不及时释放不再需要的对象所,如果不及时释放不再需要的对象所占用的内存,动态存储分配就有可能耗尽内存。占用的内存,动态存储分配就有可能耗尽内存。12.1.212.1.2面向对象语言的特点面向对象语言的特点6 6有两种管理内存的方法:有两种管理内存的方法:uu一种是由语言的运行机制自动管理内存,即提供自动回收一种是由语言的运行机制自动管理内存,即提供自动回收“垃圾垃圾”的机制;的机制;uu另一种是由程序员编写释放内存的代码。自动管理内存不另一种是由程序员编写释放内存的代码。自动管理内存不仅方便而且安全,但是必须采用先进的垃圾收集算法才能减仅方便而且安全,但是必须采用先进的垃圾收集算法才能减少开销。某些面向对象的语言允许程序员定义析构函数少开销。某些面向对象的语言允许程序员定义析构函数(destructor)(destructor)。每当一个对象超出范围或被显式删除时,就。每当一个对象超出范围或被显式删除时,就自动调用析构函数。这种机制使得程序员能够方便地构造和自动调用析构函数。这种机制使得程序员能够方便地构造和唤醒释放内存的操作,却又不是垃圾收集机制。唤醒释放内存的操作,却又不是垃圾收集机制。12.1.212.1.2面向对象语言的特点面向对象语言的特点7 72.2.2.2.实现整体实现整体实现整体实现整体-部分部分部分部分(即聚集即聚集即聚集即聚集)结构的机制结构的机制结构的机制结构的机制 一般说来,有两种实现方法,分别使用一般说来,有两种实现方法,分别使用指针和独立的关指针和独立的关联联对象实现整体对象实现整体-部分结构。大多数现有的面向对象语言并不部分结构。大多数现有的面向对象语言并不显式支持独立的关联对象,在这种情况下,使用指针是最容显式支持独立的关联对象,在这种情况下,使用指针是最容易的实现方法,通过增加内部指针可以方便地实现关联。易的实现方法,通过增加内部指针可以方便地实现关联。12.1.212.1.2面向对象语言的特点面向对象语言的特点8 83.3.3.3.实现一般实现一般实现一般实现一般-特殊特殊特殊特殊(即泛化即泛化即泛化即泛化)结构的机制结构的机制结构的机制结构的机制uu包括实现包括实现继承的机制继承的机制;uu包括包括解决名字冲突的机制解决名字冲突的机制。所谓解决名字冲突,指的是处。所谓解决名字冲突,指的是处理在多个基类中可能出现的重名问题,这个问题理在多个基类中可能出现的重名问题,这个问题仅在支持多仅在支持多重继承的语言中重继承的语言中才会遇到。某些语言拒绝接受有名字冲突的才会遇到。某些语言拒绝接受有名字冲突的程序,另一些语言提供了解决冲突的协议。程序,另一些语言提供了解决冲突的协议。不论使用何种语不论使用何种语言,程序员都应该尽力避免出现名字冲突言,程序员都应该尽力避免出现名字冲突。12.1.212.1.2面向对象语言的特点面向对象语言的特点9 94.4.4.4.实现属性和服务的机制实现属性和服务的机制实现属性和服务的机制实现属性和服务的机制uu对于对于实现属性实现属性的机制应该着重考虑以下几个方面:的机制应该着重考虑以下几个方面:支持实支持实例连接的机制;属性的可见性控制;对属性值的约束例连接的机制;属性的可见性控制;对属性值的约束。uu对于对于服务服务来说,主要应该考虑下列因素:来说,主要应该考虑下列因素:支持消息连接支持消息连接(即表达对象交互关系即表达对象交互关系)的机制;控制服务可见性的机制;动的机制;控制服务可见性的机制;动态联编态联编。所谓。所谓动态联编动态联编,是指应用系统在运行过程中,当需,是指应用系统在运行过程中,当需要执行一个特定服务的时候,选择要执行一个特定服务的时候,选择(或联编或联编)实现该服务的适实现该服务的适当算法的能力。动态联编机制使得程序员在向对象发送消息当算法的能力。动态联编机制使得程序员在向对象发送消息时拥有较大自由,在发送消息前,无须知道接受消息的对象时拥有较大自由,在发送消息前,无须知道接受消息的对象当时属于哪个类。当时属于哪个类。12.1.212.1.2面向对象语言的特点面向对象语言的特点10105.5.5.5.类型检查类型检查类型检查类型检查 程序设计语言可以按照编译时进行类型检查的严格程度程序设计语言可以按照编译时进行类型检查的严格程度来分类。来分类。uu如果语言仅要求每个变量或属性隶属于一个对象,则是弱如果语言仅要求每个变量或属性隶属于一个对象,则是弱类型的;类型的;uu如果语法规定每个变量或属性必须准确地属于某个特定的如果语法规定每个变量或属性必须准确地属于某个特定的类,则这样的语言是强类型的。类,则这样的语言是强类型的。12.1.212.1.2面向对象语言的特点面向对象语言的特点11116.6.6.6.类库类库类库类库 大多数面向对象语言都提供一个实用的类库。某些语言大多数面向对象语言都提供一个实用的类库。某些语言本身并没有规定提供什么样的类库,而是由实现这种语言的本身并没有规定提供什么样的类库,而是由实现这种语言的编译系统自行提供类库。存在类库,许多软构件就不必由程编译系统自行提供类库。存在类库,许多软构件就不必由程序员重头编写了,这为实现软件重用带来很大方便。序员重头编写了,这为实现软件重用带来很大方便。uu类库中往往包含实现通用数据结构类库中往往包含实现通用数据结构(例如,动态数组、表、例如,动态数组、表、队列、栈、树等等队列、栈、树等等)的类,通常把这些类称为包容类。在类库的类,通常把这些类称为包容类。在类库中还可以找到实现各种关联的类。中还可以找到实现各种关联的类。uu更完整的类库通常还提供独立于具体设备的接口类更完整的类库通常还提供独立于具体设备的接口类(例如,例如,输入输出流输入输出流),此外,用于实现窗口系统的用户界面类也非常,此外,用于实现窗口系统的用户界面类也非常有用,它们构成一个相对独立的图形库。有用,它们构成一个相对独立的图形库。12.1.212.1.2面向对象语言的特点面向对象语言的特点12127.7.7.7.效率效率效率效率uu 许多人认为面向对象语言的主要缺点是效率低。许多人认为面向对象语言的主要缺点是效率低。产生这种产生这种印象的一个原因是,某些早期的面向对象语言是解释型的而印象的一个原因是,某些早期的面向对象语言是解释型的而不是编译型的不是编译型的。事实上,使用。事实上,使用拥有完整类库拥有完整类库的面向对象语言,的面向对象语言,有时能比使用非面向对象语言得到运行更快的代码。这是因有时能比使用非面向对象语言得到运行更快的代码。这是因为类库中提供了更高效的算法和更好的数据结构,例如,程为类库中提供了更高效的算法和更好的数据结构,例如,程序员已经无须编写实现哈希表或平衡树算法的代码了,类库序员已经无须编写实现哈希表或平衡树算法的代码了,类库中已经提供了这类数据结构,而且算法先进、代码精巧可靠。中已经提供了这类数据结构,而且算法先进、代码精巧可靠。12.1.212.1.2面向对象语言的特点面向对象语言的特点1313uu 认为面向对象语言效率低的另一个理由是,认为面向对象语言效率低的另一个理由是,这种语言在运这种语言在运行时使用动态联编实现多态性,这似乎需要在运行时查找继行时使用动态联编实现多态性,这似乎需要在运行时查找继承树,以得到定义给定操作的类承树,以得到定义给定操作的类。事实上,绝大多数面向对。事实上,绝大多数面向对象语言都优化了这个查找过程,从而实现了高效率查找。只象语言都优化了这个查找过程,从而实现了高效率查找。只要在程序运行时始终保持类结构不变,就能在子类中存储各要在程序运行时始终保持类结构不变,就能在子类中存储各个操作的正确入口点,从而使得动态联编成为查找哈希表的个操作的正确入口点,从而使得动态联编成为查找哈希表的高效过程,不会由于继承树深度加大或类中定义的操作数增高效过程,不会由于继承树深度加大或类中定义的操作数增加而降低效率。加而降低效率。12.1.212.1.2面向对象语言的特点面向对象语言的特点14148.8.8.8.持久保存对象持久保存对象持久保存对象持久保存对象uu任何应用程序都对数据进行处理,如果希望数据能够不依任何应用程序都对数据进行处理,如果希望数据能够不依赖于程序执行的生命期而长时间保存下来,则需要提供某种赖于程序执行的生命期而长时间保存下来,则需要提供某种保存数据的方法。希望长期保存数据主要出于以下两个原因:保存数据的方法。希望长期保存数据主要出于以下两个原因:(1)(1)为实现在不同程序之间传递数据,需要保存数据;为实现在不同程序之间传递数据,需要保存数据;(2)(2)为恢复被中断了的程序的运行,首先需要保存数据。为恢复被中断了的程序的运行,首先需要保存数据。uu一些面向对象语言,一些面向对象语言,没有提供直接存储对象的机制没有提供直接存储对象的机制。这些。这些语言的用户必须自己管理对象的输入输出,或者购买面向对语言的用户必须自己管理对象的输入输出,或者购买面向对象的数据库管理系统。象的数据库管理系统。12.1.212.1.2面向对象语言的特点面向对象语言的特点1515uu另外一些面向对象语言另外一些面向对象语言(例如,例如,Smalltalk)Smalltalk),把当前的执行状,把当前的执行状态完整地保存在磁盘上。还有一些面向对象语言,提供了访问态完整地保存在磁盘上。还有一些面向对象语言,提供了访问磁盘对象的输入输出操作。磁盘对象的输入输出操作。uu通过在类库中增加对象存储管理功能,可以在不改变语言定通过在类库中增加对象存储管理功能,可以在不改变语言定义或不增加关键字的情况下,就在开发环境中提供这种功能。义或不增加关键字的情况下,就在开发环境中提供这种功能。然后,可以从然后,可以从“可存储的类可存储的类”中派生出需要持久保存的对象,中派生出需要持久保存的对象,该对象自然继承了对象存储管理功能。这就是该对象自然继承了对象存储管理功能。这就是EiffelEiffel语言采用语言采用的策略。的策略。uu应该使程序设计语言语法与对象存储管理语法实现无缝集成。应该使程序设计语言语法与对象存储管理语法实现无缝集成。12.1.212.1.2面向对象语言的特点面向对象语言的特点16169.9.9.9.参数化类参数化类参数化类参数化类uu 在实际的应用程序中,常常看到这样一些软件元素在实际的应用程序中,常常看到这样一些软件元素(即函即函数、类等软件成分数、类等软件成分),从它们的逻辑功能看,彼此是相同的,从它们的逻辑功能看,彼此是相同的,所不同的主要是处理的对象所不同的主要是处理的对象(数据数据)类型不同。例如,对于一类型不同。例如,对于一个向量个向量(一维数组一维数组)类来说,不论是整型向量,浮点型向量,类来说,不论是整型向量,浮点型向量,还是其他任何类型的向量,针对它的数据元素所进行的基本还是其他任何类型的向量,针对它的数据元素所进行的基本操作都是相同的操作都是相同的(例如,插入、删除、检索等例如,插入、删除、检索等),当然,不同,当然,不同向量的数据元素的类型是不同的。向量的数据元素的类型是不同的。12.1.212.1.2面向对象语言的特点面向对象语言的特点1717uu所谓所谓参数化类参数化类,就是使用一个或多个类型去参数化一个类,就是使用一个或多个类型去参数化一个类的机制,有了这种机制,程序员就可以先定义一个参数化的的机制,有了这种机制,程序员就可以先定义一个参数化的类模板类模板(即在类定义中包含以参数形式出现的一个或多个类型即在类定义中包含以参数形式出现的一个或多个类型),然后把数据类型作为参数传递进来,从而把这个类模板应,然后把数据类型作为参数传递进来,从而把这个类模板应用在不同的应用程序中,或用在同一应用程序的不同部分。用在不同的应用程序中,或用在同一应用程序的不同部分。EiffelEiffel语言中就有参数化类,语言中就有参数化类,C+C+语言也提供了类模板。语言也提供了类模板。12.1.212.1.2面向对象语言的特点面向对象语言的特点181810.10.10.10.开发环境开发环境开发环境开发环境uu软件工具和软件工程环境对软件生产率有很大影响。软件工具和软件工程环境对软件生产率有很大影响。uu由于面向对象程序中继承关系和动态联编等引入的特殊复由于面向对象程序中继承关系和动态联编等引入的特殊复杂性,面向对象语言所提供的软件工具或开发环境就显得尤杂性,面向对象语言所提供的软件工具或开发环境就显得尤其重要了。其重要了。uu至少应该包括下列一些最基本的软件工具:至少应该包括下列一些最基本的软件工具:编辑程序,编编辑程序,编译程序或解释程序,浏览工具,调试器译程序或解释程序,浏览工具,调试器(debugger)(debugger)等。等。12.1.212.1.2面向对象语言的特点面向对象语言的特点19191.1.1.1.将来能否占主导地位将来能否占主导地位将来能否占主导地位将来能否占主导地位:uu在若干年以后,哪种面向对象的程序设计语言将占主导地在若干年以后,哪种面向对象的程序设计语言将占主导地位呢位呢?为了使自己的产品在若干年后仍然具有很强的生命力,为了使自己的产品在若干年后仍然具有很强的生命力,人们可能希望采用将来占主导地位的语言编程。人们可能希望采用将来占主导地位的语言编程。uu根据目前占有的市场份额,以及专业书刊和学术会议上所根据目前占有的市场份额,以及专业书刊和学术会议上所做的分析、评价,人们往往能够对未来哪种面向对象语言将做的分析、评价,人们往往能够对未来哪种面向对象语言将占据主导地位做出预测。占据主导地位做出预测。uu但是,最终决定选用哪种面向对象语言的实际因素,往往但是,最终决定选用哪种面向对象语言的实际因素,往往是诸如成本之类的经济因素而不是技术因素。是诸如成本之类的经济因素而不是技术因素。12.1.312.1.3选择面向对象语言选择面向对象语言20202.2.2.2.可重用性可重用性可重用性可重用性 采用面向对象方法开发软件的基本目的和主要优点,是采用面向对象方法开发软件的基本目的和主要优点,是通过重用提高软件生产率通过重用提高软件生产率通过重用提高软件生产率通过重用提高软件生产率。因此,应该优先选用能够最完整、。因此,应该优先选用能够最完整、最准确地表达问题域语义的面向对象语言。最准确地表达问题域语义的面向对象语言。12.1.312.1.3选择面向对象语言选择面向对象语言21213.3.3.3.类库和开发环境类库和开发环境类库和开发环境类库和开发环境uu 决定可重用性的因素,不仅仅是面向对象程序语言本身,开发环境和决定可重用性的因素,不仅仅是面向对象程序语言本身,开发环境和类库也是非常重要的因素。事实上,类库也是非常重要的因素。事实上,语语言、言、开发环境开发环境和和类库类库这这3 3个因素综个因素综合起来,共同决定了可重用性。合起来,共同决定了可重用性。uu 考虑类库的时候,不仅应该考虑是否提供了类库,考虑类库的时候,不仅应该考虑是否提供了类库,还应该考虑类库中还应该考虑类库中提供了哪些有价值的类提供了哪些有价值的类。随着类库的日益成熟和丰富,在开发新应用系统。随着类库的日益成熟和丰富,在开发新应用系统时,需要开发人员自己编写的代码将越来越少。时,需要开发人员自己编写的代码将越来越少。uu 为便于积累可重用的类和重用已有的类,在开发环境中,除了提供前为便于积累可重用的类和重用已有的类,在开发环境中,除了提供前述的基本软件工具外,还应该提供使用方便的述的基本软件工具外,还应该提供使用方便的类库编辑工具和浏览工具类库编辑工具和浏览工具。其中的类库浏览工具应该具有强大的联想功能。其中的类库浏览工具应该具有强大的联想功能。12.1.312.1.3选择面向对象语言选择面向对象语言22224.4.4.4.其他因素其他因素其他因素其他因素uu在选择编程语言时,应该考虑的其他因素还有:在选择编程语言时,应该考虑的其他因素还有:uu对用户学习面向对象分析、设计和编码技术所能提供的培对用户学习面向对象分析、设计和编码技术所能提供的培训服务;训服务;uu在使用这个面向对象语言期间能提供的技术支持;在使用这个面向对象语言期间能提供的技术支持;uu能提供给开发人员使用的开发工具、开发平台、发行平台;能提供给开发人员使用的开发工具、开发平台、发行平台;uu对机器性能和内存的需求;对机器性能和内存的需求;uu集成已有软件的容易程度等。集成已有软件的容易程度等。12.1.312.1.3选择面向对象语言选择面向对象语言2323l l面向对象方法的一个主要目标,就是面向对象方法的一个主要目标,就是提高软件的可重用性提高软件的可重用性提高软件的可重用性提高软件的可重用性。软件重用有多个层次,在编码阶段主要涉及代码重用问题。软件重用有多个层次,在编码阶段主要涉及代码重用问题。l l一般说来,代码重用有两种:一般说来,代码重用有两种:一种是一种是本项目内的代码重用本项目内的代码重用本项目内的代码重用本项目内的代码重用,另一种是另一种是新项目重用旧项目的代码新项目重用旧项目的代码新项目重用旧项目的代码新项目重用旧项目的代码。内部重用主要是找出设。内部重用主要是找出设计中相同或相似的部分,然后利用继承机制共享它们。为做计中相同或相似的部分,然后利用继承机制共享它们。为做到外部重用,则必须有长远眼光,需要反复考虑精心设计。到外部重用,则必须有长远眼光,需要反复考虑精心设计。l l虽然为实现外部重用而需要考虑的面,比为实现内部重用而虽然为实现外部重用而需要考虑的面,比为实现内部重用而需要考虑的面更广,但是,有助于实现这两类重用的程序设需要考虑的面更广,但是,有助于实现这两类重用的程序设计准则却是相同的。下面讲述主要的准则:计准则却是相同的。下面讲述主要的准则:12.2.1 提高可重用性12.212.2程序设计风格程序设计风格24241.1.提高方法的内聚提高方法的内聚:一个方法:一个方法(即服务即服务)应该应该只完成单个功能只完成单个功能。如果某个方法涉及两个或多个不相关的功能,则应该把它分如果某个方法涉及两个或多个不相关的功能,则应该把它分解成几个更小的方法。解成几个更小的方法。2.2.减小方法的规模减小方法的规模:应该减小方法的规模,如果某个方法规:应该减小方法的规模,如果某个方法规模过大模过大(代码长度超过一页纸可能就太大了代码长度超过一页纸可能就太大了),则应该把它分,则应该把它分解成几个更小的方法。解成几个更小的方法。3.3.保持方法的一致性保持方法的一致性:保持方法的一致性,有助于实现代码:保持方法的一致性,有助于实现代码重用。一般说来,功能相似的方法应该有一致的名字、参数重用。一般说来,功能相似的方法应该有一致的名字、参数特征特征(包括参数个数、类型和次序包括参数个数、类型和次序)、返回值类型、使用条件、返回值类型、使用条件及出错条件等。及出错条件等。12.2.112.2.1提高可重用性提高可重用性25254.4.把策略与实现分开把策略与实现分开uu 从所完成的功能看,有两种不同类型的方法。从所完成的功能看,有两种不同类型的方法。策策策策略方法略方法略方法略方法负责做出决策负责做出决策,提供变元提供变元,并且,并且管理全局资源。管理全局资源。策略方法策略方法应该应该检查系统运行状态检查系统运行状态,并处理出错情况并处理出错情况,它们它们并不直接完成计算或实现复杂的算法并不直接完成计算或实现复杂的算法。策略方法。策略方法通常紧密依赖于具体应用,这类方法比较容易编写,通常紧密依赖于具体应用,这类方法比较容易编写,也比较容易理解。也比较容易理解。12.2.112.2.1提高可重用性提高可重用性2626uu为提高可重用性,在编程时不要把策略和实现放在同一个方法中,应该把算法的核心部分放在一个单独的具体实现方法中。为此需要从策略方法中提取出具体参数,作为调用实现方法的变元。12.2.112.2.1提高可重用性提高可重用性27275.5.5.5.全面覆盖全面覆盖全面覆盖全面覆盖uu如果输入条件的如果输入条件的各种组合都可能出现各种组合都可能出现,则应该,则应该针对所有组针对所有组合写出方法合写出方法,而不能仅仅针对当前用到的组合情况写方法。,而不能仅仅针对当前用到的组合情况写方法。例如,如果在当前应用中需要写一个方法,以获取表中第一例如,如果在当前应用中需要写一个方法,以获取表中第一个元素,则至少还应该为获取表中最后一个元素再写一个方个元素,则至少还应该为获取表中最后一个元素再写一个方法。法。uu此外,此外,一个方法不应该只能处理正常值一个方法不应该只能处理正常值,对,对空值、极限值空值、极限值及及界外值界外值等异常情况也应该能够作出有意义的响应。等异常情况也应该能够作出有意义的响应。12.2.112.2.1提高可重用性提高可重用性28286.6.6.6.尽量不使用全局信息:尽量不使用全局信息:尽量不使用全局信息:尽量不使用全局信息:应该尽量降低方法与外界的耦合程应该尽量降低方法与外界的耦合程度,不使用全局信息是降低耦合度的一项主要措施。度,不使用全局信息是降低耦合度的一项主要措施。7.7.7.7.利用继承机制利用继承机制利用继承机制利用继承机制:在面向对象程序中,使用继承机制是实现:在面向对象程序中,使用继承机制是实现共享和提高重用程度的主要途径。共享和提高重用程度的主要途径。(1)(1)调用子过程调用子过程。最简单的做法是把。最简单的做法是把公共的代码分离出来公共的代码分离出来,构成一个被其他方法调用的公用方法构成一个被其他方法调用的公用方法。可以在基类中定义这。可以在基类中定义这个公用方法,供派生类中的方法调用,如图个公用方法,供派生类中的方法调用,如图12.112.1所示。所示。12.2.112.2.1提高可重用性提高可重用性2929图图图图12.1 12.1 通过调用公用方法实现代码重用通过调用公用方法实现代码重用通过调用公用方法实现代码重用通过调用公用方法实现代码重用12.2.112.2.1提高可重用性提高可重用性3030(2)(2)分解因子分解因子。有时提高相似类代码可重用性的一个有效途。有时提高相似类代码可重用性的一个有效途径,是径,是从不同类的相似方法从不同类的相似方法中中分解出不同的分解出不同的“因子因子”(即不同即不同的代码的代码),把,把余下的代码余下的代码作为作为公用方法中的公共代码公用方法中的公共代码,把分解,把分解出的因子出的因子作为名字相同算法不同作为名字相同算法不同的方法,的方法,放在不同类中定义放在不同类中定义,并被这个公用方法调用并被这个公用方法调用,如图,如图12.212.2所示。使用这种途径通常所示。使用这种途径通常额外定义一个抽象基类,并在这个抽象基类中定义公用方法。额外定义一个抽象基类,并在这个抽象基类中定义公用方法。把这种途径与面向对象语言提供的把这种途径与面向对象语言提供的多态性机制多态性机制结合起来,让结合起来,让派生类继承抽象基类中定义的公用方法,可以明显降低为增派生类继承抽象基类中定义的公用方法,可以明显降低为增添新子类而需付出的工作量,因为只需在新子类中编写其特添新子类而需付出的工作量,因为只需在新子类中编写其特有的代码。有的代码。12.2.112.2.1提高可重用性提高可重用性3131图图图图12.2 12.2 通过因子分解实现代码重用通过因子分解实现代码重用通过因子分解实现代码重用通过因子分解实现代码重用12.2.112.2.1提高可重用性提高可重用性3232(3)(3)使用委托使用委托。uu继承关系的存在意味着子类继承关系的存在意味着子类“即是即是”父类,因此,父类的父类,因此,父类的所有方法和属性应该都适用于子类。仅当确实存在一般所有方法和属性应该都适用于子类。仅当确实存在一般-特殊特殊关系时,使用继承才是恰当的。继承机制使用不当将造成程关系时,使用继承才是恰当的。继承机制使用不当将造成程序难于理解、修改和扩充。序难于理解、修改和扩充。12.2.112.2.1提高可重用性提高可重用性3333(4)(4)把代码封装在类中把代码封装在类中。uu程序员往往希望程序员往往希望重用用其他方法编写的重用用其他方法编写的、解决同一类应用解决同一类应用问题的程序代码问题的程序代码。重用这类代码的一个比较安全的途径,是。重用这类代码的一个比较安全的途径,是把被重用的代码封装在类中。把被重用的代码封装在类中。uu例如,在开发一个数学分析应用系统的过程中,已知有现例如,在开发一个数学分析应用系统的过程中,已知有现成的实现矩阵变换的商品软件包,程序员不想用成的实现矩阵变换的商品软件包,程序员不想用C+C+语言重写语言重写这个算法,于是他定义一个矩阵类把这个商品软件包的功能这个算法,于是他定义一个矩阵类把这个商品软件包的功能封装在该类中。封装在该类中。12.2.112.2.1提高可重用性提高可重用性3434(自己看一下书)自己看一下书)自己看一下书)自己看一下书)1.1.1.1.封装实现策略封装实现策略封装实现策略封装实现策略:应该把类的应该把类的实现策略实现策略(包括描述属性的包括描述属性的数据数据结构结构、修改属性的算法修改属性的算法等等)封装起来,对外只提供公有的接口,封装起来,对外只提供公有的接口,否则将降低今后修改数据结构或算法的自由度。否则将降低今后修改数据结构或算法的自由度。2.2.不要用一个方法遍历多条关联链不要用一个方法遍历多条关联链不要用一个方法遍历多条关联链不要用一个方法遍历多条关联链:一个方法应该只包含对一个方法应该只包含对象模型中的有限内容。违反这条准则将导致方法过分复杂,象模型中的有限内容。违反这条准则将导致方法过分复杂,既不易理解,也不易修改扩充。既不易理解,也不易修改扩充。12.2.2 提高可扩充性12.2.212.2.2提高可扩充性提高可扩充性35353.3.3.3.避免使用多分支语句避免使用多分支语句避免使用多分支语句避免使用多分支语句:一般说来,可以利用一般说来,可以利用DO_CASEDO_CASE语句语句测测试对象的内部状态试对象的内部状态,而不要用来根据对象类型选择应有的行,而不要用来根据对象类型选择应有的行为,否则在增添新类时将不得不修改原有的代码。应该合理为,否则在增添新类时将不得不修改原有的代码。应该合理地利用多态性机制,根据对象当前类型,自动决定应有的行地利用多态性机制,根据对象当前类型,自动决定应有的行为。为。4.4.4.4.精心确定公有方法精心确定公有方法精心确定公有方法精心确定公有方法:公有方法是向公众公布的接口。对这公有方法是向公众公布的接口。对这类方法的修改往往会涉及许多其他类,因此,修改公有方法类方法的修改往往会涉及许多其他类,因此,修改公有方法的代价通常都比较高。的代价通常都比较高。为提高可修改性,降低维护成本,必为提高可修改性,降低维护成本,必须精心选择和定义公有方法须精心选择和定义公有方法。私有方法是仅在类内使用的方。私有方法是仅在类内使用的方法,通常利用私有方法来实现公有方法。删除、增加或修改法,通常利用私有方法来实现公有方法。删除、增加或修改私有方法所涉及的面要窄得多,因此代价也比较低。私有方法所涉及的面要窄得多,因此代价也比较低。12.2.212.2.2提高可重用性提高可重用性36361.1.1.1.预防用户的操作错误预防用户的操作错误预防用户的操作错误预防用户的操作错误:软件系统必须具有处理用户操作错:软件系统必须具有处理用户操作错误的能力。当用户在输入数据时发生错误,不应该引起程序误的能力。当用户在输入数据时发生错误,不应该引起程序运行中断,更不应该造成运行中断,更不应该造成“死机死机”。任何一个接收用户输入。任何一个接收用户输入数据的方法,对其接收到的数据都必须进行检查,即使发现数据的方法,对其接收到的数据都必须进行检查,即使发现了非常严重的错误,也应该给出恰当的提示信息,并准备再了非常严重的错误,也应该给出恰当的提示信息,并准备再次接收用户的输入。次接收用户的输入。12.2.312.2.3提高健壮性提高健壮性12.2.3 提高健壮性37372.2.2.2.检查参数的合法性:检查参数的合法性:检查参数的合法性:检查参数的合法性:对公有方法,尤其应该着重检查其参对公有方法,尤其应该着重检查其参数的合法性,因为用户在使用公有方法时可能违反参数的约数的合法性,因为用户在使用公有方法时可能违反参数的约束条件。束条件。3.3.3.3.不要预先确定限制条件:不要预先确定限制条件:不要预先确定限制条件:不要预先确定限制条件:在设计阶段,往往很难准确地预在设计阶段,往往很难准确地预测出应用系统中使用的数据结构的最大容量需求。因此不应测出应用系统中使用的数据结构的最大容量需求。因此不应该预先设定限制条件。如果有必要和可能,则该预先设定限制条件。如果有必要和可能,则应该使用动态应该使用动态内存分配机制,创建未预先设定限制条件的数据结构内存分配机制,创建未预先设定限制条件的数据结构。12.2.312.2.3提高健壮性提高健壮性38384.4.4.4.先测试后优化先测试后优化先测试后优化先测试后优化uu为在效率与健壮性之间做出合理的折衷,应该在为提高效率而为在效率与健壮性之间做出合理的折衷,应该在为提高效率而进行优化之前,先测试程序的性能,人们常常惊奇地发现,事实进行优化之前,先测试程序的性能,人们常常惊奇地发现,事实上大部分程序代码所消耗的运行时间并不多。应该仔细研究应用上大部分程序代码所消耗的运行时间并不多。应该仔细研究应用程序的特点,以确定程序的特点,以确定哪些部分需要着重测试哪些部分需要着重测试(例如,最坏情况出例如,最坏情况出现的次数及处理时间,可能需要着重测试现的次数及处理时间,可能需要着重测试)。经过测试,合理地。经过测试,合理地确定为提高性能应该着重优化的关键部分确定为提高性能应该着重优化的关键部分uu如果实现某个操作的算法有许多种,则应该综合考虑内存需求、如果实现某个操作的算法有许多种,则应该综合考虑内存需求、速度及实现的简易程度等因素,经合理折衷选定适当的算法。速度及实现的简易程度等因素,经合理折衷选定适当的算法。12.2.312.2.3提高健壮性提高健壮性393912.3 测试策略12.312.3测试策略测试策略单元测试单元测试集成测试集成测试确认测试确认测试系统测试系统测试回回归归测测试试4040l l 最小的可测试单元是封装起来的类和对象。一个类可以包含一组不同的操作,而一个特定的操作也可能存在于一组不同的类中。l l 因此,对于面向对象的软件来说,单元测试的含义发生了很大变化。12.3.1 面向对象的单元测试12.312.3测试策略测试策略4141l l 测试面向对象软件时,不能再孤立地测试单个操测试面向对象软件时,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。作,而应该把操作作为类的一部分来测试。l l 例如,假设有一个类层次,操作例如,假设有一个类层次,操作X X在类中定义并被在类中定义并被一组子类继承,一组子类继承,每个子类都使用操作每个子类都使用操作X X,但是,但是,X X调用调用子类中定义的操作并处理子类的私有属性。由于在不子类中定义的操作并处理子类的私有属性。由于在不同的子类中使用操作同的子类中使用操作X X的环境有微妙的差别,因此有的环境有微妙的差别,因此有必要在每个子类的语境中测试操作必要在每个子类的语境中测试操作X X。12.312.3测试策略测试策略4242l l 因为在面向对象的软件中因为在面向对象的软件中不存在层次的控制结构不存在层次的控制结构,传统的自顶向下或自底,传统的自顶向下或自底向上的集成策略就没有意义了。面向对象软件的集成测试主要有下述两种不向上的集成策略就没有意义了。面向对象软件的集成测试主要有下述两种不同的策略。同的策略。(1 1)基于线程的测试基于线程的测试(thread based testing)thread based testing)。这种策略把。这种策略把响应系统的响应系统的一个输入或一个事件所需要的那些类集成起来一个输入或一个事件所需要的那些类集成起来。分别集成并测试每个线程,。分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用。同时应用回归测试以保证没有产生副作用。(2 2)基于使用的测试基于使用的测试(use based testing)use based testing)。这种方法首先测试几乎不使。这种方法首先测试几乎不使用服务器类的那些类(称为用服务器类的那些类(称为独立独立类),把独立类都测试完之后,再测试使用类),把独立类都测试完之后,再测试使用独立类的下一个层次的类(称为独立类的下一个层次的类(称为依赖类依赖类)。对依赖类的测试一个层次一个层)。对依赖类的测试一个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。次地持续进行下去,直至把整个软件系统构造完为止。12.3.2 面向对象的集成测试12.312.3测试策略测试策略4343l l在测试面向对

    注意事项

    本文(软件工程软件工程软件工程 (12).ppt)为本站会员(刘静)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开