《面向对象的设计方法.ppt》由会员分享,可在线阅读,更多相关《面向对象的设计方法.ppt(61页珍藏版)》请在三一办公上搜索。
1、2023/8/29,安徽工程科技学院计算机系,1,第十章 面向对象的设计方法,设计用例实现方案设计技术支撑方案设计用户界面精化设计模型,2023/8/29,安徽工程科技学院计算机系,2,面向对象的设计方法,采用基于UML的面向对象设计方法将分析模型转换为设计模型。面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成。设计模型则包含以包图表示的软件体系结构图,以交互图表示的用例实现图,完整、精确的类图,以及针对复杂对象的状态图、用以描述流程化处理过程的活动图等。,第十章 面向对象的设计方法,2023/8/29,安徽工程科技学院计算机系,3,面向对象的设计方法,处理转换过程的任务(1
2、)针对分析模型用例,设计用UML交互图表示的实现方案。(2)设计技术支撑设施。在大型软件项目中,往往需要一些技术支撑设施来帮助业务需求层面的类或子系统完成其功能。这些设施本身并非业务需求的一部分,但却为多种业务需求的实现提供公共服务。,第十章 面向对象的设计方法,2023/8/29,安徽工程科技学院计算机系,4,面向对象的设计方法,(3)设计用户界面。(4)针对分析模型中的领域概念模型,以及第(2)、第(3)两个步骤引进的新类,完整、精确地确定每个类的属性、操作,完整地标示类之间的关系。,第十章 面向对象的设计方法,2023/8/29,安徽工程科技学院计算机系,5,面向对象的软件设计过程,第十
3、章 面向对象的设计方法,2023/8/29,安徽工程科技学院计算机系,6,10.1 设计用例实现方案,本节介绍UML交互图的语言机制和用例实现方案的设计方法。UML的交互图包括顺序图和协作图,适于用例实现方案的表示。用例实现方案的设计方法有三个步骤:(1)提取边界类、实体类和控制类;(2)构造交互图;(3)根据交互图精化类图。,第十章 面向对象的设计方法,2023/8/29,安徽工程科技学院计算机系,7,10.1.1 顺序图,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,8,UML四种类型的消息,(1)简单消息(Simple Message)以一种简单、抽象的函数表示
4、对象之间的信息传递,不考虑通信过程的内部细节。简单消息在UML顺序图中用普通的有向箭头表示。(2)同步消息(Synchronous Message)消息源发出消息后必须等待消息处理过程完毕并返回处理结果后,消息源才可继续执行后续操作。前面所述的自调用消息应该是同步的。同步消息的表示图元与简单消息相同,这表明UML在缺省情形下认为简单消息即为同步消息。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,9,UML四种类型的消息,(3)异步消息(Asynchronous Message)表示,消息源发出消息后不必等待消息处理过程的返回,即可继续执行自己的后续操作。异步消息主要
5、用于描述实时系统中的并发行为。异步消息在UML顺序图中用一种特别的单向箭头表示。(4)返回消息(Return message)表示前面发送的消息的处理过程完结之后的返回结果。返回消息应该是同步的。在许多情况下,可以隐藏返回消息,但也可显式标出返回消息以示强调。返回消息用虚线有向箭头表示.,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,10,10.1.2 协作图,协作图用于描述相互合作的对象间的交互关系和链接关系。虽然顺序图和协作图都用来描述对象间的交互关系,但它们的侧重点不一样。顺序图强调消息交互的时间序,协作图则强调交互对象间的静态链接关系。,10.1设计用例实现方
6、案,2023/8/29,安徽工程科技学院计算机系,11,协作图,虽然协作图不强调消息传递的时间序,但借助于序列号可以表达时间序,序列号较大的消息发生较晚。消息序列号可以采用线性编号,但采用适当的多级编号会使消息之间的结构关系更清晰。如果一个对象在消息的交互过程中被创建,则可在对象名称之后标以new。类似地,如果一个对象在交互期间被删除,则可在对象名称之后标以destroy。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,12,典型的协作图,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,13,协作图的两种等价表示,10.1设计用例实现方案,20
7、23/8/29,安徽工程科技学院计算机系,14,10.1.3 提取边界类、实体类和控制类,边界类描述目标软件系统与外部环境的交互,主要任务:(1)界面控制:包括输入数据的格式及内容转换,输出结果的呈现,软件运行过程中界面的变化与切换等。(2)外部接口:实现目标软件系统与外部系统或外部设备之间的信息交流和互操作。主要关注跨越目标软件系统边界的通信协议。(3)环境隔离:将目标软件系统与操作系统、数据库管理系统、应用服务器中间件等环境软件进行交互的功能与特性封装于边界类之中,使目标软件系统的其余部分尽可能地独立于环境软件。在UML类图中,边界类往往附加UML构造型boundary作为特别标识。,10
8、.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,15,提取边界类、实体类和控制类,例如,“家庭保安系统”中的边界类有“输入键盘接口类”、“传感器接口类”、“警报器接口类”、“报警电话接口类”和“显示面板接口类”。实体类表示目标软件系统中具有持久意义的信息项及其操作。实体类的操作具有“内向收敛”特征,它们仅向目标软件系统的其余部分提供读、写信息项内容的必要的操作接口,并不涉及业务逻辑处理。实体类的UML构造型为entity。例如,“家庭保安系统”中的“异常事件”为实体类。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,16,提取边界类、实体类和控制类
9、,控制类作为完成用例任务的责任承担者,协调、控制其他类共同完成用例规定的功能或行为。对于比较复杂的用例,控制类通常并不处理具体的任务细节,但是它应知道如何分解任务,如何将子任务分派给适当的辅助类,如何在辅助类之间进行消息传递和协调。控制类的UML构造型为control。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,17,提取边界类、实体类和控制类,实体类源于领域概念模型。有时也需要认真研读用例描述,从中发掘具有持久意义的信息项。如果执行者的属性需要持久保存,也可以建立相应于执行者的实体类。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,18
10、,提取边界类、实体类和控制类,一个用例通常对应一个控制类。如果不同用例的任务有较多类似之处,也可以考虑在多个用例的实现方案中共享同一控制类,此种情况应审慎对待,不同用例所需要的控制、协调行为往往会有差异。对于那些事件流非常简单的用例,可以不设独立的控制类,直接在边界类中设置控制、协调功能,边界类在实体类的帮助下完成用例要求的功能及行为。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,19,10.1.4 构造交互图,在标识边界类、实体类和控制类之后,接下来的任务是,将分析模型中的用例描述转化成UML交互图,以交互图作为用例的精确实现方案。用例描述中已包含事件流说明。事件
11、流中的事件应直接对应于交互图中的消息,而事件间的先后关系体现为交互图中的时序,对消息的响应则构成消息接收者的职责。这种职责在后续的设计活动中将被确立为类的方法。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,20,构造交互图,对于比较复杂的用例,仅仅依靠控制类、边界类和实体类会使单个控制类过于庞大、复杂,它既承担控制、协调的任务,又承担复杂的计算任务。在设计复杂用例的实施方案时,应考虑为控制类设置一些独立的辅助类,让控制类将一些任务委托给辅助类完成。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,21,构造交互图,UML顺序图的横向排列次序用
12、例的主动执行者 用户界面的边界类 控制类 实体类和辅助类 外部接口和环境隔离层的边界类目标软件系统的边界之外的被动执行者,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,22,构造交互图,控制类或辅助类可以向右侧的边界类发送消息,将信息或外部处理请求由边界类传向外部系统(被动执行者)。在用例描述中,许多用例除主事件流外,往往还包含备选事件流,以说明在某些特殊或者异常情况下的事件和响应动作序列。为易于理解,在设计模型中应该用分离的UML交互图分别表示事件流和每个备选事件流。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,23,典型布局规则下的顺序
13、图,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,24,构造协作图,由于顺序图能够非常直观地表达事件(消息)的时序,所以它比协作图更多地用于描述用例的实现方案。但是,当需要强调类之间的联系或连接时,就需要绘制协作图。协作图的布局规则控制类位于中心主动执行者和作为用户界面的边界类位于左上方作为外部接口和环境隔离层的边界类位于右上方辅助类和实体类分别位于控制类的左下、右下方。按照此布局规则绘制的典型的协作图如图10.5所示。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,25,典型布局规则下的协作图,10.1设计用例实现方案,2023/8/29,
14、安徽工程科技学院计算机系,26,10.1.5 精化类图,在UML交互图中,对每个类的对象都规定了它必须响应的消息以及类的对象之间的消息传递通道。前者对应于类的操作,后者则对应于类之间的连接关系。因此,可以利用交互图精化分析模型中的类图,将交互图中出现的新类添加到原有类图中,并且对相关的类进行精化,定义其属性和操作。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,27,精化类图,类的操作完成消息响应责任的能力,来源于两方面的知识,一是类本身具有的信息,即类的属性,二是类能够找到的其他类,通过其他类协助其完成消息响应。在综合考虑这两个因素之后,类的操作应该明确哪些子任务可
15、通过消息传递路径委托给其他类完成,哪些子任务必须由自身完成。根据后一种子任务的需要,结合领域和业务知识即可推导出类应具有的属性。,10.1设计用例实现方案,2023/8/29,安徽工程科技学院计算机系,28,10.2 设计技术支撑方案,在许多软件项目中,应用功能往往都需要一组技术支撑机制为其提供服务。这些技术支撑设施并非业务需求的直接组成部分,但形态各异的业务处理功能全都有赖于它们提供的公共技术服务。,第十章 面向对象的设计方法,2023/8/29,安徽工程科技学院计算机系,29,设计技术支撑方案,技术支撑方案的设计取决于目标软件系统对公共技术服务的需求设计人员对软件技术手段的把握和选取,10
16、.2设计技术支撑方案,2023/8/29,安徽工程科技学院计算机系,30,10.2.1 数据持久存储服务,设计数据持久存储服务的目的是,将目标软件系统中依赖于系统运行环境的数据存取部分与其他部分分离。,10.2设计技术支撑方案,2023/8/29,安徽工程科技学院计算机系,31,10.2.2 并发与同步控制服务,并发与同步控制服务提供的功能包括:(1)进程/线程的定义与启动;(2)进程/线程的终止;(3)进程/线程的状态查询;(4)同步点的设置及进程/线程在同步点的信息交换,等。这些功能应封装在服务类之中。,10.2设计技术支撑方案,2023/8/29,安徽工程科技学院计算机系,32,10.3
17、 设计用户界面,需求分析和软件设计阶段都必须考虑人机交互问题。需求分析阶段要确定人机交互的 属性和外部服务设计阶段要给出有关人机交互的所有系统成份,包括:用户如何操作 系统、系统如何响应命令、系统显示信息的报表格式等。,第十章 面向对象的设计方法,2023/8/29,安徽工程科技学院计算机系,33,10.4 精化设计模型,经过前面的分析和设计步骤,设计模型已相当丰富,包含了较完整的静态结构模型(顶层架构图、类图)和动态行为模型(交互图)。现在有必要对这些模型再进行分析、优化,以生成高质量的设计模型,为后续的实现阶段奠定坚实基础。,第十章 面向对象的设计方法,2023/8/29,安徽工程科技学院
18、计算机系,34,精化设计模型,设计模型精化的任务(1)以顶层架构图为基础,精化目标软件系统的体系结构。(2)精化类之间的关系。(3)精化类的属性和操作。(4)针对具有明显状态转换特征的类,设计状态图。(5)针对比较复杂的类方法,设计活动图。本节首先介绍UML状态图,然后依次介绍完成上述任务的方法。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,35,10.4.1 状态图,状态图用来描述一个特定类的对象的所有可能状态以及因事件而引起的状态转移。状态图的结点包含状态名和活动(activity)两部分内容。活动是可选的,它们又分为四种:(1)entry活动:一旦对象进入该状态,
19、相应的活动被触发执行。(2)exit活动:一旦对象离开该状态,相应的活动被触发执行。(3)do活动:当对象位于该状态时,执行相应的活动,对象的状态不变。(4)on-event活动:当对象位于该状态并且接收到某一事件后,执行相应的事件响应活动。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,36,状态图,在状态图的状态转移边上可以附加以下信息:事件名(事件参数表)条件表达式/动作 事件目标.事件名(事件参数表)。第一个事件是引发对象状态变迁的触发事件;条件表达式表示此转移边所代表的状态迁移的发生条件;动作表示对象在进行状态迁移的同时还将执行的处理功能;最后一个事件表示对象在
20、进行状态迁移时还可以向其他对象发送事件。所有上述语法成分都是可选项。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,37,状态图,一张状态图可以包含一个初态,一到多个终态。基本的UML状态图见图6.5。UML的状态图是一种结构化的状态图,即,其状态可以进一步细分为多个子状态,子状态之间可以拥有“and”、“or”两种关系。对象处于复合状态s1 and s2 当且仅当对象既处于子状态s1,又处于子状态s2;对象处于复合状态s1 or s2 当且仅当对象既处于子状态s1或者处于子状态s2。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,38,状态图,带有
21、复合状态的UML状态图见图10.9。图中,“active”状态是由“process”和“auth”两个子状态经过and合成构成的复合状态在“active”的任一子状态上,如果发生了“cancel”事件,对象将进入“Cancelled”状态。在“Authorizing”状态下,如果权限验证失败,则立即进入“Rejected”状态。在对象到达“active”状态的两个and子状态的终态“Dispatching”和“Authorized”并执行完这些状态中的活动(图10.9中未标出)之后,对象进入“Delivered”状态。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,39,
22、图10.9 带复合状态的UML状态图,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,40,10.4.2 精化体系结构,精化体系结构的目的是,寻找一种包的划分方案,使得每个包直接包含的类的数量适中,包的边界清晰、自然,并且包间的耦合度较低。在包图中,包间耦合度取决于包间依赖关系,而依赖关系又取决于分属于两个包的类之间的关系。类之间的耦合程度(从高到低)排列:(1)继承关系。(2)构成关系。(3)聚合关系。(4)关联关系。(5)依赖关系。(6)两个类的对象受同一执行者变化的影响。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,41,精化体系结构,在分析过
23、程中,用包图表示了目标软件系统的顶层架构。随着分析和设计不断深入,原有包图中的包可能包含了过多的类,此时需要对其进行分拆。按照软件工程“强内聚、松耦合”的原则,这种分拆应该具有某种自然划分的性质,并且尽可能降低划分以后的子包之间的耦合度。如果拟将包P拆分成子包P1和P2,但包P中的类C与包P1和包P2中的类都存在相当密切的联系,那么可以考虑将C根据包P1和包P2的自然特征划分成两个类C1和C2,C1置入P1,C2置入P2,此后P1和P2形成松耦合关系。如果对C的分拆难以进行,那就要考虑将C移入较低层次的另一个包Q中,让P1、P2均依赖于Q。弱化包间耦合的另一方法是调整类的摆放位置,将它们从一个
24、包移至另一更合适的包。有时也可以考虑适当地合并一些包,甚至不排除将数个包合并后再重新划分,最终达到“强内聚、松耦合”的目标。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,42,精化体系结构,完全排除包间的依赖关系既无必要,也不合理。但是以下原则要尽量遵守:(1)避免包间的循环依赖关系,即,排除包P1依赖于包P2、P2又依赖于P1的情形(2)在层次结构中,位于较低层次的通用包不应当依赖于较高层次中的专用包。(3)在层次结构中,较高层次的包可以依赖于较低层次的包,但此种依赖应尽量在相邻的层次间发生。(4)如果针对某些子系统专门划分了接口包和实现包,那么,其他与该子系统相关的
25、包只能依赖于接口包,不能依赖于实现包。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,43,10.4.3 精化类之间的关系,本步骤的任务是在前面已获得的类图的基础上,详细研究类之间的连接关系:(1)根据这些连接的语义强度将它们精确地判定为UML的依赖、关联、聚合或构成关系之一;(2)确定连接的方向及参与连接的类的对象之间的数量对应关系;(3)根据软件重用的要求及软件结构简洁化、清晰化的要求优化类之间的关系。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,44,精化类之间的关系,前面确立的类之间的连接关系主要是在类的对象之间构筑消息传递通道。为了在对象
26、obj1与对象obj2之间实现消息传递,面向对象的程序设计机制提供四种手段:(1)引用全局对象。(2)通过参数传递。(3)引用局部对象。(4)通过类的成员变量。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,45,精化类之间的关系,前三种类型的连接具有暂时性,obj1与obj2之间的连接仅在obj1的某项操作的执行过程中建立,操作完成后连接即告终结。这种暂时性连接用UML的依赖关系表示。对最后一种具有稳定性的连接关系,需要进一步分析。如果参与连接的两个类在现实世界中存在“皮之不存,毛将焉附”型的部分整体关系,则用UML的构成关系表示。否则,如果它们在现实世界中仍存在“多个
27、整体对象可共享同一部件对象”的部分整体关系,则用UML的普通聚合关系表示。如果以上两种假设均不成立,则原连接关系精化成UML中普通的关联关系。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,46,图10.10 UML关联类,在某些情况下,系统需要表示关联关系本身具有的属性和操作,将这些属性或操作置放于参与关联的两个类之任何一个均会破坏设计模型的自然性。此时需要使用UML的关联类,如图10.10所示。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,47,关联类的精化设计,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,48,关联类的
28、精化设计,UML的依赖、聚合和构成关系的方向性是非常明显的。对UML的关联关系,设计人员要仔细推敲双向关联的必要性,尽量将关联单向化,仅保留确有必要的双向关联。因为,单向关联更简单、实现代价更小。对于UML的关联、聚合和构成关系,需进一步考虑参与关联的类的对象之间的数量对应关系以及双方对象在关联中扮演的角色,如图10.10和图10.11所示。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,49,关联类的精化设计,在精化类之间的关系时,往往需要考虑到软件重用的需要而对类结构进行调整:(1)如果允许修改被重用的类,那么可以将被重用的类与当前设计模型中的类的共同属性和共同操作抽
29、取至公共父类,然后适当调整两个子类的定义。如图10.12所示。(2)否则,可以采用“委托”的办法,在拟重用的类和被重用的类之间建立单向关联关系。如此,拟重用的类即可通过关联关系使用被重用的类的属性和操作。如图10.13所示。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,50,为实现软件重用而调整类结构,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,51,图10.13 采用委托法实现软件重用,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,52,精化继承关系,考虑利用继承关系精化设计模型。可以从已有的类出发,寻找某些类之间的公共属
30、性和操作,引进新的父类捕获公共性,从而简化设计模型;也可以在一定范围内按照某种准则将所有的类划分为数个集合,针对每个集合的特性设计一个父类,让集合中的所有类成为该父类的子类,这样就通过引入新父类达到了分组管理相关类的目的。此外,如果设计模型中出现了多重继承,而目标软件系统拟采用的程序设计语言不支持多重继承,那就应该将多重继承化解为单重继承,化解方法如图10.14所示。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,53,图10.14 将多重继承化解为单重继承,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,54,类的精化,根据“强内聚、松耦合”、简单性
31、、自然性等软件工程原则,对类之间的结构关系可以进行如下优化:(1)合并相互通信频繁的类。(2)分拆规模过大的类。(3)定义嵌入类。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,55,10.4.4 精化类的属性和操作,对于类的每项属性,在设计模型中,可以定义属性的名称、类型、初始值、取值范围及属性说明,后三项内容是可选的。操作的基本内容包括名称、参数表(含参数的名称和类型)、返回类型、功能描述。如果操作比较复杂,还需要用文字或UML活动图说明操作的实现算法。属性和操作的作用范围有以下三种:(1)public:对软件系统中的所有类均可见。(2)protected:仅对本类及
32、其子类可见。(3)private:仅对本类可见。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,56,精化类的属性和操作,类的属性和操作还可区分为类级和实例级两种。类级的属性和操作为该类的所有实例对象所共享,它们在系统运行期间仅有单份拷贝。实例级的属性和操作则在类的每个实例对象中拥有一份独立拷贝,这些拷贝之间互不影响。在业务逻辑处理过程中,要特别注意导出属性值容易失效的问题。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,57,2023/8/29,安徽工程科技学院计算机系,58,10.4.5 设计状态图,状态图适于表示跨越多个用例的单个对象的行为。在
33、面向对象的设计过程中,并不需要对所有类的对象都绘制状态图,只要针对具有明显的状态特征、并且具有比较复杂的状态-事件-响应行为的类设计状态图即可。在“家庭保安系统”中,“监测器”类的对象具有比较明显的状态特征,其状态图表示如图10.16所示。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,59,图10.16“监测器”对象的状态图,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,60,10.4.6 设计活动图,活动图适于表示用例中的事件流和过程,也可以用来表示复杂的算法以及并发处理进程。在面向对象的详细设计过程中,并不需要对所有类的方法都绘制活动图,只要针对具有比较复杂的处理过程、并且比较重要的方法设计活动图即可。此外,如果需要强调处理过程中并行性,应该使用活动图。,10.4精化设计模型,2023/8/29,安徽工程科技学院计算机系,61,小结,本章主要介绍了基于UML的面向对象的软件设计方法。其主要步骤包括:针对分析模型中的用例设计实现方案并以UML交互图表示;设计技术支撑设施并将它们与用例实现方案相融合;设计用户界面;精化设计模型,得出完整、详细的包图和类图,并视情况给出必要的状态图和活动图。,第十章 面向对象的设计方法,