2.设计模式常用的UML图分析(用例图、类图与时序图)
1-用例图
概述
-
展现了一组用例、参与者以及他们之间的关系。
-
用例图从用户角度描述系统的静态使用情况,用于建立需求模型。
用例特征
- 保证用例能够正确捕捉功能性需求,判断用例是否准确的依据。
-
用例是动宾短语
-
用例是相互独立的
-
用例是由用户参与者启动的
-
用例要有可观测的执行结果
-
一个用例是一个单元
参与者 Actor
- UML中,参与者使用一个小人表示:
-
参与者为系统外部与系统直接交互的人或事务,于系统外部与系统发生交互作用
-
参与者是角色而不是具体的人
-
代表参与者在与系统打交道时所扮演的角色
-
系统实际运作中,一个实际用户可能对应系统的多个参与者。不同角色也可以只对应一个参与者,从而代表同一参与者的不通实例
用例 Use Case
系统外部可见的一个系统功能单元。系统的功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。
系统单元用椭圆表示,椭圆中的文字简述系统功能:
关系 Relationship
常见关系类型有关联、泛化、包含和扩展
关联 Association
表示参与者与用例之间的通信,任何一方都可发送或接受消息。
箭头指向:指向消息接收方:
子系统 SubSystem
- 用来展示系统的一部分功能(紧密联系)
泛化 Inheritance
继承关系,子用例和父用例相似,但表现出更特别的行为;子用例将继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可以重载它。父用例通常是抽象。。
箭头指向:指向父用例
2-类图
- 描述系统中的类,以及各个类之间的关系的静态试图。
- 表示类、接口以及它们之间的协作关系,用于程序设计阶段。
注意:
- 抽象类或抽象方法用斜体表示
- 如果是接口,则在类名上方加 <<Interface>>
- 字段和方法返回值的数据类型非必需
- 静态类或静态方法加下划线
类图实例:
类图中的事务及解释
如图,类图从上到下分为三部分,分别为类名、属性和操作
- 属性:如果有属性,则每一个属性都必须有一个名字,另外还可以有其它的描述信息,如可见性、数据类型、缺省值等
- 操作:如果有操作,则每一个操作也都有一个名字,其它可选的信息包括可见性、参数的名字、参数类型、参数缺省值和操作的返回值的类型等
类图中的六种关系
1.实现关系 implements (类实现接口)
- 用空心三角虚线表示
2.泛化关系 extends (表示一般与特殊的关系) is-a
- 用空心三角实线表示
3.组合关系 (整体与部分的关系) contains-a
- 实心菱形实现表示
eg.有头类、身体类与人类类三个类,则人类类中应包含头类及身体类这两个属性,则人类类与头类和身体的关系即为组合关系。
注: 在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。
4.聚合关系 (整体与部分的关系) has-a
- 空心菱形实线表示
eg.BusDriver类有Hat类与Clothes属性,BusDriver类没了Hat与Clothes仍可存在
注:聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。
5.关联关系(一般关联关系) (对象之间的一种引用关系)
- 关联可以是双向的,也可以是单向的。在 UML 类图中,双向的关联可以用带两个箭头或者没有箭头的实线来表示,单向的关联用带一个箭头的实线来表示,箭头从使用类指向被关联的类。也可以在关联线的两端标注角色名,代表两种不同的角色。
关联关系是类与类之间最常用的一种关系,分为一般关联关系、聚合关系和组合关系。
6.依赖关系
- 依赖关系使用带箭头的虚线来表示,箭头从使用类指向被依赖的类。
类关系的记忆
3-时序图
时序图将交互关系表示为一个二维图
注:
- 主要用于展示对象之间交互的顺序。
- 纵向代表时间轴,时间沿竖线向下延伸。
- 横向代表了在协作中各独立对象的类元角色。
- 类元角色用生命线表示。
- 当对象存在时,角色用一条虚线表示。
- 当对象的过程处于激活状态时,生命线是一个双道线。
-
消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。
生命线
- 生命线可带下划线
- 当使用下划线时意味着序列图中的生命线代表一个类的特定实体。
同步消息&
同步消息: 发送人再它继续之前将等待同步消息相应
异步消息:在发送方继续之前无需等待相应的消息
注释
虚线引出一条说明注释
约束
约束格式: [Boolean Test]
组合片段
用来解决交互执行的条件和方式,它允许在时序图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域。
类型与说明如下:
抉择Alt:抉择用来指明在两个或更多的消息序列之间的互斥的选择,相当于经典的if..else..。
选项Opt:包含一个可能发生或不发生的序列
循环Loop:片段重复一定次数。 可以在临界中指示片段重复的条件。
时序图的画法及应用实践
- 绘制交互场景中的角色及对象梳理出来
- 从出发某个交互的某个消息开始,在生命线之间从上到下依次画出所有消息。
eg.学生在教务系统中查询其课程的成绩
在本例中,角色有学生,对象有教务系统、课程、成绩。
对象的梳理是一个相对主观的过程,比如本例中,课程以及成绩分别作为了对象存在,也可以合并为数据库这一个对象。请注意:角色以及对象,都为名词,动词不可作为角色和对象,如“成绩查询”不可作为对象。
学生的登录验证作为本时序图的前置行为,可直接引用到本时序图中,也可忽略不画;学生进入成绩查询页面后,页面会加载本学生的成绩查询课程列表,并显示出课程对应的成绩。