画图程序员必备画图技能:如何画好时序图?


什么是时序图
时序图(Sequence Diagram) , 又名序列图、循序图 , 是一种UML交互图 。 它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作 。
使用场景
时序图的使用场景非常广泛 , 几乎各行各业都可以使用 。 当然 , 作为一个软件工作者 , 我这边主要列举和软件开发有关的场景 。
1. 梳理业务流程
一般的软件开发都是为了支撑某个具体的业务 。 有时候业务的流程会比较复杂 , 涉及到多种角色 , 这时就可以使用时序图来梳理这个业务逻辑 。 这样会使业务看起来非常清晰 , 代码写起来也是水到渠成的事情了 。
画图程序员必备画图技能:如何画好时序图?
本文插图
2. 梳理开源软件
作为一个合格的程序员 , 阅读源代码的能力一定要过关 。 一般成熟框架的源代码调用深度都比较深 , 类之间的调用关系也比较复杂 。 我喜欢用时序图来梳理框架中这些对象之间的关系 。
比如再看Tomcat启动流程的过程中 , 我就时序图梳理了各个组件之间的关系 , 看起来层次非常清楚 , 也便于记忆 。
画图程序员必备画图技能:如何画好时序图?
本文插图
【画图程序员必备画图技能:如何画好时序图?】
时序图的角色
我们在画时序图时会涉及下面7种元素:

  • 角色(Actor)
  • 对象(Object)
  • 生命线(LifeLine)
  • 控制焦点(Activation)
  • 消息(Message)
  • 自关联消息
  • 组合片段 。
其中前6种是比较常用和重要的元素 , 最后的组合片段元素不是很常用 , 但是比较复杂 。 我们先介绍前6种元素 , 再单独介绍组合片段元素 。
1. 角色(Actor)
系统角色 , 可以是人或者其他系统和子系统 。 以一个小人图标表示 。
2. 对象(Object)
对象位于时序图的顶部,以一个矩形表示 。 对象的命名方式一般有三种:
  • 对象名和类名 。 例如:华为手机:手机、loginServiceObject:LoginService;
  • 只显示类名 , 不显示对象 , 即为一个匿名类 。 例如::手机、:LoginSservice 。
  • 只显示对象名 , 不显示类名 。 例如:华为手机:、loginServiceObject: 。
3. 生命线(LifeLine)
时序图中每个对象和底部中心都有一条垂直的虚线 , 这就是对象的生命线(对象的时间线) 。 以一条垂直的虚线表 。
4. 控制焦点(Activation)
控制焦点代表时序图中在对象时间线上某段时期执行的操作 。 以一个很窄的矩形表示 。
5. 消息(Message)
表示对象之间发送的信息 。 消息分为三种类型 。
  • 同步消息(Synchronous Message)消息的发送者把控制传递给消息的接收者 , 然后停止活动 , 等待消息的接收者放弃或者返回控制 。 用来表示同步的意义 。 以一条实线和实心箭头表示 。
  • 异步消息(Asynchronous Message)消息发送者通过消息把信号传递给消息的接收者 , 然后继续自己的活动 , 不等待接受者返回消息或者控制 。 异步消息的接收者和发送者是并发工作的 。 以一条实线和大于号表示 。
  • 返回消息(Return Message)返回消息表示从过程调用返回 。 以小于号和虚线表示 。
6. 自关联消息
表示方法的自身调用或者一个对象内的一个方法调用另外一个方法 。 以一个半闭合的长方形+下方实心剪头表示 。
下面举例一个时序图的列子 , 看下上面几种元素具体的使用方式 。
画图程序员必备画图技能:如何画好时序图?
本文插图


推荐阅读