时序图作为软件开发过程中使用频率非常高的一种画图工具,我们有必要掌握它的画法以及如何解读,这篇文章就带大家走入时序图的世界。
一、什么是时序图
时序图(Sequence Diagram),又称序列图、循序图,是一种UML交互图。通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
使用时序图,可以起到如下作用:
- 展示对象之间交互的顺序;
- 相对于其他 UML 图,时序图更强调交互的时间顺序;
- 可以直观的描述并发进程
二、使用场景
时序图一般有2个使用场景:
- 梳理业务流程
- 梳理软件调用深度
梳理业务流程
一般的软件开发都是为了支撑某个具体的业务。有时候业务的流程会比较复杂,涉及到多种角色,这时就可以使用时序图来梳理这个业务逻辑。这样会使业务看起来非常清晰,代码写起来也是水到渠成的事情了。
梳理软件调用深度
我们平时在阅读一个项目的源码时,一般成熟的框架或者系统源代码的调用深度都比较深,类之间的调用关系也比较复杂。这个时候,时序图依然可以派上用场!
三、时序图中的角色
通常情况下,我们画时序图时会涉及7种角色,它们分别介绍如下:
- 角色(Actor):系统角色,可以是人或者其他系统和子系统。可以用一个小人儿表示。
- 对象(Object):位于时序图的顶部,表示参与到整个流程中的关键节点。一般用矩形表示。对象命名方式有如下3种,选择哪个都可以,哪种最容易让阅读该时序图的人理解,就选择哪种。另外,对象的顺序并不重要,但是为了便于理解使时序图更清晰,通常应遵循以下两个原则:把交互频繁的对象尽可能的靠拢;把初始化整个交互活动的对象放置在最左端。
- 包括对象名和类名:如LoginServiceObject:LoginService;
- 只显示对象名:如LoginService;
- 只显示类名:即表示它是一个匿名对象,如LoginServiceObject;
- 生命线(Life Line):每个对象的生命线(时间线)。从顶部矩形拉下来的垂直虚线表示。
- 控制焦点(Activation):又称为激活期,代表对象在生命线上某段时期执行的关键动作。以一个窄的矩形表示。
- 消息(Message):表示对象之间发送的消息。消息类型有3种:
- 同步消息(Synchronous Message):发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。一条实线和实心箭头表示;
- 异步消息(Asynchronous Message):发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。一条实线和大于号表示;
- 返回消息(Return Message):表示从过程调用返回。小于号和虚线表示;
- 自关联消息(Self-Message):表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。一个半闭合的长方形+下方实心剪头表示。
- 组合片段(Combining Fragment):使用不太常见,了解即可。解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件。用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。组合片段一般有13种类型:
- ref(引用):引用其他地方定义的组合片段;
- alt(抉择):在一组行为中根据特定的条件选择某个交互;
- opt(选项):表示一个可选的行为;
- break(中断):提供了和编程语言中的break类拟的机制;
- par(并行):支持交互片段的并发执行;
- seq(弱顺序):强迫交互按照特定的顺序执行;
- strict(强顺序):明确定义了一组交互片段的执行顺序;
- neg(否定):用来标志不应该发生的交互;
- critical(关键):用在 Par 或 Seq 片段中。指示此片段中的消息不得与其他消息交错;
- ignore(忽略):明确定义了交互片段不应该响应的消息;
- consider(考虑):明确标志了应该被处理的消息;
- assert(断言):标志了在交互片段中作为事件唯一的合法继续者的操作数;
- loop(循环):说明交互片段会被重复执行;
四、时序图画法及实践
时序图的绘制步骤可简单总结如下:
- 划清边界,识别交互的语境:划清边界是是指要确定好绘制时序图的范围;识别交互语境就是要知道自己绘制时序图的前提和背景;
- 将所要绘制的交互场景中的角色以及对象梳理出来;
- 从触发整个交互的某个消息开始,在生命线之间从上到下依次画出所有消息,并注明每个消息的特性(如参数等)。
时序图绘制技巧可以包括:
- 从初始消息开始画,依次画出随后消息,并给每个消息分配序号,方便理解。
- 角色和对象用名词,消息用动词
- 角色放在时序图的开始位置,对象重要程度或使用频率从左到右排列。这就要根据时间的流程考虑了,是一个比较主观的事情
- 控制焦点两端要以消息元素封顶,控制焦点不要超过消息元素。
- 熟能生巧
下面是个简单的示例:
五、画图工具推荐
ProcessOn
ProcessOn是一个在线作图工具的聚合平台,它可以在线画流程图、思维导图、UI原型图、UML、网络拓扑图、组织结构图等。可以在线编辑,多人共同编辑,适合于团队协作。
最后奉上这一节的脑图,便于大家快速学习和复习:
* 本页内容参考以下数据源:
- https://zhuanlan.zhihu.com/p/159129710
- https://www.processon.com/
- https://www.cnblogs.com/snail-gao/p/12175447.html
- https://blog.csdn.net/fly_zxy/article/details/80911942