一、什么是时序图?
1.1 什么是时序图?
时序图(Sequence Diagram),又名序列图、循序图,它是UML交互图形的一种。它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作关系。包括发送消息、接受消息、处理消息、返回消息。
通俗的说,消息的传递和流动是它的表面功能,更核心的是反馈各个系统之间的协作关系。
时序图是一种二维图,横轴表示对象,纵轴表示时间,消息在各个对象之间横向传递,按照时间顺序纵向排列。
1.2 时序图的作用
1.展示对象之间交互的顺序。
将交互行为建模为消息传递,通过描述消息是是如何在对象间发送和接受来动态展示对象之间的交互
2.相对于其他的UML 图,时序图强调的是对象之间交互的时间顺序。
3.可以直观的描述并发过程。
二、时序图的组成元素
1.角色(Actor)
系统角色,可以是人、机器、其他系统、子系统。一般是时序图时间顺序的发起点
2.对象(Object)
对象,在不同的构图软件中,有不同的角色。比如在常用的绘图软件plantuml中(下述),可以有 participant、queue、database 等
该角色一般是描述一个对象、一个模块、一个系统。对象位于时序图的顶部,以一个矩形表示。
2.1 对象的命名
- 对象名和类名。例如: 快退系统:取消订单
- 只显示类名。表示一个匿名对象。例如:取消订单
- 只显示对象名。例如:快退系统
2.1 对象的排列顺序
对象的左右顺序并不重要,但是为了作图清晰整洁,通常应该遵循以下二个原则:
- 把交互频繁的对象尽可能的靠拢
- 把初始化整个交互活动的对象放置在最左端
3.生命线(LifeLine)
时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线(时间线),以一条垂直的虚线表示,对象间的消息存在与二条虚线间。
4.激活期(Activation)
又名控制焦点,它代表时序图在对象时间线上某段时期执行的操作,以一个很窄的矩形表示。
5.消息(Message)
表示对象之间发送的信息。消息分为三种类型。
1)同步消息(Synchronous Message)消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义,以一条实线和实心箭头表示。
2)异步消息(Asynchronous Message)消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的,以一条实线和空心箭头表示。
3)返回消息(Return Message)返回消息表示从过程调用返回,以小于号和虚线表示。
4)自关联消息 表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。
消息类型 | 表示 |
---|---|
同步消息 | 实心箭头 + 实线 |
异步消息 | 空心箭头 + 实线 |
返回消息 | 实心箭头 + 虚线 |
自关联消息 | 实心箭头 + 实线 |
6.组合片段
组合片段:用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,通过指定条件、子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。
组合片段有十几种,最常用的是 ALT 片段,同属来说就是 if-else 的条件判断组合。
6.1 组合片段的定义
组合片段:用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,通过指定条件、子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。
组合片段有十几种,最常用的是 ALT 片段,同属来说就是 if-else 的条件判断组合。
组合判断说明:
- 左上角区域会标明片段的类型
- 片段中用虚线区分不同的条件子域
- 再在子域左上角——阴影区——注释条件判断
- 最后在各自的条件子域上返回特定响应
6.2 组合片段类型
片段类型 | 名称 | 说明 |
---|---|---|
Opt | 选项 | 包含一个可能发生或可能不发生的序列。可以在临界中指定序列发 生的条件。 |
Alt | 抉择 | 包含一个片段列表,这些片段包含备选消息序列。在任何场合 下只发生一个序列。 可以在每个片段中设置-个临界来指示该片段可以运行的条件。else 的临界指示其他任何临界都不为True时应运行的片段。如果所有临界都为 False并且没有else ,则不执行任何片段。 |
Loop | 循环 | 片段重复一定次数。 可以在临界中指示片段重复的条件。Loop组合片段具有“Min"和"Max"属性,它们指示片段可以重复的最小和最大次数。默认值是无限制。 |
Break | 中断 | 如果执行此片段,则放弃序列的其余部分。可以使用临界来指示发生中断的条 |
Par | 并行 | 并行处理。片段中的事件可以交错。 |
Critical | 关键 | 用在Par或Seq片段中。指示此片段中的消息不得与其他消息交错。 |
Seq | 弱顺序 | 有两个或更多操作数片段。涉及同一生命线的消息必须以片段的顺序发生。如果消息涉及的生命线不同,来自不同片段的消息可能会并行交错。 |
Strict | 强顺序 | 有两个或更多操作数片段。这些片段必须按给定顺序发生。 |
Consider | 考虑 | 指定此片段描述的消息列表。其他消息可发生在运行的系统中 ,但对此描述来说意义不大 |
Ignore | 忽略 | 此片段未描述的消息列表。这些消息可发生在运行的系统中 ,但对此描述来说意义不大。 |
Assert | 断言 | 操作数片段指定唯一有效的序列。 通常用在Consider或Ignore片段中。 |
Neg | 否定 | 此片段中显示的序列不得发生。通常用在Consider或Ignore月段中。 |
6.3 常用的组合类型
6.3.1 抉择(Alt)
抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段可以运行的条件。else 的临界指示其他任何临界都不为 True 时应运行的片段。如果所有临界都为 False 并且没有 else,则不执行任何片段。
6.3.2 选项(Opt)
包含一个可能发生或不发生的序列;
6.3.3 循环(Loop)
片段重复一定次数,可以在临界中指示片段重复的条件。
6.3.4 并行(Par)
三、如何构建一个时序图?
时序图的绘制方法简单总结为以下3步:
1.划清边界,识别交互语境
2.梳理角色和对象
3.添加消息
四、使用工具绘制时序图
时序图的绘制工具有plantuml、VISO、Rational Rose、StarUML、Web Sequence Diagrams、Timing Designer、Trufun Plato等,可任选其一。
下面结合 plantuml 进行说明
基本语法参考官方文档 : https://plantuml.com/zh/seque...
单独一篇文章来说明,怎么绘制图形
五、plantuml 工具的扩展
1、学习官方文档,熟悉基本语法
2、网上收集一些案例,
3、结合本部门内的图形自己绘制,熟悉业务
学习步骤:
1、熟记各种指令
2、可以根据任何一个图,熟练的绘画
3、脑中有一个相应的图
这是一方面日积月累的过程,看到一个不错的图,看到其他同事表达一种想法用了一个很好的方式,或者一种不错的颜色搭配。 都可以搜集积累下来
另外一方面是你对系统的认识。
六、时序图的积累
模板文件:看到一个好的图,自己绘制一遍,收集起来。日常多复习,这些元素细节。
真正重要的是表达。
前期应该是一个积累的过程,看到一些符号,知道他可以用来表述什么模块、什么逻辑。慢慢的找到属于自己的简洁的模型。
然后熟悉了之后,日常使用应该是一个相反的过程,当你在描述一个东西的时候,你借助这里时序图的模型、符号帮助你更好的表述一件事。可以很快、很便捷
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。