第10章 面向对象的设计方法 教学目的:了解面向对象设计的概念和方法 教学重点:理解面向对象的设计的基本原理,掌 握面向对象的设计方法。 第10章 面向对象的设计方法 教学目的:了解面向对象设计的概念和方法 教学重点:理解面向对象的设计的基本原理,掌 握面向对象的设计方法。 教学难点:对用例图的理解 教 具:多媒体教室、电子教案 作 业:
第10章 面向对象的设计方法 本章采用基于UML的面向对象设计方法将分析模型转换为设计模型。如第六章所述,面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成;设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。为了完成这些转换设计人员必须处理好下列问题: (1) 针对分析模型中的用例,设计实现方案,实现方案用UML交互 图表示 (2)设计技术支撑设施 (3)设计用户界面 (4)针对分析模型中的领域概念模型以及第(2)、(3)两步引用的的新类,完整、精确地确定每个类的属性和操作,并完整地标示类之间的关系
10.1 设计用例实现方案 UML的交互图(顺序图、协作图)适于用例实现方案的表示。 设计方法包含三步: (1)提取边界类、实体类和控制类 10.1 设计用例实现方案 UML的交互图(顺序图、协作图)适于用例实现方案的表示。 设计方法包含三步: (1)提取边界类、实体类和控制类 (2)构造交互图 (3)根据交互图精化类图
10.1.1 顺序图 顺序图用来描述对象之间动态的交互关系,着重表现对象间消息传递的时间顺序。 在顺序图中,参与交互的对象位于顶端的水平轴上,垂直轴表示时间,时间推移的方向是自上而下。对象下方的垂直虚线表示对象的生命线。对象生命的终结用叉号表示;附在对象生命线上的矩形框表示对象在此期间内活跃;对象之间的通信表现为对象生命线之间的消息传递。 UML的消息有四种类型: (1)简单消息 (2)同步消息 (3)异步消息 (4)返回消息
10.1 设计用例实现方案 10.1.2 协作图 协作图用于描述相互合作的对象间的交互关系和连接关系。 10.1 设计用例实现方案 10.1.2 协作图 协作图用于描述相互合作的对象间的交互关系和连接关系。 在协作图中,对象可以在二维平面中自由占位。 区别:顺序图强调消息交互的时间序,而协作图强调交互对象间的静态链接关系。
10.1.3 提取边界类、实体类和控制类 边界类---用于描述目标系统与外部环境之间的交互,并负责实现如下功能: (1)界面控制 10.1.3 提取边界类、实体类和控制类 边界类---用于描述目标系统与外部环境之间的交互,并负责实现如下功能: (1)界面控制 (2)外部接口 (3)环境隔离 <<boundary>>作为特殊标识 实体类----表示目标软件系统中具有持久意义的信息项及其操作。<<entity>>作为特殊标识 控制类---作为完成用例任务的责任承当者,协调、控制其他类共同完成用例规定的功能或行为。<<control>>作为特殊标识
10.1.4 构造交互图 在标识了边界类、实体类和控制类之后,接着把分析模型中的用例描述转化成UML的交互图。 定义:顺序图描述交互的对象在特定的时间周期内的消息传递情况,同时还描述了对象之间相互作用,并详细地说明了类、接口,以及它们可能使用的操作行为。 作用:顺序图一般用来描述用例的实现过程。 布局规则:框图顶部显示了涉及的角色和对象,并表明对象所属类的对象一般以“对象名:类名”的方式标识。对象的下方用垂直虚线表示对象的生命线,即对象在某段时间内存在。附着在生命线上的矩形框表示对象在此段时间内活跃。对象间的通信表现为对象的生命线之间的消息传递。在消息边上需附加消息名和消息参数。有时也以序号强调消息的时序。消息的源对象和目标对象可以相同。可以在消息名前面的方括号中书写条件表达式,表明仅当条件成立时该消息才发送。
10.1.4 构造交互图 下图显示了考场管理的实现过程。监考人员在登录窗口w_login中输入用户口令,登录窗口校验口令,如果口令正确,系统打开监考主控窗口w_server_main,否则报错;登录成功后,监考人员首先发放试卷,然后发开考指令,此时系统进入考场监控状态,考试结束监考人员发结束考试指令,最后发评分指令,完成监考任务。
10.1.4 构造交互图 定义:协作图显示的信息与顺序图相同。它们之间的区别主要表现在协作图集中在活动着的对象上,它表现的是相互协作的对象之间的消息传递,不参照时间;而顺序图侧重于在某种特定的情形下对象之间消息传递的时序性。 下面的协作图对应于上面的顺序图。协作图通过在消息上加序号表示消息传递的次序。
10.1.5 精化类图 类图描述系统的静态结构,类图的节点表示系统中的类及其属性和操作,类图的边表示类之间的联系,包括继承、关联、依赖、聚合等。在考试系统中,考生类和成绩类之间的关联关系。 图元表示:类图中每个类用方框表示,分成三部分,第一部分为类名,第二部分为类包含的属性,第三部分为类的操作,即类提供的功能。 分析人员可以用类图显示系统的细节,开发人员可以用类图来开发类。类图可以显示用例图中类的相互关系,也可显示整个系统或子系统。
10.1.5 精化类图 考生成绩类图
10.2 设计技术支撑方案 技术支撑方案应该为多个用例的软件实现提供技术服务,所以,它应该成为整个目标软件系统中全局性的公共技术平台。 数据持久存储服务 并行与同步控制服务 技术支撑方案与用例实现方案的融合
10.3 设计用户界面 需求分析和软件设计阶段都必须考虑人机交互问题。在需求分析阶段要确定人机交互的属性和外部服务,而在设计阶段要给出有关人机交互的所有系统成份,包括用户如何操作系统、系统如何响应命令和系统显示信息的报表格式等。 用户界面设计策略与步骤如下: (1) 熟悉用户并对用户分类 (2)按用户类别分析用户的工作流程和习惯 (3)设计命令系统并进行优化 (4)设计用户界面的各种细节 (5)增加用户界面专用的类与对象 (6)利用快速原型法改进界面设计
10.4 精化设计模型 对设计模型精化需要考虑以下任务: (1)以顶层架构图为基础,精化目标软件系统的体系结构 (2)精化类之间的关系 10.4 精化设计模型 对设计模型精化需要考虑以下任务: (1)以顶层架构图为基础,精化目标软件系统的体系结构 (2)精化类之间的关系 (3)精化类的属性和操作 (4)针对具有明显状态转换特征的类,设计状态图 (5)针对比较复杂的类图方法,设计活动图
10.4.1 状态图 状态图用来描述一个特定类的对象的所有可能状态以及因事件而引起的状态转移。状态图的节点包含状态名和活动两部分内容。活动是可选的,可分为如下四种: (1)entry活动。一旦对象进入该状态,相应的活动即被触发 (2)exit活动。一旦对象离开该状态,相应的活动被触发执行 (3)do活动。当对象位于该状态时,执行相应活动,对象的状态不变 (4)on-event。当对象位于该状态并且接收到某一事件后,执行相应的事件响应活动
10.4.1 状态图 在状态图的状态转移边上可以附加以下信息:事件名(事件参数表)[条件表达式]/ 动作 ^事件目标.事件名(事件参数表)。第一个事件是引发对象状态迁移的触发事件;条件表达式表示此转移边所代表的状态迁移的发生条件;动作表示对象在进行状态迁移时同时还将执行的处理功能;最后一个事件表示对象在进行状态迁移时还可以向其它对象发送的事件。所有上述语法成分都是可选项,并不是必须的。如果状态转移边上没有触发事件,则表明对象在到达该边的源节点时,内部活动执行完毕后自动触发状态迁移,但是否真正发生迁移还取决于条件表达式的真假。如果条件表达式不存在,则认为迁移条件恒成立。
10.4.1 状态图 状态图描述类的对象的状态迁移与响应动作。 10.4.1 状态图 状态图描述类的对象的状态迁移与响应动作。 下图显示了考生对象的各种状态方式及其转换。该图表明考生启动程序后进入“登录”状态,当输入学号后,系统校验学号是否有效和开考指令是否下达,若学号有效且开考指令已下达,进入“答题”状态,否则保持登录状态。考生在进入“答题”状态后系统启动计时器,开始计时;考生答题完毕,进入“答题完毕”状态,交卷后考试结束。若考试时间用完,系统自动结束考试。
10.4.1 状态图 考生类的状态图
10.4.2 精化体系结构 精化体系结构的主要目的是寻找一种理想的包划分方案,使得每个包中直接包含的类的数量规模适中,包的边界清晰、自然,并且包间的偶合度较低。在包图中耦合度主要取决于依赖关系,而包间的依赖关系又取决于分属两个包的类之间的关系。下面是类之间耦合程度从高到低的判断方法: (1)继承关系 (2)构成关系 (3)聚合关系 (4)关联关系 (5) 依赖关系 (6)两个类的对象受同一执行者变化的影响
10.4.2 精化体系结构 弱化包间耦合的方法: (1)分拆 (2)调整类的摆放位置 当一个系统有几十个或上百个类时,理解和修改这个系统就变得很困难了,总是希望将复杂系统进行分解。解决这个问题的办法就是将许多类组合成一个更高层次的单位,这些高内聚、低耦合的类的集合称为包。将这些包关联起来就形成了包图
10.4.2 精化体系结构 考试系统包图
10.4.2 精化体系结构 弱化包间依赖关系既无必要,也不合理,但应尽量遵循以下原则: (1) 避免包间的循环依赖关系,即排除包P1依赖P2,P2又依赖于P1的情形 (2) 在层次结构中,位于较低层次的通用包不应当依赖于较高层次中的专用包 (3) 在层次结构中,较高层次的包依赖于较低层次的包,但此种以来应尽量在相邻的层次间发生 (4) 如果针对某些子系统专门划分了接口包和实现包,那么其他与该系统相关的包只能依赖于接口包,不能依赖于实现包。
10.4.3 精化类之间的关系 在分析阶段形成 的类图的基础上进行精化类间关系。 10.4.3 精化类之间的关系 在分析阶段形成 的类图的基础上进行精化类间关系。 (1) 根据这些连接的语义强度,将它们精确判定为UML的依赖、关联、聚合或构成关系 (2) 确定连接的方向及参与连接的类的对象之间的数量对应关系 (3) 根据软件重用的要求及软件结构简洁化、清晰化的要求,优化类之间的关系 对象间消息传递机制: (1) 引用全局对象 (2) 通过参数传递 (3) 引用局部对象 (4)通过类的成员变量 精化类之间的关系时,往往需要考虑到软件重用的需要而对类进行调整
10.4.3 精化类之间的关系 类图描述系统的静态结构,类图的节点表示系统中的类及其属性和操作,类图的边表示类之间的联系,包括继承、关联、依赖、聚合等。类图中每个类用方框表示,分成三部分,第一部分为类名,第二部分为类包含的属性,第三部分为类的操作,即类提供的功能。 分析人员可以用类图显示系统的细节,开发人员可以用类图来开发类。类图可以显示用例图中类的相互关系,也可显示整个系统或子系统。 在考试系统中,考生类和成绩类之间的关联关系如下图所示:
10.4.3 精化类之间的关系 1、提取关联类 2、提取公共父类 3、将多重继承化为单重继承
人员 人员 角色 店主 店员 店主兼店员 店主 店员 图11-2-4 多重继承 图11-2-5 用部分-整体的关系 表示多重继承
人员 店主 店主兼店员 店员 图11-2-6 多重继承平板化
10.4.4 精化类的属性和操作 属性和操作范围有以下三种 (1) PUBLIC。对软件系统中的所有类都可见 (2) PROTECT。仅对本类及其子类可见 (3) PRIVATE。仅对本类可见
10.4.5 设计状态图 10.4.6 设计活动图 状态图适合于表示跨越多个用例的单个对象的行为。 10.4.6 设计活动图 活动图适合表示用例中的事件流和过程,也可以用来表示复杂的酸法以及并发处理过程。 返回目录