参考博文
UML时序图(Sequence Diagram)学习笔记-CSDN博客
程序员必备画图技能之—时序图 - 程序员自由之路 - 博客园
时序图简述 - 掘金
时序图学习5_组合片段 - 博客园
一、什么是时序图
时序图(Sequence Diagram),亦称为序列图、循序图或顺序图,是一种UML(Unified Model Language,统一建模语言)交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。
时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。
二、时序图的作用
- 展示对象之间的交互顺序,将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互;
- 相对于其他UML图,时序图更强调交互的时间顺序;
- 可以直观的描述并发进程
三、时序图的元素
我们在画时序图时会涉及下面7种元素:
- 角色(Actor)
- 对象(Object)
- 生命线(LifeLine)
- 控制焦点(Activation)
- 消息(Message)
- 自关联消息
- 组合片段。
其中前6种是比较常用和重要的元素,最后的组合片段元素不是很常用,但是比较复杂。我们先介绍前6种元素,再单独介绍组合片段元素。
2.1 角色(Actor)
系统角色,可以是人或者其他系统和子系统。以一个小人图标表示。

2.2 对象(Object)
对象位于时序图的顶部,以一个矩形表示。对象的命名方式一般有三种:

- 对象名和类名。例如:
华为手机:手机; - 只显示类名,不显示对象,即为一个匿名类。例如:
:手机; - 只显示对象名,不显示类名。例如:
华为手机。
三种命名方式均可,哪种最容易让阅读该时序图的人理解,就选择哪种。
对象的左右顺序并不重要,但是为了作图清晰整洁,通常应遵循以下两个原则:
- 把交互频繁的对象尽可能的靠拢;
- 把初始化整个交互活动的对象放置在最左端。
2.3 生命线(LifeLine)
时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线(对象的时间线)。以一条垂直的虚线表示。

2.4 控制焦点(Activation)
控制焦点代表时序图中在对象时间线上某段时期执行的操作。以一个很窄的矩形表示。

2.5 消息(Message)
表示对象之间发送的信息。消息分为三种类型。
- 同步消息(Synchronous Message)
消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线和实心箭头表示。

-
异步消息(Asynchronous Message)
消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线和大于号表示。

- 返回消息(Return Message)
返回消息表示从过程调用返回。以小于号和虚线表示。

2.6 自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。以一个半闭合的长方形+下方实心剪头表示。

2.7 举例
举例一个时序图的列子,看下上面几种元素具体的使用方式。
该时序图仅表示用户登录成功的情况。实际操作中存在各种原因引起登录失败的问题,如网络异常、用户名密码错误、验证码错误等。

2.8 组合片段
组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段共有13种,名称及含义如下。组合片段都不太常用
| 组合名称 | 组合含义 |
|---|---|
| ref | 引用其他地方定义的组合片段 |
| alt | 在一组行为中根据特定的条件选择某个交互 |
| opt | 表示一个可选的行为 |
| break | 提供了和编程语言中的break类拟的机制 |
| par | 支持交互片段的并发执行 |
| loop | 说明交互片段会被重复执行 |
| seq | 强迫交互按照特定的顺序执行 |
| strict | 明确定义了一组交互片段的执行顺序 |
| neg | 用来标志不应该发生的交互 |
| region | 标志在组合片段中先于其他交互片断发生的交互 |
| ignore | 明确定义了交互片段不应该响应的消息 |
| consider | 明确标志了应该被处理的消息 |
| assert | 标志了在交互片段中作为事件唯一的合法继续者的操作数 |
这里列出几个常用组合片段,时序图学习5_组合片段 - 博客园
alt(Alternative)
表示条件选择的意思,类似if else。alt需填写参数。

ref(InteractionUse)
表示引用的意思,某部分交互被定义在另一个图中。可将一个规模较大的图划分为若干个规模较小的图,方便图的管理和复用。ref不用要填写参数。

引用的身份认证时序图

opt(Option)
表示当警戒值为真(符合条件)的情况下进行执行处理的意思。opt需要填写参数

loop
表示循环执行的意思,当条件为真的时候执行循环。也可以写成loop(n)来表示循环n次,与java或者C#等中的for循环比较相似。loop需填写参数。

break(Break)
表示中断处理,跳转的意思,类似java代码中break语句。break需填写参数。

par(Parallel)
表示并行处理,同时发生的意思。par可不用填写参数。

四、时序图绘制工具
微软Visio挺好用,开源免费的drawio更佳,甚至可以在线使用。
五、时序图绘制
5.1 时序图的画法
时序图的绘制步骤可简单总结如下
- 划清边界,识别交互语境
所谓划清边界是是指要确定好绘制时序图的范围。
所谓识别交互语境就是要知道自己绘制时序图的前提和背景。
-
梳理时序图中的角色和对象都有哪些
-
对象之间有哪些交互消息
5.2 时序图的绘制技巧
- 从初始消息开始画,依次画出随后消息,并给每个消息分配序号,方便理解。
- 角色和对象用名词,消息用动词。
- 角色放在时序图的开始位置,对象重要程度或使用频率从左到右排列。这就要根据时间的流程考虑了,是一个比较主观的事情。
- 控制焦点两端要以消息元素封顶,控制焦点不要超过消息元素。
但实际的绘制软件中,绘图的对齐焦点可能不在控制焦点的最两端,如drawio,而是距离最边缘有一小段距离,也是没问题的。
