面向对象的设计从面向对象的分析到设计,是一个模型逐渐扩充的过程面向对象的设计准则1模块化2信息隐藏3弱耦合如果两个对象之间的耦合通过消息连结实现,为交互耦合.应该尽量降低交互耦合,减少消息中参数个数.减少发送的消息数继承是泛化类和特殊类之间的耦合,他们之间的结合应该越紧密越好,派生类应该多继承父类的属性和服务4强内聚内聚指设计中使用的构件内各个元素,对目标的贡献程度服务内聚:一个服务应该完成且仅完成一个功能类内聚:一个类应该只有一个用途,不包括无用的属性或服务高度的一般-特殊内聚:5可重用尽量使用已有的类,考虑新类的重用性设计的启发式原则1设计结果清晰易懂,提高维护和重用的可能.用词一致使用已有的协议减少消息模式的数目避免模糊的定义2一般-特殊的深度应适当.一个中等规模的系统,继承的层数为5-9.继承应该与领域尝试保持一致.设计的启发式原则3设计简单的类,定义不超过1页避免过多的属性类的任务定义明确简化对象之间的合作关系不提供太多的服务,public不超过7如果简单的类太多,则形成”主题”设计的启发式原则4使用简单的协议,消息参数不超过35使用简单的服务,3-5行源代码.如果使用复杂的CASE语句,则可考虑采用一般-特殊结构分解6将变动的影响建到最小软件重用代码重用源代码剪贴源代码包含(#include)继承,而扩充设计结果重用将一个应用系统移植到另外一个平台分析结果重用系统需求未变,但体系结构发生改变可重用的软件成分项目计划成本估计体系结构需求模型和规格说明设计源代码用户文档和技术文档用户界面(可占到60%的代码)数据测试用例类的重用方式1实例重用根据类创建实例,完成功能2继承重用可以安全修改现有类而重用3多态重用对外接口一般化,降低复杂程度类的设计中,有一些操作会影响重用,如图形的处理,数据结构操作,外部设备操作,算法.这些操作可能会妨碍重用.C++中,可以将其定义为虚函数,由子类实现重用的效益重用,质量会更高.HP公司统计,新写代码4.1个错误/千行,68%的重用代码2个/千行生产率30%重用,可提高生成率25%成本系统分解系统分解为子系统,降低系统的复杂程度,有利于分工合作,也有利于对系统的理解和维护.子系统之间的交互方式1客户-供应商关系客户使用供应商的服务,了解其接口,而后者无需了解前者的接口2平等伙伴关系子系统间可以互相调用,交互更加复杂子系统的组织方式1层次组织,底层向上层提供服务封闭式:上层只能使用直接下层的服务开放式:上层可以使用多层的服务(减少了每层的服务,但破坏了信息隐藏)2块状组织,垂直分为独立\弱耦合子系统应用软件包人机对话控制窗口图形屏幕图形像素图形仿真软件包操作系统计算机硬件问题域子系统面向对象的设计,是对分析形成的问题域子系统进行完善和补充,增添\合并\分解类与对象,属性,服务,调整继承关系.调整需求重用已有的类选择可重用类,标出无用的属性和服务有该类派生出问题域的类标出可继承的属性和服务修改与问题域相关的关联把问题域类组合在一起(引入一个根类)增添一般化类,实现公共协议调整继承层次继承时可能会出现属性和方法重叠多实现一个类,没重用ATM系统结构设计数据管理子系统存储和检索对象的基本设施文件管理系统比较底层关系数据库系统开销大,不适合编程面向对象的数据库设计数据格式-文件系统列出每个类的属性表,规范成第一范式(无重复的列)为每个类存储一个文件测量性能和容量修改第一范式,以满足性能和容量要求设计数据格式-关系数据库系统列出每个类的属性表,规范成第三范式表(属性依赖于主键,不依赖于其他)定义一个数据库表测量性能和容量修改第三范式,以满足性能和容量要求设计相应的数据管理服务类中增加隐性的属性和服务,对象知道怎么存储自己文件系统:被存储的对象需要打开文件,定位到正确的记录,检索,更新还需要新增一个类ObjectServer,提供服务:通知对象保存自身,检索已存储的对象,已提供给其他子系统使用设计相应的数据管理服务关系数据库系统:被存储的对象知道访问哪些表,定位到正确的记录,检索,更新还需要新增一个类ObjectServer,提供服务:通知对象保存自身,检索已存储的对象,已提供给其他子系统使用ATM数据管理服务ATM系统中,数据存放于分行计算机,采用关系数据库系统。因为有并发事务,故由事务锁定帐户直到结束。帐户类对象实现存储。1帐户对象增加一个属性和服务,自己存储自己2或者,帐户对象接到“存储自己”消息后,向数据管理子系统发送消息,以便保存其状态增加一个数据管理类ObjectServer通知对象保存自身或保存状态检索已存储对象并使之复活