第11章面向对象设计分析模型=设计模型WhatHow设计编码信息描述功能描述行为描述其它需求数据设计过程设计总体结构设计软件需求规格说明书软件设计规格说明书•在软件分析模型中的需求信息(数据、功能和行为)基础上,产生软件系统各个层次上的设计方案•用用例例对对象象--关关系系模模型型CCRRCC索索引引卡卡片片属属性性、、子系统设计类及对象设计消息设计责任设计操操作作、、协协作作者者对对象象--行行为为模模型型类类//对对象象模模型型软件设计的任务从管理和技术两个不同角度对设计的认识管理角度:概要设计;详细设计管理角度:数据设计、系统结构设计、过程设计面向对象的设计方法•面向对象设计是将面向对象分析所创建的分析模型进一步细化形成软件设计模型的过程。如果说,分析模型描述了系统需要完成的功能,在设计阶段则描述了如何实现分析阶段所定义的软件功能。11.1面向对象设计的概念•面向对象分析的任务是解决系统“做什么”的问题。而在面向对象设计阶段则着重完成“如何做”的问题,也就是着重考虑对象的实现细节。11.1.1对象、操作和消息•在面向对象的设计过程中,数据结构和对数据结构的操作被封装到了对象里,因此对象成了面向对象设计的基本单位,对象之间通过消息进行连接。11.2面向对象设计(OOD)Object-OrientedDesign从分析过渡到设计面象对象的设计(OOD)仍然采用面向对象分析所采用的模型,所不同的是它现在更加面向用户和计算机系统,从四个不同的侧面继续演化OOA阶段所生成的分析结果。从分析过渡到设计,分析阶段所遵循的一些原则毫无疑问也将被继承下来,这些原则包括:抽象原则、封装原则、继承原则、分类原则、聚合原则、关联原则、消息通信原则、粒度控制原则、行为分析原则等。••OOOODD模模型型与与OOOOAA模模型型之之间间并并无无明明显显区区别别,,只只是是加加进进实实现现考考虑虑••面面向向对对象象设设计计继继续续做做面面向向对对象象分分析析阶阶段段的的工工作作,,建建立立软软件件的的结结构构。。••主主要要工工作作分分为为两两个个阶阶段段::––高高层层设设计计––类类设设计计1、高层设计(概要设计)–高层设计阶段开发系统的结构,即构造应用软件的总体模型。–高层设计阶段标识在计算机环境中进行问题解决工作所需要的概念,并增加了一批需要的类。–这些类包括那些可使应用软件与系统的外部世界交互的类。–此阶段的输出是适合应用要求的类、类间的关系、应用的子系统视图规格说明。•主体部件设计应遵循的原则–使在子系统的各个高层部件之间的通信量达到最小;–子系统应当把那些成组的类打包,形成高度的内聚;–逻辑功能分组,提供一个逻辑功能一个单元,识别并定位问题事件。2、类的设计(详细设计)–应用分析过程包括了对问题论域所需的类的模型化。–但在最终实现应用时不只有这些类,还需要追加一些类。–在类设计的过程中应当做这些工作。类类与与具具有有概概念念封封装装的的子子系系统统十十分分类类似似。。每每个个子子系系统统都都可可以以被被当当做做一一个个类类来来实实现现,,这这个个类类聚聚集集它它的的部部件件,,提提供供了了一一组组操操作作。。类类和和子子系系统统的的结结构构是是正正交交的的,,一一个个单单个个类类的的实实例例可可能能是是不不止止一一个个子子系系统统的的一一部部分分。。高高层层设设计计和和类类设设计计这这两两个个阶阶段段是是相相对对封封闭闭的的,,又又是是相相互互连连接接的的。。11.2面向对象的设计方法•面向对象设计–主体部件设计(PDC:高层设计)–用户界面部件设计(HIC)–任务管理部件设计(TMC)–数据管理部件设计(DMC)•基于对象的设计方法•11.3类的设计(详细设计)•类的设计与实现–类的规格说明指导对存放现存类的软件库进行查找。–现存类提供当前应用所需功能。–三种可能利用现存类的方向:•现存类的复用•从现存类进行演变•从废弃类进行开发OOD导出的系统结构类的规格说明从废弃型开发既存类的复用渐增式的实现渐增式的测试求精和维护测试用例和测试的开发实现从既存类演变一.问题域部分的设计OOA的模型直接放到OOD的问题域部,OOD阶段对OOA结果进行改动和增补。根据需求变化,对OOA产生模型的类与对象、结构、属性、操作进行组合与分解,增加必要的类、属性和关系。对OOA结果加以增补要考虑的因素:重用设计把问题域专用类组合在一起通过增添一般类而建立协议调整继承的支持级别改进性能增加低层的类和对象调整继承的支持级别如OOA的一般/特殊结构包括多继承,在使用只有单继承或无继承性的编程语言时,需对OOA的的结果进行修改。二.人机交互部分的设计虽然好的人机交互部分不可能挽救一个功能很差的软件,但性能很差的人机交互部分将使一个功能很强的产品变的不可接受!三.任务管理部分的设计1.为什么要有任务管理部分系统中有许多并发行为时,需要按照各个行为的协调和通信关系,划分各种任务(进程),简化并发行为的设计和编码。根据动态模型分析、定义并发性;选择软件实现的控制方法。2.怎样设计任务管理部分任务管理主要包括任务的选择和调整识别事件驱动任务识别时钟驱动任务数据管理其它系统文件RDBMSOODBMS设备系统交互界面问题域人机交互界面…..…..…..…..窗口报告识别优先任务和关键任务识别协调者审查每个任务定义每个任务四.数据管理部分的设计数据管理部分提供了数据在数据管理系统中存储和检索对象的基本结构,它分离了数据管理方案的影响(不管该方案是普通文件、关系型数据库、面向对象数据库或其它方式.)2.如何设计数据管理部分(1)数据存放方法设计采用普通文件数据管理采用关系数据库管理采用面向对象数据库管理(2)相应服务的设计为每个需存储其对象的类增加一个属性和服务OOD应遵循的原则•结构化方法中软件设计的基本原理在进行面向对象设计时仍然成立,但是增加了一些与面向对象方法密切相关的新特点,从而具体化为面向对象设计准则。•准则:1.模块化2.抽象3.信息隐藏4.弱耦合5.强内聚6.可重用耦合–两个成分之间的耦合程度或强度,可以由成分之间的信息传输的数量和复杂性来度量。在一个OOD中,有两类情况:–由消息连接表示的两个对象之间的交互耦合–一般类和特殊类之间的继承耦合。交互耦合:低度交互耦合是理想的。基本准则是:–(1)把消息连接的复杂性保持到尽可能低的程度。一般来说,如果一个消息连接涉及三个以上的参数,就考虑是否可以把它简化。当然三个参数决不是绝对的上限,不过实践经验告诉我们,通过过分复杂的消息相连接的对象是紧密耦合的;对其中一个对象作了改动总是要引发波及到其它对象的“波动效应”。–(2)除了降低单个消息连接的复杂性,还应该减少由一个对象发送和接收的消息的数目。–(3)避免“消息穿越”:对象A简单把把从P接收的消息直接传给Q,并不使用此消息中的任何信息,也不直接对它做出反应。这种设计是高度可疑的。继承耦合:高度的继承是理想的。继承是我们在OOD中力求达到的一种在一般类和特殊类之间的耦合形式–一个类通过它所继承的属性和服务而与它的一般类耦合。–为了在系统中达到高度的继承耦合,每个特殊类应该真正是其一般类的一个特殊类。它应该设定严格定义的职责;同时,这也意味着它不应该有许多无关的、不必要的“水分”。继承耦合:如果一个类出现以下两种情况:–(1)一个类明显地拒绝了它的一般类中的许多属性和服务,它和它的一般类之间就不是强耦合的。–(2)特殊类从它的一般类中继承了许多属性,但是完全没有使用它们。在这样两种情况下设计者都应寻找另外的一般-特殊结构,使每个特殊类都继承并使用其一般类中的属性和服务,使之高耦合。(四)弱耦合–降低交互耦合•1.尽量降低消息连接的复杂程度。应该尽量减少消息中包含的参数个数,降低参数的复杂程度。•2.减少对象发送(或接收)的消息数。–提高继承耦合(五)强内聚–服务内聚–类内聚–一般-特殊内聚内聚–在OOD中内聚表示一组OOD成分相互关系的紧密程度。存在以下几种内聚:服务内聚、类内聚、一般-特殊内聚。–服务内聚:一个服务应该实现一个并且只实现一个功能。一个服务如果实现多项功能,或者只实现一个功能的部分,则这个服务是不理想。–类内聚:属性和服务应该是高内聚-没有多余的(无用的)属性,没有多余的(无用的)服务,而且全部是描述类的对象责任的。–一般-特殊内聚:第三种内聚是一般-特殊内聚。在面向对象设计中,从三个层次来考察内聚性。1.单个方法的内聚性:方法是指操作的实现过程,一个操作由一个或多个方法实现。对方法的内聚性的评价与结构化设计中的相同,具有高内聚的方法应当只执行一个功能。2.类的内聚性:设计类的原则是,一个类应该只有一个用途,类中的属性和操作应该全都是完成该类的任务所必需的,其中不包括无用的属性和操作。如果某个类有多个用途,通常应该把它分解成多个专用的类。3.层次结构的内聚性:对象之间通过继承关系而构成的层次结构,特殊类应该确实是对它的一般化类的一种具体化。如果一个派生类摒弃了它基类的许多属性和服务,那就是一个低内聚的。(六)可重用–尽量使用已有的类•包括开发环境提供的类库,以及以往开发类似系统是创建的类–创建新类时,考虑将来的可重用性第十一章面向对象设计设计用例实现方案设计技术支撑方案设计用户界面精化设计模型面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。为了完成这些转换设计人员必须处理好下列问题:(1)针对分析模型中的用例,设计实现方案,实现方案用UML交互图表示(2)设计技术支撑设施(3)设计用户界面(4)针对分析模型中的领域概念模型以及第(2)、(3)两步引用的的新类,完整、精确地确定每个类的属性和操作,并完整地标示类之间的关系。设计用例实现方案UML的交互图(顺序图、协作图)适于用例实现方案的表示。设计方法包含三步:(1)提取边界类、实体类和控制类(2)构造交互图(3)根据交互图精化类图•11.2设计技术支撑方案–技术支撑方案应该为多个用例的软件实现提供技术服务,所以,它应该成为整个目标软件系统中全局性的公共技术平台。–数据持久存储服务–并行与同步控制服务–技术支撑方案与用例实现方案的融合•11.3设计用户界面需求分析和软件设计阶段都必须考虑人机交互问题。在需求分析阶段要确定人机交互的属性和外部服务,而在设计阶段要给出有关人机交互的所有系统成份,包括用户如何操作系统、系统如何响应命令和系统显示信息的报表格式等。用户界面设计策略与步骤如下:(1)熟悉用户并对用户分类(2)按用户类别分析用户的工作流程和习惯(3)设计命令系统并进行优化(4)设计用户界面的各种细节(5)增加用户界面专用的类与对象(6)利用快速原型法改进界面设计•11.4精化设计模型对设计模型精化需要考虑以下任务:(1)以顶层架构图为基础,精化目标软件系统的体系结构;(2)精化类之间的关系;(3)精化类的属性和操作;(4)针对具有明显状态转换特征的类,设计状态图;(5)针对比较复杂的类图方法,设计活动图。面向对象设计•面向对象设计–设计原则:模块化、内聚、耦合、复用•系统设计–识别设计元素、数据存储策略、部署子系统•对象设计–方法建模、属性建模、状态建模、关系建模•数据库设计–将对象映射到关系数据库•用户界面设计–设计原则、交互方式、信息表示、用户支持