文档介绍:第十一章面向对象设计(Object-Oriented Design)
§1. OOD准则:优秀软件设计的一个重要特点是容易维护
回顾:SD准则包括模块化抽象
信息隐藏模块
对于 OOD有类似的准则:
1、模块= 对象
§1. OOD准则
过程抽象: 在SD中已讨论
数据抽象: Class即是一种抽象数据类型。外界无须知道实现方法,按照类规格说明(即协议)可以使用合法的操作符,利用这些操作对类实例中包含的数据进行操作。
参数抽象: 将数据类型作为参数处理。
2、抽象:抽出事物的本质特性, 暂不考虑其细节,使设计从具体实现方法中超脱。
§1. OOD准则
3、信息隐藏= 对象的封装
4、耦合:
交互耦合(interactive coupling):通过传递message发生要求降低参数个数和参数复杂性
减少objects发送\ 接收message的个数
as loose as possible
继承耦合(inheritance coupling):
要求 Parent class IS_A child class as high as possible
§1. OOD准则
一般-特殊内聚(general-particular cohesion):
High g-p cohesion High inheritance coupling
5、内聚:
服务内聚(service cohesion):一个服务只完成一个功能。
类内聚(class cohesion):一个类只有一个用途,否则分解之。
6、可重用(Reusability)(详见§3)
尽量使用已有的类
设计新类时考虑将来的可重复使用性
§2. 启发式规则
1、设计结果清晰易懂,应做到:
①用词一致——按习惯用法命名。不同classes中相似的methods最好取同一名字。
②使用已有的协议。
③尽量减少message模式的数目。
④避免模糊定义。
2、一般-特殊结构的深度应适当(约100个classes,则设计7±2层)
§2. 启发式规则
3、设计简单的class(定义不超过一页纸或两屏)。应注意:
①避免过多attributes;
②能用简单的语句描述一个class的任务;
③ objects之间合作关系要简单;
④避免过多methods( 7个)。
问题:设计出大量的classes,使结构复杂度增加。
解决:划分主题,提高可理解性。
4、使用简单的protocol,减少message 中传递的 parameters
5、使用简单的method(CASE 可考虑用 inheritance替代)。
6、把设计变动减至最小。
1、概念:
知识重用(例如软件工程知识的重用)
方法和标准重用(例如OO方法和国家规定的软件开发规范的重用)
软件成分的重用
§3. 软件重用(Software Reuse)
知识工程
源码剪贴——无法溯源,无配置管理
Include ——修改后所有包含了此段代码的程序都须重新编译。
Inheritance ——无须改动原有代码
想象一下, 被改动之后……
重用软件成分有三个级别:
①代码重用:
§3. 软件重用
②设计重用——当移植系统时
③分析重用——当需求未变,而系统结构改变时
2、重用效果的衡量:
⑴额外代价: 创建可重用成分的专门投资 多花2 ~ 4倍时间测试以保证质量 构件库的建立与维护需要投资 以上投资将分摊到重用这些构件的新系统成本中。重用次数越多,分摊成本越少。
§3. 软件重用
记:Lt = Total length of code ( # of lines) Ln = Length of new code Lr = Length of reused code Et 、En、 Er are the corresponding efforts ( # of m-d)
⑵重用率(Reusability)与生产率(Productivity)
Productivity
Reusability =
开发代码的生产率
重用新代码的生产率
§3. 软件重用
⑶重用技术:指利用可重用的构件开发软件的技术,及开发可重用软件的技术。
①软件组合技术:
底层部件库法(Bottom-positional reuse) :从可重用的代码部件库(reuse repository)中选用部件,组合成软件。
A:是,<Cr ,即重用比新开发效率高。
Q:是否R 越高P就越高?
上层组合法:完整程序的组合