时序图
以下内容出至博客园coolstream,主要是自己懒得写了,部分做了修改。
时序图(Sequence Diagram),又名序列图、循序图、顺序图,是一种UML交互图。
它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作。
它可以表示用例的行为顺序,当执行一个用例行为时,其中的每条消息对应一个类操作或状态机中引起转换的触发事件。
官方图
链接
时序图建模步骤
(1)确定系统需要和哪些外部参与者交互
(2)确定系统内哪些主要对象之间需要创建时序图
(3)确定外部参与者与系统对象之间、系统内部对象与对象之间的调用关系、消息类型和消息时序
(4)确定参与者与对象之间、对象与对象之间的约束条件,并细化为组合片段
从全流程的角度梳理典型业务场景,并精化相应的时序图
时序图主要元素
-
参与者(Actor):参与系统的角色,可以是人、物或其它系统
image
-
对象(Object):类的实例
-
三种命名方式:
一般表示法:包括对象名、冒号、类名和下划线
image
只包括类名、冒号和下划线:表示适用于该类的所有实例,这种方式称为匿名对象
image
只包括对象名和下划线
image -
创建对象:发送者发送一个实例化消息后触发的操作。用执行消息的箭头标识,指向被创建对象的表示框
image -
销毁对象:将对象销毁并回收其拥有的资源。在对象生命线上用X标识
image
在EA中只有被创建的对象才会有销毁
new.PNG -
三种状态:
激活:当一条消息被传递给某个对象时会触发该对象的某个操作,此时该对象被激活,生命线的一部分竖直虚线变成上下细长矩形
运行:当一个对象处于激活器并正在执行某个操作时,该对象处于运行状态
销毁:对象被销毁并被回收资源
-
-
边界(Boundary):捕捉用户交互、屏幕流和元素交互。
Boundary.PNG
-
控制(Control):组织和调度其他活动和元素。
Control.PNG
-
实体(Entity):原型对象,存储或者持久化系统中的信息。
entity.PNG
-
生命线(Lifeline):标识从对象图标向下延伸的一条虚线,标识对象存在的时间线。用垂直虚线标识,对象被创建后,生命线便存在。
image
部分分解
一个对象可以引出多条生命线,使得对象内部和对象之间的消息显示在同一图上。
seq11.gif
在EA中设置instance classifier引用类或者组件时,如果类有多个part或者组件有多个port和interface就会出现多条线
多线条.PNG -
控制焦点(Focus of Control):表示时间段的符号。用小矩形标识
image
-
消息(Message):不同对象之间的交流载体,从一个对象的生命线指向另一个对象的生命线。用实线箭头标识。消息包括很多种:
-
同步消息(Synchronous Message):消息被发送后,发送者停止活动等待反馈
sequence.PNG -
异步消息(Asynchronous Message):消息被发送后,发送者继续自己的活动不等待反馈
image -
返回消息(Return Message):从过程调用返回
image -
自关联消息(Self-Message):对象方法的自身调用以及对象内方法之间的相互调用(箭头类型不是固定的)
image - Change Timing:
在EA中右击Message选择timing details
timing.PNG
seqtiming.png
在此图表中,在“Open Order”消息上:
“持续时间限制(Duration Constraint)”已设置为0…13 在“Get Cart ”消息中:
“消息之间的持续时间限制(Duration Constraint Between Messages)”已设置为d…d*3
“持续时间观察(Duration Observation)”已设置为d=持续时间
“定时约束(Timing Constraint)”已设置为t…t+3
“计时观察(Timing Observation)”已设置为t=现在
-
-
激活(Activation):对象执行操作时的状态。用上下细长矩形标识,矩形的高度与对象处于运行状态的时段对应
image
-
约束(Constraint):有时候对象交互必须满足特定的条件才会发送相应的消息,这些条件就成为约束。UML1.x与UML2.0中约束的标识有所不同。
image
UML1.x:一个约束只能被分配到一个消息上,且需要把约束条件放在消息线上、消息名之前
UML2.0:增加了组合片段的特性,取消了UML1.x中的约束格式。参见组合片段(Combined Fragments)部分 -
结束点(End Point)
End Point.gif
结束点一般用于迷路消息和拾取消息。
迷路消息是那些发送了却没有到达指定接收者,或者到达的接收者不再当前图中。
拾取消息是收到来自那些未知的发送者,或者来自没有显示在当前图的发送者的消息。它们都表明是去往或来自一个终点元素。
-
通信(Communication):对象交互时的通信路径
-
组合片段(Combined Fragments[EA中Fragment]):描述交互执行的条件与方式。
image
UML表示法
交互操作符(interaction Operators,十二种):时序图中画出循环和条件的运算子。这里只介绍常用的运算子,全部运算子参考官网-
alt(Alternative):与if...else...或switch对应
alt.PNG -
opt(Optional):可能发生也可能不发生的片段
opt.PNG -
par(Parallel):并行发生
par.PNG -
loop [value]:与for 或foreach对应,[value]表示循环次数
loop.PNG - critical
指示不能被其他处理中断的序列。 - neg
断言片段无效,并表示所有其他交互都有效。 - assert
指定要出现的唯一有效片段。此运算符通常包含在考虑或忽略操作数中。 - strict
指示必须严格按顺序处理操作数的行为。 - seq
表明组合片段的序列很弱。这意味着,只要第一个操作数的事件发生在第二个操作数之前,如果事件发生在同一条生命线上,则保持操作数内的顺序,但操作数之间的顺序未定义。 - ignore
指示在执行期间应忽略哪些消息,或者哪些消息可以出现在执行跟踪中的任何位置。 - consider
指定跟踪中应考虑的消息。这通常用于使用assert运算符指定结果事件的出现。 - ref
提供对其他图表的引用。
-
-
门(DiagramGate):门是连接片段内消息和片段外消息的连接点。 在EA中,门显示为片段框架上的小正方形。作用为顺序图与页面外的连接器。 用来表示进来的消息源,或者出去消息的终点。下面两个图显示它们在实践中的使用。注意:" top level diagram"中的门用消息箭头指向参考片段,在这里没有必要把它画成方块。
DiagramGate.gif
DiagramGate.gif -
状态 / 延续(State/Continuation):
image
状态常量是生命线的约束,运行时始终为"真"。显示为两侧半圆的矩形,如下图:
延续虽与状态常量有同样的标注,但是被用于复合片段,并可以延伸跨越多条生命线。
-
引用(Interaction ):功能上和组合片段(Combined Fragments)的ref类似。
Parent.PNG
可以使用交互元素将交互关系图作为类元素的子元素插入。
包含以下任何类型的关系图:
Sequence Diagram
Communication Diagram
Timing Diagram
child.PNG
时序图示例
以ATM取款为例
image
时序图注意事项
- 在时序图中根据重要性将对象从左到右排列,也可使用类来标识匿名对象
- 对象在交互过程中可以新建和销毁
- 时序图的解读方式为从上到下、从左到右
- 注意区分消息的不同类型及应用场景
- 对象处于激活期时顶部代表操作的开始,底部代表操作的结束,中间部分表示操作过程中的调用
- 对于复杂的消息注意相关的约束及在UML不同版本中的区别,如前置条件、后置条件、组合片段等