UML的词汇表包含3种构造块:事物、关系和图。事物是对模型中最具有代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。
一、事物
UML 事物是模型中的基本元素,分为 结构事物、行为事物、分组事物、注释事物。
1. 结构事物
-
类(Class):具有相同属性和方法的对象的抽象(如
Student
类)。 -
接口(Interface):定义一组操作的契约(如
Payment
接口)。 -
协作(Collaboration):一组对象及其交互,共同实现特定功能(如
订单处理
协作,包含订单、支付、库存等对象的交互)。 -
用例(Use Case):系统功能的描述(如
用户登录
用例)。 -
构件(Component):可重用的软件模块(如
.dll
文件)。 -
制品(Artifact):物理文件或文档(如源代码文件
User.java
、配置文件config.xml
)。 -
节点(Node):物理设备或运行时资源(如
服务器
)。 -
主动类(Active Class):拥有独立线程的类(如
多线程控制器
)。
2. 行为事物
-
交互(Interaction):对象间的消息传递(如方法调用)。
-
状态机(State Machine):对象状态的变化(如订单状态从
待支付
到已支付
)。 -
活动(Activity):流程中的步骤(如业务流程中的
审核
步骤)。
3. 分组事物
-
包(Package):对模型元素的分组(如将
用户管理模块
放入一个包)。
4. 注释事物
-
注释(Note):对模型的解释性说明(如附加的文字描述)。
二、 关系
UML 关系描述事物之间的关联方式。
关系类型 | 描述及示例 | 表示符号 |
---|---|---|
关联(Association) | 对象间的结构关系,它描述了一组链,链是对象之间的连接。 | 实线,可带箭头(导航方向) |
依赖(Dependency) | 依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义。 | 虚线箭头(指向被依赖方) |
泛化(Generalization) | 泛化是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象。 | 空心三角箭头(指向父类) |
实现(Realization) | 实现是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约。在两种情况下会使用实现关系:一种是在接口和实现它们的类或构件之间:另一种是在用例和实现它们的协作之间。 | 空心三角箭头 + 虚线(指向接口) |
聚合(Aggregation) | 弱“整体-部分”关系(如 汽车 与 轮胎 ) | 空心菱形 + 实线(菱形在整体端) |
组合(Composition) | 强“整体-部分”关系(如 公司 与 部门 ) | 实心菱形 + 实线(菱形在整体端) |
注意:
聚合:部分和整体的生命周期不一致,整体消失了,部分仍然存在部分可以脱离整体存在。
组合:部分和整体的生命周期一致,整体消失了,部分也消失了,部分不可以脱离整体而存在。
三、UML 的图
UML 定义了 13 种图,分别是类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、组合结构图、部署图、包图、交互概览图和计时图。序列图、通信图、交互概览图和计时图均被称为交互图。
1. 类图(Class Diagram)
类图(Class Diagram)展现了一组对象、接口、协作和它们之间的关系。 类图给出系统的静态设计视图。包含主动类的类图给出了系统的静态进程视图。
核心元素:
-
类:矩形框,分三栏(类名、属性、方法)。
-
关系:关联(实线)、依赖(虚线箭头)、泛化(空心三角箭头)、实现(虚线空心三角箭头)、聚合(空心菱形)、组合(实心菱形)。
当对系统的静态设计视图建模时,通常以下述3种方式之一使用类图:
- 对系统的词汇建模。
- 对简单的协作建模。
- 对逻辑数据库模式建模。
2. 用例图(Use Case Diagram)
用例图(Use Case Diagram)展现了一组用例、参与者(Actor)以及它们之间的关系。
核心元素:
-
参与者:小人图标(如
用户
、管理员
)。 -
用例:椭圆框(如
登录
、支付
)。 -
关系:包含(
<<include>>
)、扩展(<<extend>>
)、泛化。
注意:
- 一个用例执行的时候,可能会发生一些特殊的情况或可选的情况,这种情况就是这个用例的扩展用例。
- 关联是参与者和用例之间的关系。
- 包含是用例和用例之间的关系。
- 扩展是用例和用例之间的关系。
- 泛化是参与者和参与者之间的关系也是用例和用例之间的关系。
当对系统的静态用例视图建模时,可以用下列两种方式来使用用例图:
(1)对系统的语境建模。
(2)对系统的需求建模。
3. 序列图(Sequence Diagram)
序列图是场景(Scenario)的图形化表示,描述了以时间顺序组织的对象之间的交互活动。
把参加交互的对象放在图的上方,沿水平方向排列。通常把发起交互的对象放在左边,下级对象依次放在右边。然后,把这些象发送和接收的消息沿垂直方向按时间顺序从上到下放置。
核心元素:
-
生命线(Lifeline):垂直虚线表示对象存活时间。
-
消息(Message):箭头表示同步消息(实线箭头)、异步消息(虚线箭头)、返回消息(虚线返回箭头)。
-
激活条(Activation Bar):矩形条表示对象执行操作的时间段。
序列图有两个不同于通信图的特征:
- 序列图有对象生命线。
- 序列图有控制焦点。
4. 活动图(Activity Diagram)
活动图是一种特殊的状态图,它展现了在系统内从一个活动到另一个活动的流程。
核心元素:
-
活动节点:圆角矩形表示具体操作
-
决策节点:菱形
-
分叉/汇合节点:粗线表示并行流程的开始与结束。
-
泳道(Swimlane):纵向分区,区分不同角色或模块的责任。
活动图一般包括活动状态和动作状态、转换和对象。
活动图可以表示分支、合并、分岔和汇合。
当对一个系统的动态方面建模时,通常有两种使用活动图的方式:
- 对工作流建模
- 对操作建模。
5. 状态图(State Machine Diagram)
状态图展现了一个状态机,它由状态、转换、事件和活动组成。状态图关注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序。
状态是指对象的生命周期中某个条件或者状态,在此期间对象将满足某些条件、执行某些活动或等待某些事件,是对象执行了一系列活动的结果。
嵌套在另外一个状态中的状态称为子状态,含有子状态的状态称为组合状态。
转换是两个状态之间的一种关系,表示对象将在源状态中执行一定的动作,并在某个特定事件发生而且某个特定的警界(监护)条件满足时进入目标状态。
动作是一个可执行的原子操作,是不可中断的,其执行时间是可忽略不计的。
在状态转换图中定义的状态主要有:初态(即初始状态)终态(即最终状态)和中间状态初态用一个黑圆点表示,终态用黑圆点外加一个圆表示,状态图中的状态用一个圆角四边形表示(可以用两条水平横线把它分成上、中、下3个部分。上面部分为状态的名称,这部分是必须有的;中间部分为状态变量的名称和值,这部分是可选的;下面部分是活动表这部分也是可选的),状态之间为状态转换,用一条带箭头的线表示。带箭头的线上的事件发生时,状态转换开始(有时也称之为转换“点火”或转换被“触发”)。一张状态图中只能有一个初态,而终态可以没有,也可以有多个。
状态中的活动表的语法格式如下:事件名(参数表)/动作表达式
三种标准事件:entry,exit,do
entry:入口动作,进入状态,立即执行
exit:出口动作,退出状态,立即执行
do:内部活动,占有有限时间,并可以中断的工作
事件是在某个特定时刻发生的事情,它是对引起系统做动作或(和)从一个状态转换到另一个状态的外界事件的抽象。
- 转换包括两个状态。
- 事件触发转换(迁移)。
- 活动(动作)可以在状态内执行,也可以在状态转换(迁移)时执行。
时间(time)事件
时间事件是指在绝对时间或在某个时间间隔内发生的事情所引起的事件。例如到达某一时间或经过了某一时间段。用关键字When 或After表示。
6. 构件图(Component Diagram)
构件图展现了一组构件之间的组织和依赖。
核心元素:
-
构件:矩形框左侧加两个小矩形(如
用户服务组件
)。 -
接口:空心圆(提供接口)、半圆(需求接口)。
-
依赖关系:虚线箭头指向被依赖构件。
7. 部署图(Deployment Diagram)
部署图是用来对面向对象系统的物理方面建模的方法,展现了运行时处理结点以及其中构件(制品)的配置。部署图对系统的静态部署视图进行建模,它与构件图相关。
核心元素:
-
节点(Node):立方体表示物理设备(如
Web服务器
、数据库服务器
)。 -
构件实例:节点内部标注部署的构件(如
UserService
部署在应用服务器
)。 -
通信路径:实线表示节点间的连接(如 TCP/IP 协议)。
部署图展现了系统的软件和硬件之间的关系在实施阶段使用。
8.对象图(Object Diagram)
对象图(Object Diagram)展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链。
在对系统的静态设计视图或静态进程视图建模时,主要是使用对象图对对象结构进行建模。对象结构建模涉及在给定时刻抓取系统中对象的快照。对象图表示了交互图表示的动态场景的一个静态画面,可以使用对象图可视化、详述、构造和文档化系统中存在的实例以及它们之间的相互关系。
9.通信图(Communication Diagram)
通信图强调收发消息的对象的结构组织,在早期的版本中也被称作协作图。通信图强调参加交互的对象的组织。产生一张通信图,首先要将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和收的消息来修饰这些链。
通信图有两个不同于序列图的特性:
- 通信图有路径,需要显式地表示以下几种链的路径:local(局部)、parameter(参数)、global(全局)以及self(自身),但不必表示 association(关联)。
- 通信图有顺序号。
通信图展现了对象之间的小溪流及其顺序。
10.UML总和
- 静态建模:类图、对象图、用例图
- 动态建模:序列图(顺序图,时序图)、通信图(协作图)、状态图、活动图
- 物理建模:构件图(组件图)、部图
- 交互图:序列图(顺序图,时序图)、:通信图(协作图)