面向对象实现课件

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

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

1、软件工程软件工程导论(第五版),第十二章 面向对象实现,教学目标,理解:面向对象语言的优点和技术特点 了解:面向对象程序设计遵循的新准则;测试策略和用例设计。,重点难点,重点:面向对象程序设计语言的特点,目录,程序设计语言 程序设计风格 测试策略 设计测试用例 总结 课后作业,程序设计语言,面向对象语言的优点 一致的表示方法 面向对象开发基于不随时间变化的、一致的表示方法。这种表示方法应该从问题域到OOA,从OOA到OOD,最后从OOD到面向对象编程(OOP),始终稳定不变。一致的表示方法既有利于在软件开发过程中始终使用统一的概念,也有利于维护人员理解软件的各种配置成分。,程序设计语言,面向对

2、象语言的优点 可重用性 在OOA,OOD直到OOP中都显式地表示问题域语义,其意义是十分深远的。随着时间的推移,软件开发组织既可能重用它在某个问题域内的OOA结果,也可能重用相应的OOD和OOP结果。,程序设计语言,面向对象语言的优点 可维护性 在选择编程语言时,应该考虑的首要因素,是在供选择的语言中哪个语言能最好地表达问题域语义。一般说来,应该尽量选用面向对象语言来实现面向对象分析、设计的结果。,程序设计语言,面向对象语言的技术特点P290 支持类与对象概念的机制 所有面向对象语言都允许用户动态创建对象,并且可以用指针引用动态创建的对象。这意味着系统必须处理内存管理问题,如果不及时释放不再需

3、要的对象所占用的内存,动态存储分配就有可能耗尽内存。 实现整体-部分(即聚集)结构的机制 一般通过使用指针和独立的关联对象实现整体-部分结构。,程序设计语言,面向对象语言的技术特点 实现一般-特殊(即泛化)结构的机制 既包括实现继承的机制也包括解决名字冲突的机制。 实现属性和服务的机制 应该着重考虑以下几个方面: 支持实例连接的机制;属性的可见性控制;对属性值的约束。对于服务来说,主要应该考虑下列因素: 支持消息连接(即表达对象交互关系)的机制;控制服务可见性的机制;动态联编。 动态联编:应用系统在运行过程中,当需要执行一个特定服务时,选择实现该服务的算法的能力。,程序设计语言,面向对象语言的

4、技术特点 类型检查 程序设计语言可以按照编译时进行类型检查的严格程度来分类。如果语言仅要求每个变量或属性隶属于一个对象,则是弱类型的;如果语法规定每个变量或属性必须准确地属于某个特定的类,则这样的语言是强类型的。 强类型语言主要有两个优点: 一是有利于在编译时发现程序错误;二是增加了优化的可能性。,程序设计语言,面向对象语言的技术特点 类库 大多数面向对象语言都提供一个实用的类库。类库使许多软构件就不必由程序员重头编写了,这为实现软件重用带来很大方便。 效率 拥有完整类库的面向对象语言,有时能比使用非面向对象语言得到运行更快的代码。 持久保存对象 通过在类库中增加对象存储管理功能,可以在不改变

5、语言定义或不增加关键字的情况下,就在开发环境中提供这种功能。,程序设计语言,面向对象语言的技术特点 参数化类 使用一个或多个类型去参数化一个类的机制,有了这种机制,程序员就可以先定义一个参数化的类模板(即在类定义中包含以参数形式出现的一个或多个类型),然后把数据类型作为参数传递进来,从而把这个类模板应用在不同的应用程序中,或用在同一应用程序的不同部分。 开发环境 面向对象语言所提供的软件工具或开发环境尤其重要,至少应该包括下列一些最基本的软件工具:编辑程序,编译程序或解释程序,浏览工具,调试器(debugger)等。,程序设计语言,选择面向对象语言 应该考虑的实际因素。 将来能否占主导地位 可

6、重用性 类库和开发环境 其他因素。如,对用户学习面向对象分析、设计和编码技术所能提供的培训服务;在使用这个面向对象语言期间能提供的技术支持;能提供给开发人员使用的开发工具、开发平台、发行平台;对机器性能和内存的需求;集成已有软件的容易程度等。,目录,程序设计语言 程序设计风格 测试策略 设计测试用例 总结 课后作业,程序设计风格,前言 良好的程序设计风格对面向对象实现来说尤其重要,不仅能明显减少维护或扩充的开销,而且有助于在新项目中重用已有的程序代码。,程序设计风格,提高可重用性 主要准则有 提高方法的内聚 减小方法的规模 保持方法的一致性 把策略与实现分开 全面覆盖 尽量不使用全局信息 利用

7、继承机制,程序设计风格,提高可扩充性 主要准则有 封装实现策略 不要用一个方法遍历多条关联链 避免使用多分支语句 精心确定公有方法,程序设计风格,提高健壮性 主要准则有 预防用户的操作错误 检查参数的合法性 不要预先确定限制条件 先测试后优化,目录,程序设计语言 程序设计风格 测试策略 设计测试用例 总结 课后作业,测试策略,概述 测试软件的经典策略是,从“小型测试”开始,逐步过渡到“大型测试”。即:从单元测试开始,逐步进入集成测试,最后进行确认测试和系统测试。,测试策略,面向对象的单元测试 对于面向对象的软件来说,单元测试的含义发生了很大变化 最小的可测试单元是封装起来的类和对象。一个类可以

8、包含一组不同的操作,而一个特定的操作也可能存在于一组不同的类中。 测试面向对象软件时,不能再孤立地测试单个操作,而应该把操作作为类的一部分来测试。,测试策略,面向对象的集成测试 主要有下述两种不同的策略 基于线程的测试(thread based testing)。 把响应系统的一个输入或一个事件所需要的那些类集成起来。分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用。 基于使用的测试(use based testing)。首先测试几乎不使用服务器类的那些类(称为独立类),把独立类都测试完之后,再测试使用独立类的下一个层次的类(称为依赖类)。,测试策略,面向对象的确认测试 对于面向对

9、象的软件来说,主要还是根据动态模型和描述系统行为的脚本来设计确认测试用例。,目录,程序设计语言 程序设计风格 测试策略 设计测试用例 总结 课后作业,设计测试用例,测试类的方法 测试单个类的方法主要有随机测试、划分测试和基于故障的测试等3种。 随机测试 例:银行应用系统 该系统的account(账户)类有下列操作:open(打开),setup(建立),deposit(存款),withdraw(取款),balance(余额),summarize(清单),creditLimit(透支限额)和close(关闭) 分析: 银行应用系统随机测试 上列每个操作都可以应用于account类的实例,但是,该系

10、统的性质也对操作的应用施加了一些限制,例如,必须在应用其他操作之前先打开账户,在完成了全部操作之后才能关闭账户。即使有这些限制,可做的操作也有许多种排列方法。,设计测试用例,测试类的方法 随机测试 结果: 一个account类实例的最小行为历史包括下列操作:opensetupdepositwithdrawclose 这就是对account类的最小测试序列。但是,在下面的序列中可能发生许多其他行为: opensetupdepositdeposit|withdraw|balance|summarize|creditLimitnwithdrawclose 从上列序列可以随机地产生一系列不同的操作序列

11、,例如:测试用例 #r1:opensetupdepositdepositbalancesummarizewithdraw close测试用例 #r2:opensetupdepositwithdrawdepositbalancecreditLimitwithdrawclose,设计测试用例,测试类的方法 划分测试 与测试传统软件时采用等价划分方法类似,采用划分测试(partition testing)方法可以减少测试类时所需要的测试用例的数量。 划分类别的方法 基于状态的划分 基于属性的划分 基于功能的划分,设计测试用例,测试类的方法 基于故障的测试 基于故障的测试(fault based te

12、sting)与传统的错误推测法类似,也是首先推测软件中可能有的错误,然后设计出最可能发现这些错误的测试用例。,设计测试用例,集成测试方法 多类测试 Kirani和Tsai建议使用下列步骤,以生成多个类的随机测试用例。 对每个客户类,使用类操作符列表来生成一系列随机测试序列。这些操作符向服务器类实例发送消息。 对所生成的每个消息,确定协作类和在服务器对象中的对应操作符。 对服务器对象中的每个操作符(已经被来自客户对象的消息调用),确定传递的消息。 对每个消息,确定下一层被调用的操作符,并把这些操作符结合进测试序列中。,设计测试用例,集成测试方法 从动态模型导出测试用例 例:account类的状态

13、转换图,设计测试用例,集成测试方法 从动态模型导出测试用例 下图给出了前面讨论过的account类的状态图,从图可见,初始转换经过了empty acct和setup acct这两个状态,而类实例的大多数行为发生在working acct状态中,最终的withdraw和close使得account类分别向nonworking acct状态和dead acct状态转换。,设计测试用例,集成测试方法 从动态模型导出测试用例 测试用例 设计出的测试用例应该覆盖所有状态,即操作序列应该使得account类实例遍历所有允许的状态转换 测试用例 #s1:opensetupAccntdeposit(initi

14、al)withdraw(final)close 向最小序列中加入附加的测试序列,可得出其他测试用例 测试用例 #s2:opensetupAccntdeposit(initial)depositbalancecre ditwithdraw(final)close 测试用例 #s3:opensetupAccntdeposit(initial)depositwithdrawac cntInfowithdraw(final)close,目录,程序设计语言 程序设计风格 测试策略 设计测试用例 总结 课后作业,目录,程序设计语言 程序设计风格 测试策略 设计测试用例 总结 课后作业,课后作业,教材课后习题,本章结束,Thank you!,

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

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

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