概念
Sequence diagram is the most common kind of interaction diagram, which focuses on the message interchange between a number of lifelines.
Sequence diagram describes an interaction by focusing on the sequence of messages that are exchanged, along with their corresponding occurrence specifications on the lifelines.
时序图是一种动态图,表明对象(lifelines)之间的消息交换顺序,它关注的是消息交换的方式,消息交换的时机、顺序以及执行的时间。
使用场景
时序图一般配合组件图、类图一起使用,表明对象之间的通讯流程。 我们在 #3 讲到的活动图也是一种动态图,也描述的是流程,但是他们之间关注点会有所区别。活动图粒度比较粗,它只关注 activity 之间是怎么流传的,因此比较适合在需求分析的阶段来表达需求场景。而时序图关注点在于消息交换,转换成代码就是代码调用的流程,因此更适合在程序设计阶段,表达更细节的,更接近程序实现的流程场景。 比如 jQuery 的 ajax 请求,请求时会通过创建一个代理对象,由代理对象来实现 http 请求,这部分用活动图表达就相对困难。 因此虽然活动图与时序图都是表达流程的图,但是由于两种图关注的点有所差别,因而适用于不同的场景。
时序图基本元素
对象(lifeline)
Lifeline is a named element which represents an individual participant in the interaction. While parts and structural features may have multiplicity greater than 1, lifelines represent only one interacting entity.
对象表示一个具体的实例对象,敲重点,时序图只表达其中一个实例对象的交互流程,因此如果系统中有多个实例对象,每个实例对象流程有所区别,那么应该画多个时序图。因此时序图表达的是系统某一时段,对象的交互过程。这个对象不仅是一个 class 的实例,也有可能是一个子系统,分布式集群里的某个节点。
系统边界(gate)
A gate is a message end, connection point for relating a message outside of an interaction fragment with a message inside the interaction fragment.
一个时序图并不一定要求从流程的最开始画起,也不一定会涉及到流程的终点,因此在这个流程里,我们不关注的部分称之为系统边界(gate),表明消息从外部对象产生,最终返回给外部对象。
控制焦点(execution specification,informally called activation)
Execution (full name - execution specification, informally called activation) is interaction fragment which represents a period in the participant's lifetime when it is
executing a unit of behavior or action within the lifeline, sending a signal to another participant, waiting for a reply message from another participant.
控制焦点表明该对象执行某些方法的过程,或者是进行其他方法调用、等待消息回复的过程。我们可以简单的理解为调用了该对象的某个方法,该方法终止的标志为执行完相关的过程,完成方法调用,并且收到了相关的消息。
如下面的方法 a,控制焦点从a被调用开始,到 callOtherFunction
返回,并且收到了 waitingSomeMessage
消息标记结束
function a() {
//doSomething()
event.on('waitingSomeMessage', () => {})
callOtherFunction()
}
消息(interaction message)
Message is a named element that defines one specific kind of communication between lifelines of an interaction. The message specifies not only the kind of communication, but also the sender and the receiver. Sender and receiver are normally two occurrence specifications (points at the ends of messages).
消息不代表通讯的协议,只是表明了发送者向接收者进行了一次通讯,可能会代表一次 http 请求,也可能代表一个函数调用。 消息分为同步消息、异步消息、返回消息、创建消息(https://www.uml-diagrams.org/interaction-message.html#create)、删除消息(https://www.uml-diagrams.org/interaction-message.html#delete)等
同步消息
顾名思义,就是消息发送后,等待消息的回复。从代码的角度来说,就是执行了一个函数调用,并且等待函数的返回。
异步消息
是指发送了消息后不等待返回,立即处理后续的事情。从代码的角度来说,就是开了另一个线程执行函数调用,不等待函数的返回结果
返回消息
表明消息接受者已经处理完消息,把结果返回给发送者。从代码的角度来说,就是 A 调用了 B,B 返回了结果(无论是通过函数返回或函数回调的方式)
创建消息
即创建对象,A 给 B 发送了创建消息,从代码的角度来说就是在 A 的方法里,执行了 new B()
的操作
删除消息
和创建对象相反,A 给 B 发送了删除的消息,从代码的角度来说就是在 A 的方法里,执行了 release B
的操作,在 C++等手动内存管理的场景会比较好举例,等价于释放了对象的内存
异步信号
即创建一个信号发送给接收端,常用于响应式的设计
引用(Interaction use)
Interaction use is an interaction fragment which allows to use (or call) another interaction. Large and complex sequence diagrams could be simplified with interaction uses. It is also common to reuse some interaction between several other interactions.
引用是表示在现有时序图里嵌入一个子流程,主要是用于简化时序图的表达。因为有些流程相对复杂,如果都画在一起,显得复杂,不好阅读。另一种场景就是复用流程。
小结
- 时序图是一种动态图,一般配合组件图、类图使用,表达程序设计过程中的业务流程
- 时序图与活动图都是表达流程的动态图,但是由于其关注的点不同,因此适用于不同的场景
- 时序图主要关注消息的交互顺序和类型,适合在程序设计过程中表达对象的交互流程,活动图关注的是 activity 之间的流转过程,适合表达需求层面的业务场景
- 对象(lifeline)是一个具体的实例,因此时序图表达的是系统在一个特定时间范围内几个特定对象之间的交互过程