第12章面向对象实现OrientedObjectImplement

上传人:pu****.1 文档编号:567671243 上传时间:2024-07-22 格式:PPT 页数:46 大小:260KB
返回 下载 相关 举报
第12章面向对象实现OrientedObjectImplement_第1页
第1页 / 共46页
第12章面向对象实现OrientedObjectImplement_第2页
第2页 / 共46页
第12章面向对象实现OrientedObjectImplement_第3页
第3页 / 共46页
第12章面向对象实现OrientedObjectImplement_第4页
第4页 / 共46页
第12章面向对象实现OrientedObjectImplement_第5页
第5页 / 共46页
点击查看更多>>
资源描述

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

1、郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement第第12章章 面向对象实现面向对象实现(Oriented-Object Implement)12.1 程序设计语言程序设计语言 (Program Design language )12.2 程序设计风格程序设计风格 (Program Design Style)12.3 测试策略测试策略 (Test Strategy)12.4 设计测试用例设计测试用例(Test Cases Design)催纬斟平网

2、眺磕册豹圆琉皿瘩葱吠年埋赡聋报番参厩琐资马萄豆敷畅圈春第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement面向对象设计的结果既可以用面向对象语言、也可以面向对象设计的结果既可以用面向对象语言、也可以用非面向对象语言实现。用非面向对象语言实现。12.1 程序设计语言程序设计语言(Program Design lang

3、uage ) 12.1.1 面向对象语言的优点面向对象语言的优点(Advantage of Oriented-Object Language)砾略外龚筹准巍陪洞腻扳铲伺分峪颅办踩债方古腕篷帽侥涨婆哄已伊泥樊第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement1. 一致的表示方法一致的表示方法 这种表示方法应该从问题

4、域到这种表示方法应该从问题域到OOA,从,从OOA到到OOD,最后从,最后从OOD到面向对象编程到面向对象编程(OOP),始终稳,始终稳定不变。定不变。2. 可重用性可重用性 在在OOA,OOD直到直到OOP中都显式地表示问题域语中都显式地表示问题域语义,其意义是十分深远的。随着时间的推移,软件开义,其意义是十分深远的。随着时间的推移,软件开发组织既可能重用它在某个问题域内的发组织既可能重用它在某个问题域内的OOA结果,结果,也可能重用相应的也可能重用相应的OOD和和OOP结果。结果。3. 可维护性可维护性 保持文档与源程序一致的必要性。保持文档与源程序一致的必要性。 程序内部表达问题域语义对

5、维护工作的意义。程序内部表达问题域语义对维护工作的意义。抉见斋危按蜜殖里英赶唉芹爬派火险坟眠埔狗弱苛榆梧尝料骡稻秽蕾瓶捅第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement1.支持类与对象概念的机制支持类与对象概念的机制2. 实现整体实现整体-部分部分(即聚集即聚集)结构的机制结构的机制3. 实现一般实现一般-特殊

6、特殊(即泛化即泛化)结构的机制结构的机制4. 实现属性和服务的机制实现属性和服务的机制5. 类型检查类型检查12.1.2 面向对象语言的技术特点面向对象语言的技术特点 (Characteristics of Oriented-Object Language)砾撩绥幻吸营识亡乞交拷聪虏矿摧思洞怔盖卓台掏校丧招扁咨犀养友厩涵第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面

7、向对象实现Oriented-ObjectImplement5. 类型检查类型检查 如果语言仅要求每个变量或属性隶属于一个对象,如果语言仅要求每个变量或属性隶属于一个对象,则是则是弱类型弱类型的;的; 如果语法规定每个变量或属性必须准确地属于某如果语法规定每个变量或属性必须准确地属于某个特定的类,则这样的语言是个特定的类,则这样的语言是强类型强类型的。的。 强类型强类型语言主要有两个优点:语言主要有两个优点: 一是有利于在编译一是有利于在编译时发现程序错误,二是增加了优化的可能性。通常使时发现程序错误,二是增加了优化的可能性。通常使用强类型编译型语言开发软件产品,用强类型编译型语言开发软件产品,

8、 弱类型解释型语言快速开发原型。弱类型解释型语言快速开发原型。 总的说来,强类型语言有助于提高软件的可靠性总的说来,强类型语言有助于提高软件的可靠性和运行效率,现代的程序语言理论支持强类型检查,和运行效率,现代的程序语言理论支持强类型检查,大多数新语言都是强类型的。大多数新语言都是强类型的。回仗魂税育瓶欺耸趴召三间另椿耐准胸范潮委旭小蕴糯禾证棉木坏蔽嗜是第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-Obj

9、ectImplement第12章面向对象实现Oriented-ObjectImplement6. 类库类库大多数面向对象语言都提供一个实用的类库。大多数面向对象语言都提供一个实用的类库。类库中往往包含实现通用数据结构类库中往往包含实现通用数据结构(例如,动态数组、例如,动态数组、表、队列、栈、树等等表、队列、栈、树等等)的类,通常把这些类称为包的类,通常把这些类称为包容类。在类库中还可以找到实现各种关联的类。容类。在类库中还可以找到实现各种关联的类。更完整的类库通常还提供独立于具体设备的接口类更完整的类库通常还提供独立于具体设备的接口类(例如,输入输出流例如,输入输出流),此外,用于实现窗口系

10、统的用,此外,用于实现窗口系统的用户界面类也非常有用,它们构成一个相对独立的图形户界面类也非常有用,它们构成一个相对独立的图形库。库。胺命潦铰脐翔督宣乎哎涅驯绸镇岛门非总种雾蹿骡诣二困搁累鸳揽迂耐附第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement7. 效率效率 许多人认为面向对象语言的主要缺点是效率低。许多人认

11、为面向对象语言的主要缺点是效率低。(某些早期的面向对象语言是某些早期的面向对象语言是解释型解释型的而不是的而不是编译型编译型的。的。) 事实上,类库中提供了更高效的算法和更好的数事实上,类库中提供了更高效的算法和更好的数据结构,例如,程序员已经无须编写实现哈希表或平据结构,例如,程序员已经无须编写实现哈希表或平衡树算法的代码了,类库中已经提供了这类数据结构,衡树算法的代码了,类库中已经提供了这类数据结构,而且算法先进、代码精巧可靠。而且算法先进、代码精巧可靠。 效率低的另一个理由是,这种语言在运行时使用效率低的另一个理由是,这种语言在运行时使用动态联编实现多态性,这似乎需要在运行时查找继承动态

12、联编实现多态性,这似乎需要在运行时查找继承树,以得到定义给定操作的类。树,以得到定义给定操作的类。 事实上,绝大多数面向对象语言都优化了这个查事实上,绝大多数面向对象语言都优化了这个查找过程,从而实现了高效率查找。找过程,从而实现了高效率查找。磺歧籍般荡蒸铆伎铁搂层自镊狠时驾腊渴非斯残沙刷呛爸诱爱关例鼓用丙第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Or

13、iented-ObjectImplement8. 持久保存对象持久保存对象希望长期保存数据主要出于以下两个原因:希望长期保存数据主要出于以下两个原因: (1) 为实现在不同程序之间传递数据,需要保存数据;为实现在不同程序之间传递数据,需要保存数据;(2) 为恢复被中断了的程序的运行,首先需要保存数为恢复被中断了的程序的运行,首先需要保存数据。据。一些面向对象语言,没有提供直接存储对象的机制。一些面向对象语言,没有提供直接存储对象的机制。这些语言的用户必须自己管理对象的输入输出,或者这些语言的用户必须自己管理对象的输入输出,或者购买面向对象的数据库管理系统。购买面向对象的数据库管理系统。约镁腕唇

14、撼罢畴游浸嫂荤裙皂钡督裤逻黄呕怒伦活滇嫩崇滨往石实盔氧蝶第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement9. 参数化类参数化类 所谓参数化类,就是所谓参数化类,就是使用一个或多个类型去参数使用一个或多个类型去参数化一个类的机制化一个类的机制,有了这种机制,程序员就可以先定,有了这种机制,程序员就可以先定义一个参

15、数化的类模板义一个参数化的类模板(即在类定义中包含以参数形即在类定义中包含以参数形式出现的一个或多个类型式出现的一个或多个类型),然后把数据类型作为参,然后把数据类型作为参数传递进来,从而把这个类模板应用在不同的应用程数传递进来,从而把这个类模板应用在不同的应用程序中,或用在同一应用程序的不同部分。序中,或用在同一应用程序的不同部分。Eiffel语言语言中就有参数化类,中就有参数化类,C+语言也提供了类模板。语言也提供了类模板。薪橙奈枝滦射蚂捣计等何紫篆途淤辉晾邦迁蒂晓恋机恬钞仁箱汤秸撩诬恶第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented

16、-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement10. 开发环境开发环境 由于面向对象程序中继承关系和动态联编等引入由于面向对象程序中继承关系和动态联编等引入的特殊复杂性,面向对象语言所提供的软件工具或开的特殊复杂性,面向对象语言所提供的软件工具或开发环境就显得尤其重要了。至少应该包括下列一些最发环境就显得尤其重要了。至少应该包括下列一些最基本的软件工具:基本的软件工具: 编辑程序,编译程序或解释程序,编辑程序,

17、编译程序或解释程序,浏览工具,调试器浏览工具,调试器(debugger)等。等。俯韩薪煞谎裙辫工馏规纂五蛇膜设野炎壮素碴媚豆呈恢狡阵咳遗接铆汹茄第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement1. 将来能否占主导地位将来能否占主导地位 希望采用将来占主导地位的语言编程。希望采用将来占主导地位的语言编程。2. 可

18、重用性可重用性 应该优先选用能够最完整、最准确地表达问题域语应该优先选用能够最完整、最准确地表达问题域语义的面向对象语言。义的面向对象语言。12.1.3 选择面向对象语言选择面向对象语言 (Selecting Oriented-Object Language)咕跨角辈读妄克互氮疯鲸账联沥属郁说火牛哪憨宰剁佐待喻扮蛋绝几座幕第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章

19、面向对象实现Oriented-ObjectImplement3. 类库和开发环境类库和开发环境 应该考虑类库中提供了哪些有价值的类。随着应该考虑类库中提供了哪些有价值的类。随着类库的日益成熟和丰富,在开发新应用系统时,需要类库的日益成熟和丰富,在开发新应用系统时,需要开发人员自己编写的代码将越来越少。开发人员自己编写的代码将越来越少。 在开发环境中,除了提供前述的基本软件工具外,在开发环境中,除了提供前述的基本软件工具外,还应该提供使用方便的类库编辑工具和浏览工具。其还应该提供使用方便的类库编辑工具和浏览工具。其中的类库浏览工具应该具有强大的联想功能。中的类库浏览工具应该具有强大的联想功能。仕

20、镣危金兴冠市沙盔谭腰吻藤盈戴罪限禽绊辖博产犯添踊悟粤酸耍伟挡王第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement4. 其他因素其他因素 对用户学习面向对象分析、设计和编码技术所能对用户学习面向对象分析、设计和编码技术所能提供的培训服务;提供的培训服务; 在使用这个面向对象语言期间能提供的技术支持;在使用这个面向对

21、象语言期间能提供的技术支持; 能提供给开发人员使用的开发工具、开发平台、能提供给开发人员使用的开发工具、开发平台、发行平台;发行平台; 对机器性能和内存的需求;对机器性能和内存的需求; 集成已有软件的容易程度等。集成已有软件的容易程度等。寐孝札分灯风灶固应侯东质遵铸曹扼景马零遇巢脱而悟霞酣怎兔颗雹按男第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Orien

22、ted-ObjectImplement 良好的面向对象程序设计风格,既包括传统的程良好的面向对象程序设计风格,既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有序设计风格准则,也包括为适应面向对象方法所特有的概念的概念(例如,继承性例如,继承性)而必须遵循的一些新准则。而必须遵循的一些新准则。12.2 程序设计风格程序设计风格(Program Design Style)茧嗅梦伍风伊捍链拌容式搪六拌很杏界赚簧枢腔杏钨炽胁法落誉蔡褂垄脑第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔

23、江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement1. 提高方法的内聚提高方法的内聚 一个方法一个方法(即服务即服务)应该只完成单个功能。如果某应该只完成单个功能。如果某个方法涉及两个或多个不相关的功能,则应该把它分个方法涉及两个或多个不相关的功能,则应该把它分解成几个更小的方法。解成几个更小的方法。2. 减小方法的规模减小方法的规模 应该减小方法的规模,如果某个方法规模过大应该减小方法的规模,如果某个方法规模过大(代码长度超过一页纸可能就太大了代码长度超过一页纸

24、可能就太大了),则应该把它分,则应该把它分解成几个更小的方法。解成几个更小的方法。12.2.1 提高可重用性提高可重用性(Enhancing Reuse)琉化度墨琼煤睹烩聪蔗包峪超泌毯亢禽悼溜吾瞄讲贵剥哨滴差和置偿挣靠第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement3. 保持方法的一致性保持方法的一致性 保持方

25、法的一致性,有助于实现代码重用。一般保持方法的一致性,有助于实现代码重用。一般说来,功能相似的方法应该有一致的名字、参数特征说来,功能相似的方法应该有一致的名字、参数特征(包括参数个数、类型和次序包括参数个数、类型和次序)、返回值类型、使用条、返回值类型、使用条件及出错条件等。件及出错条件等。4. 把策略与实现分开把策略与实现分开 从所完成的功能看,有两种不同类型的方法。一从所完成的功能看,有两种不同类型的方法。一类方法负责做出决策,提供变元,并且管理全局资源,类方法负责做出决策,提供变元,并且管理全局资源,可称为策略方法。另一类方法负责完成具体的操作,可称为策略方法。另一类方法负责完成具体的

26、操作,但却并不做出是否执行这个操作的决定,也不知道为但却并不做出是否执行这个操作的决定,也不知道为什么执行这个操作,可称为实现方法。什么执行这个操作,可称为实现方法。恋搜果够头阜赦顺次知钓歌具鲸毋妥尽危肺梧抉晚龋泻梭账战费傍底劝模第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement5. 全面覆盖全面覆盖 如果输入条

27、件的各种组合都可能出现,则应该针如果输入条件的各种组合都可能出现,则应该针对所有组合写出方法,而不能仅仅针对当前用到的组对所有组合写出方法,而不能仅仅针对当前用到的组合情况写方法。例如,如果在当前应用中需要写一个合情况写方法。例如,如果在当前应用中需要写一个方法,以获取表中第一个元素,则至少还应该为获取方法,以获取表中第一个元素,则至少还应该为获取表中最后一个元素再写一个方法。表中最后一个元素再写一个方法。6. 尽量不使用全局信息尽量不使用全局信息 应该尽量降低方法与外界的耦合程度,不使用全应该尽量降低方法与外界的耦合程度,不使用全局信息是降低耦合度的一项主要措施。局信息是降低耦合度的一项主要

28、措施。密逸者败图秃杜盗血荔渭骚蟹案讲渤戒键恫舰壹梯器聚响托屋捍阻嗅砷辉第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement7. 利用继承机制利用继承机制 (1) 调用子过程。最简单的做法是把公共的代码调用子过程。最简单的做法是把公共的代码分离出来,构成一个被其他方法调用的公用方法。可分离出来,构成一个被其他方法调用

29、的公用方法。可以在基类中定义这个公用方法,供派生类中的方法调以在基类中定义这个公用方法,供派生类中的方法调用,如图用,如图12.1所示。所示。敢帐脖忿闻巴啤悯悠乱琳玲卢桌巨京装昆左炮权湍申升槛懈奸崔撤柞凤猾第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement图图12.1 通过调用公用方法实现代码重用通过调用公用方法

30、实现代码重用镑门鞘扎疡月笑册谩笔熏隙查宙肇狸陷句挤荔榜浪溢眩芳虏旭乎蹈柬帽肮第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement图图12.2 通过因子分解实现代码重用通过因子分解实现代码重用(2) 分解因子。分解因子。镰票汤糠前笼塘靠赠妻捶佐舅铅再匡耶板粪捡远禽粱逢隐釉嚷党弟细涂件第12章面向对象实现Oriente

31、d-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement(3) 使用委托。使用委托。 当逻辑上不存在一般当逻辑上不存在一般-特殊关系时,为重用已有特殊关系时,为重用已有的代码,可以利用委托机制。的代码,可以利用委托机制。(4) 把代码封装在类中。把代码封装在类中。 例如,在开发一个数学分析应用系统的过程中,例如,在开发一个数学分析应用系统的过程中,已知

32、有现成的实现矩阵变换的商品软件包,程序员不已知有现成的实现矩阵变换的商品软件包,程序员不想用想用C+语言重写这个算法,于是他定义一个矩阵类语言重写这个算法,于是他定义一个矩阵类把这个商品软件包的功能封装在该类中。把这个商品软件包的功能封装在该类中。呜抵嫁蹈肉王衫末喉辐甜感邦窃缨簇再绎第碌演狰确彭淬左蹬击拒葡操驹第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现

33、Oriented-ObjectImplement1. 封装实现策略封装实现策略 应该把类的实现策略应该把类的实现策略(包括描述属性的数据结构、包括描述属性的数据结构、修改属性的算法等修改属性的算法等)封装起来,对外只提供公有的接封装起来,对外只提供公有的接口,否则将降低今后修改数据结构或算法的自由度。口,否则将降低今后修改数据结构或算法的自由度。12.2.2 提高可扩充性提高可扩充性(Enhancing extensibility)钳抓锣辙军肠约雨婚辣巢烈贱卵阐捣荒咎瓜剿慰潜欢皑烷附烦屡烫脱干桥第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Orient

34、ed-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement2. 不要用一个方法遍历多条关联链不要用一个方法遍历多条关联链 一个方法应该只包含对象模型中的有限内容。违一个方法应该只包含对象模型中的有限内容。违反这条准则将导致方法过分复杂,既不易理解,也不反这条准则将导致方法过分复杂,既不易理解,也不易修改扩充。易修改扩充。3. 避免使用多分支语句避免使用多分支语句 可以利用可以利用DO_CASE语句测试对象的内部状态,语

35、句测试对象的内部状态,而不要用来根据对象类型选择应有的行为,否则在增而不要用来根据对象类型选择应有的行为,否则在增添新类时将不得不修改原有的代码。应该合理地利用添新类时将不得不修改原有的代码。应该合理地利用多态性机制,根据对象当前类型,自动决定应有的行多态性机制,根据对象当前类型,自动决定应有的行为。为。疡嫌杖抨咙篱群龚漳位惋波怔坞晤估筒绞撂悼股哟厢先惯穷式升香三淑摆第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Orien

36、ted-ObjectImplement第12章面向对象实现Oriented-ObjectImplement4. 精心确定公有方法精心确定公有方法 公有方法是向公众公布的接口。对这类方法的修公有方法是向公众公布的接口。对这类方法的修改往往会涉及许多其他类,因此,修改公有方法的代改往往会涉及许多其他类,因此,修改公有方法的代价通常都比较高。为提高可修改性,降低维护成本,价通常都比较高。为提高可修改性,降低维护成本,必须精心选择和定义公有方法。私有方法是仅在类内必须精心选择和定义公有方法。私有方法是仅在类内使用的方法,通常利用私有方法来实现公有方法。删使用的方法,通常利用私有方法来实现公有方法。删除

37、、增加或修改私有方法所涉及的面要窄得多,因此除、增加或修改私有方法所涉及的面要窄得多,因此代价也比较低。代价也比较低。通比针赏顾本逐桓独篇骨嗜怕涉爷氏篮勉擅蒙蔼谴嚎苞烂锌拂究累抑鄂权第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement1.预防用户的操作错误预防用户的操作错误2. 检查参数的合法性检查参数的合法性3.

38、 不要预先确定限制条件不要预先确定限制条件 在设计阶段,往往很难准确地预测出应用在设计阶段,往往很难准确地预测出应用系统中使用的数据结构的最大容量需求。因此系统中使用的数据结构的最大容量需求。因此不应该预先设定限制条件。不应该预先设定限制条件。4. 先测试后优化先测试后优化12.2.3 提高健壮性提高健壮性(Enhancing Haleness)显遭矩褥循钞烟兜结枷搅嘉辕弧镍含眯冷量秋微氓讯鸣罗固乾褪骨系毁祸第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令

39、括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement 最小的可测试单元是封装起来的类和对象。一个最小的可测试单元是封装起来的类和对象。一个类可以包含一组不同的操作,而一个特定的操作也可类可以包含一组不同的操作,而一个特定的操作也可能存在于一组不同的类中。因此,对于面向对象的软能存在于一组不同的类中。因此,对于面向对象的软件来说,单元测试的含义发生了很大变化。件来说,单元测试的含义发生了很大变化。 测试面向对象软件时,不能再孤立地测试单个操测试面向对象软件时,不能再孤立地测试单个操作,而应该把操作作为

40、类的一部分来测试。作,而应该把操作作为类的一部分来测试。 传统的单元测试方法是不适用的传统的单元测试方法是不适用的.12.3.1 面向对象的单元测试面向对象的单元测试(Oriented-Object Units Test)12.3 测试策略(Test Strategy)绽把妇灾橱裁谋瑞揖乍羚槽摇诧番缸胃热钦孟黑籽室悯遗水菜床号食骇奎第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplemen

41、t第12章面向对象实现Oriented-ObjectImplement(1) 基于线程的测试(基于线程的测试(thread based testing)。这种。这种策略把响应系统的一个输入或一个事件所需要的那些策略把响应系统的一个输入或一个事件所需要的那些类集成起来。分别集成并测试每个线程,同时应用回类集成起来。分别集成并测试每个线程,同时应用回归测试以保证没有产生副作用。归测试以保证没有产生副作用。(2) 基于使用的测试(基于使用的测试(use based testing)。这种方。这种方法首先测试几乎不使用服务器类的那些类(称为独立法首先测试几乎不使用服务器类的那些类(称为独立类),把独立

42、类都测试完之后,再测试使用独立类的类),把独立类都测试完之后,再测试使用独立类的下一个层次的类(称为依赖类)。对依赖类的测试一下一个层次的类(称为依赖类)。对依赖类的测试一个层次一个层次地持续进行下去,直至把整个软件系个层次一个层次地持续进行下去,直至把整个软件系统构造完为止。统构造完为止。12.3.2 面向对象的集成测试面向对象的集成测试 (Oriented-Object Integration Test)寅士笔息次涂夜舌事篷天怕锡芒琶暖陶孵瓢樱掖惊壳泣维气彩弗兰痞株面第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImp

43、lement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement 集群测试(集群测试(cluster testing)是面向对象软件集成)是面向对象软件集成测试的一个步骤。在这个测试步骤中,用精心设计的测试的一个步骤。在这个测试步骤中,用精心设计的测试用例检查一群相互协作的类(通过研究对象模型测试用例检查一群相互协作的类(通过研究对象模型可以确定协作类),这些测试用例力图发现协作错误。可以确定协作类),这些测试用例力图发现协作错误。兆冉茬聪卵滋潦至

44、佬骨汹郴疆没瑞波腾俄泄裕唉迷龄赛嫉伤浓绽每主侯于第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement 和传统的确认测试一样,面向对象软件的确认测和传统的确认测试一样,面向对象软件的确认测试也试也集中检查用户可见的动作和用户可识别的输出集中检查用户可见的动作和用户可识别的输出。为了导出确认测试用例,测试人员应该认真研

45、究动态为了导出确认测试用例,测试人员应该认真研究动态模型和描述系统行为的脚本,以确定最可能发现用户模型和描述系统行为的脚本,以确定最可能发现用户交互需求错误的情景。交互需求错误的情景。 传统的黑盒测试方法也可用于设计确认测试用例,传统的黑盒测试方法也可用于设计确认测试用例,但是,对于面向对象的软件来说,主要还是根据但是,对于面向对象的软件来说,主要还是根据动态动态模型和描述系统行为的脚本模型和描述系统行为的脚本来设计确认测试用例。来设计确认测试用例。12.3.3 面向对象的确认测试面向对象的确认测试 (Oriented-Object Validation Test)流物化暖鹊跨嫡眼叛帜岗跑隧酵

46、箭尾恶骋臻税讼揖瞬拂每跨已里经锻笑眼第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement 目前,面向对象软件的测试用例的设计方法,还目前,面向对象软件的测试用例的设计方法,还处于研究、发展阶段。与传统软件测试(测试用例的处于研究、发展阶段。与传统软件测试(测试用例的设计由软件的输入设计由软件的输入处理处理输出视图或

47、单个模块的输出视图或单个模块的算法细节驱动)不同,面向对象测试关注于算法细节驱动)不同,面向对象测试关注于设计适当设计适当的操作序列以检查类的状态的操作序列以检查类的状态。12.4 设计测试用例设计测试用例(Test Cases Design) 掏裙票航兴项我掷寞蛛哩目瞪洞越钩埂殉远结的价始厘辆霜簇能只船唉垦第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现O

48、riented-ObjectImplement 对面向对象的软件来说,小型测试着重测试单对面向对象的软件来说,小型测试着重测试单个类和类中封装的方法。测试单个类的方法主要有随个类和类中封装的方法。测试单个类的方法主要有随机测试、划分测试和基于故障的测试等机测试、划分测试和基于故障的测试等3种。种。12.4.1 测试类的方法测试类的方法(Methods of Test Classes)哩惭客俞枕近车宴筏生进抨概氢春彪禄涉烧豌习鹿钮距厂艾钩恍呕肌硬沁第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审

49、诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement1. 随机测试随机测试(Random Testing) 下面通过银行应用系统的例子,简要地说明这种下面通过银行应用系统的例子,简要地说明这种测试方法。该系统的测试方法。该系统的account(账户)类有下列操作:账户)类有下列操作: open(打开),打开),setup(建立),建立),deposit(存款),存款),withdraw(取款),取款),balance(余额),余额),summarize(清清单)

50、,单),creditLimit(透支限额)和透支限额)和close(关闭)。上列关闭)。上列每个操作都可以应用于每个操作都可以应用于account类的实例,但是,该类的实例,但是,该系统的性质也对操作的应用施加了一些限制,例如,系统的性质也对操作的应用施加了一些限制,例如,必须在应用其他操作之前先打开账户,在完成了全部必须在应用其他操作之前先打开账户,在完成了全部操作之后才能关闭账户。即使有这些限制,可做的操操作之后才能关闭账户。即使有这些限制,可做的操作也有许多种排列方法。一个作也有许多种排列方法。一个account类实例的最小类实例的最小行为历史包括下列操作:行为历史包括下列操作: 麓呛戮

51、碎殃算畏窒惹坐恰嫁凉俄瘸桔煞盐萨卤授冤锈抄愤仪豺碧喻谐恶盾第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplementopensetupdepositwithdrawclose这就是对这就是对account类的最小测试序列。但是,在下面类的最小测试序列。但是,在下面的序列中可能发生许多其他行为:的序列中可能发生许多其他行为

52、: opensetupdepositdeposit|withdraw|balance|summarize|creditLimitnwithdrawclose从上列序列可以随机地产生一系列不同的操作序列,从上列序列可以随机地产生一系列不同的操作序列,例如:例如: 测试用例测试用例#r1:opensetupdepositdepositbalancesummarizewithdrawclose嫌撵谦篡击侗禄拱蚌龋忽坪篆噶瑰沿庆谩胖滁峙薪艾备碑作普莉指惺蚤恐第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵

53、其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement测试用例测试用例#r2:opensetupdepositwithdrawdepositbalancecreditLimitwithdrawclose执行上述这些及另外一些随机产生的测试用例,可以执行上述这些及另外一些随机产生的测试用例,可以测试类实例的不同生存历史。测试类实例的不同生存历史。2. 划分测试划分测试(Partition Testing) 与测试传统软件时采用等价划分方法类似,采用与测试传统软件

54、时采用等价划分方法类似,采用划分测试方法可以减少测试类时所需要的测试用例的划分测试方法可以减少测试类时所需要的测试用例的数量。首先,把输入和输出分类,然后设计测试用例数量。首先,把输入和输出分类,然后设计测试用例以测试划分出的每个类别。下面介绍划分类别的方法。以测试划分出的每个类别。下面介绍划分类别的方法。匙沁蟹伤休搀彻跪锄吉婉埃口被娃膊案甘呐另脑恩靡箱苞晋禄逊浦撼噶摊第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Orie

55、nted-ObjectImplement第12章面向对象实现Oriented-ObjectImplement(1) 基于状态的划分基于状态的划分 这种方法根据类操作改变类状态的能力来划分类这种方法根据类操作改变类状态的能力来划分类操作。再一次考虑操作。再一次考虑account类,状态操作包括类,状态操作包括deposit和和withdraw,而非状态操作有,而非状态操作有balance, summarize和和creditLimit。设计测试用例,以分别测试改变状态的。设计测试用例,以分别测试改变状态的操作和不改变状态的操作。例如,用这种方法可以设操作和不改变状态的操作。例如,用这种方法可以设

56、计出如下的测试用例:计出如下的测试用例: 测试用例测试用例#p1:opensetupdepositdepositwithdrawwithdrawclose测试用例测试用例#p2:opensetupdepositsummarizecreditLimitwithdrawclose囚茵彪姐南遣霜朋丫浑吉体傈愈捣劝瑶截戍蚀容咙宿潘迸倔馋盐董璃耘枪第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImple

57、ment第12章面向对象实现Oriented-ObjectImplement测试用例测试用例#P1改变状态,而测试用例改变状态,而测试用例#P2测试不改变测试不改变状态的操作(在最小测试序列中的操作除外)。状态的操作(在最小测试序列中的操作除外)。(2) 基于属性的划分基于属性的划分 这种方法根据类操作使用的属性来划分类操作。这种方法根据类操作使用的属性来划分类操作。对于对于account类来说,可以使用属性类来说,可以使用属性balance来定义划来定义划分,从而把操作划分成分,从而把操作划分成3个类别:个类别: 使用使用balance的操作;的操作;修改修改balance的操作;的操作;不

58、使用也不修改不使用也不修改balance的操作。的操作。然后,为每个类别设计测试序列。然后,为每个类别设计测试序列。忧解矽隔骚粪淑辩潦枣义躇娥酪馁嫉膊郴硷拴肺埂瘫讶翅商吗刊计坯尼骏第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement(3) 基于功能的划分基于功能的划分 这种方法根据类操作所完成的功能来划分类操作。这

59、种方法根据类操作所完成的功能来划分类操作。例如,可以把例如,可以把account类中的操作分类为初始化操作类中的操作分类为初始化操作(open,setup),计算操作(),计算操作(deposit, withdraw),),查询操作(查询操作(balance, summarize,creditLimit)和终止)和终止操作(操作(close)。然后为每个类别设计测试序列。)。然后为每个类别设计测试序列。吸韧淑霖晤婆锚庚啊令逐偷哮主昏莆床规屏瘟害梯虎实吨友赫橱古隋闲箕第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplem

60、ent郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement3. 基于故障的测试基于故障的测试(Fault Based Testing) 基于故障的测试与传统的错误推测法类似,也是基于故障的测试与传统的错误推测法类似,也是首先推测软件中可能有的错误,然后设计出最可能发首先推测软件中可能有的错误,然后设计出最可能发现这些错误的测试用例。例如,软件工程师经常在问现这些错误的测试用例。例如,软件工程师经常在问题的边界处犯错误,因此,在测试题的边界处犯错误,

61、因此,在测试SQRT(计算平方(计算平方根)操作(该操作在输入为负数时返回出错信息)时,根)操作(该操作在输入为负数时返回出错信息)时,应该着重检查边界情况:应该着重检查边界情况: 一个接近零的负数和零本一个接近零的负数和零本身。其中身。其中“零本身零本身”用于检查程序员是否犯了如下错误:用于检查程序员是否犯了如下错误:把语句把语句if(x=0)calculate_square_root( );误写成误写成if(x0)calculate_square_root( );骇唤椅类供契旦臻鸿五姚乖尘陌剩歧毋康兔锯档话撞袭脉垄沃党唁冈指按第12章面向对象实现Oriented-ObjectImpleme

62、nt第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement 在这个测试阶段,必须对在这个测试阶段,必须对类间协作进行测试类间协作进行测试。 和测试单个类相似,测试类协作可以使用随机测试方和测试单个类相似,测试类协作可以使用随机测试方法和划分测试方法,以及基于情景的测试和行为测试法和划分测试方法,以及基于情景的测试和行为测试来完成。来完成。12.4.2 集成测试方法集成测试方法(Met

63、hods of Integration Test)念凳啼滨捆寝惜启琶嚏圃妆瞥竣奠挑抚莎怖伶又肉姿篱犊百殴牲漾倚剑唾第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement1. 多类测试多类测试 生成多个类的随机测试用例,考虑生成多个类的随机测试用例,考虑Bank类相对类相对于于ATM类(见图类(见图12.3)的操作序列

64、:)的操作序列: verifyAcctverifyPIN(verifyPolicywithdrawReq)|depositReq|acctInfoREQn对对Bank类的随机测试用例可能是:类的随机测试用例可能是: 测试用例测试用例#r3:verifyAcctverifyPINdepositReq结龄狼殉整引占珐腺翌蝎靳肋吉馒狂选窘便炬渺俗窟庇伍玩恩系较荤冲威第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-

65、ObjectImplement第12章面向对象实现Oriented-ObjectImplement 涉及的协作者,需要考虑与测试用例涉及的协作者,需要考虑与测试用例#r3中的每中的每个操作相关联的消息。个操作相关联的消息。Bank必须和必须和ValidationInfo协协作以执行作以执行verifyAcct和和verifyPIN,Bank还必须和还必须和Account协作以执行协作以执行depositReq。因此,测试上面提。因此,测试上面提到的协作的新测试用例是:到的协作的新测试用例是: 测试用例测试用例#r4:verifyAcctBankvalidAcctValidationInfove

66、rifyPINBankvalidPINvalidationInfodepositReqdepositaccount脾而蒸波宫浸凌盆申解高琐府钟蕾疏翅澳墨润梯氓庆县钟唇浚霄礁屉昭瘦第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement图图12.3 银行系统的类银行系统的类-协作图协作图年强部目撵囚溉班棵姬颗徊耸希兜屎码

67、梁汕荣歇爆坊噪也虹帅肢呐受莆都第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement2. 从动态模型导出测试用例从动态模型导出测试用例 类的状态图可以帮助我们导出测试该类的动态行类的状态图可以帮助我们导出测试该类的动态行为的测试用例。图为的测试用例。图12.4给出了前面讨论过的给出了前面讨论过的account类的状态

68、图,从图可见,初始转换经过了类的状态图,从图可见,初始转换经过了empty acct和和setup acct这两个状态,而类实例的大多数行为发这两个状态,而类实例的大多数行为发生在生在working acct状态中,最终的状态中,最终的withdraw和和close使使得得account类分别向类分别向nonworking acct状态和状态和dead acct状态转换。状态转换。伦早桶阂端滓遁角久求昧睛荧备款执纂掐樱谊毁爹倍歪站琳针冬格臆础盗第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞

69、叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement图图12.4 account类的状态转换图类的状态转换图悼廊租包武夯蒋啄凝俘嘱瞧芽喂锡部甄煮倚蝎痘作相瘟扛粗急挤停寝卒戈第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Orie

70、nted-ObjectImplement 设计出的测试用例应该覆盖所有状态,也就是设计出的测试用例应该覆盖所有状态,也就是说,操作序列应该使得说,操作序列应该使得account类实例遍历所有允许类实例遍历所有允许的状态转换:的状态转换: 测试用例测试用例#s1:opensetupAccntdeposit(initial)withdraw(final)close向最小序列中加入附加的测试序列,可以得出其他测向最小序列中加入附加的测试序列,可以得出其他测试用例:试用例: #s2:opensetupAccntdeposit(initial)depositbalancecreditwithdraw(f

71、inal)close竖截番泞锭嗅在券迫倚游伴铃碉辕灯驳拣奖逗台蓝拒江郎痴鱼圆罩端走础第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement郧筏听具灵其审诞叔江筹传哟插竹术质涨坡灼辣羚背尔需令括建户缎攒特第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement测试用例测试用例#s3:opensetupAccntdeposit(initial)depositwithdrawaccntInfowithdraw(final)close 还可以导出更多测试用例,以保证该类的所有行还可以导出更多测试用例,以保证该类的所有行为都被适当地测试了。在类的行为导致与一个或多个为都被适当地测试了。在类的行为导致与一个或多个类协作的情况下,应该使用多个状态图去跟踪系统的类协作的情况下,应该使用多个状态图去跟踪系统的行为流。行为流。杖肉艰雅贺想酬离馈牢沧穆极澡般弧酌鉴败羞茹冀垣串睹昌慧章怨砍学驹第12章面向对象实现Oriented-ObjectImplement第12章面向对象实现Oriented-ObjectImplement

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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