UML-时序图绘制基础
该文中所用得到的绘制工具为draw.io工具
draw.io
什么是时序图
序图(Sequence Diagram),又名序列图、循序图,是一种UML交互图。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
时序图的元素
我们在画时序图时会涉及7种元素:角色(Actor)、对象(Object)、生命线(LifeLine)、控制焦点(Activation)、消息(Message)、自关联消息、组合片段。其中前6种是比较常用和重要的元素,剩余的一种组合片段元素不是很常用,但是比较复杂。
角色
系统角色,可以是人、机器、其他系统、子系统;在时序图中用
表示。
对象
对象位于时序图的顶部,以一个矩形表示。
主要的命名方式有:
- 对象名和类名,例如:发送模块:传输协议,在时序图中,用“对象:类”表示;
- 只显示类名,即表示它是一个匿名对象,例如: :传输协议;在时序图中,用“:类”表示;
- 只显示对象名不显示类名,例如:发送模块;在时序图中,用“对象”表示。

生命线
在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。

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

消息
表现代表对象之间发送的信息。消息分为三种类型。
- 同步消息(Synchronous Message):消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。以一条实线+实心箭头表示。
- 异步消息(Asynchronous Message):消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线+大于号表示。
- 返回消息(Return Message):返回消息表示从过程调用返回。以小于号+虚线表示。


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

除此之外还有些迷路消息和拾取消息,这是快进程之间的消息传递方式,在此不做展开说明。
组合片段
组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。
主要的组合片段如下所示。
| 片段类型 | 名称 | 说明 |
|---|---|---|
| Opt | 选项 | 包含一个可能发生或可能不发生的序列。可以在临界中指定序列发生的条件。 |
| Alt | 抉择 | 包含一个片段列表,这些片段包含备选消息序列。在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。 else 的临界指示其他任何临界都不为 True 时应运行的片段。如果所有临界都为 False 并且没有 else,则不执行任何片段。 |
| Loop | 循环 | 片段重复一定次数。可以在临界中指示片段重复的条件。 Loop 组合片段具有“Min”和“Max”属性,它们指示片段可以重复的最小和最大次数。默认值是无限制。 |
| Break | 中断 | 如果执行此片段,则放弃序列的其余部分。可以使用临界来指示发生中断的条件。 |
| Par | 并行 | 并行处理。片段中的事件可以交错。 |
| Critical | 关键 | 用在 Par 或 Seq 片段中。指示此片段中的消息不得与其他消息交错。 |
| Seq | 弱顺序 | 有两个或更多操作数片段。涉及同一生命线的消息必须以片段的顺序发生。如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。 |
| Strict | 强顺序 | 有两个或更多操作数片段。这些片段必须按给定顺序发生。 |
| Consider | 考虑 | 指定此片段描述的消息列表。其他消息可发生在运行的系统中,但对此描述来说意义不大。 在“Messages”属性中键入该列表。 |
| Ignore | 忽略 | 此片段未描述的消息列表。这些消息可发生在运行的系统中,但对此描述来说意义不大。 在“Messages”属性中键入该列表。 |
| Assert | 断言 | 操作数片段指定唯一有效的序列。通常用在 Consider 或 Ignore 片段中。 |
| Neg | 否定 | 此片段中显示的序列不得发生。通常用在 Consider 或 Ignore 片段中。 |
以Alt为例,这里只是一个非常简单易懂的逻辑,帮助理解使用,不会真的有人这样设计分数的判断的。

其余的组合片段都有不同的绘制方式和表达效果,遇到的时候搜索一下具体的格式就好了,全记住有点难度了。
时序图示例
因为博主也是初学者,所以说时序图并不是那么的精准正确,仅供参考学习和简单的项目绘制。

- 首先,要确定自己要画什么,要确定好界限。一个时序图并不一定要画完整个项目的逻辑功能,项目一旦复杂起来,就能难看清楚重点是什么,给人眼前一乱的感觉,因此,要确定自己画的范围,比如“发送”功能,就不要横向拓展到“接收”功能了,而是聚焦发送,纵向可以稍微拓展关键功能,例如发送数据的用户输入功能,但是千万不要拓展到接收到的数据显示功能上。
- 角色和对象的名称,都用名词,不用动词,“结构化结构体生成模块”可以,但是“结构化结构体生成”不行。其次,消息用动词,不用名词,注意区分,这涉及到语文知识了。
- 角色放在时序图的开始位置,对象重要程度或使用频率从左到右排列。这就要根据时间的流程考虑了,是一个比较主观的事情。
- 控制焦点两端要以消息元素封顶,控制焦点不要超过消息元素。

最后,时序图多画,自然就熟了。这是个积累的过程。

浙公网安备 33010602011771号