一、什么是时序图
时序图是基于交互的对象行为建模,是 UML 用于描述对象之间信息的交互过程的方法,是描述对象间协作关系的模型。
时序图更多只是一种叫法,平常我们所说的顺序图、序列图也是在称呼它
时序图用于捕获系统运行中对象之间有时间顺序的交互,是由生命线和消息组成。
时序图将交互关系表示为一个二维图。纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线上加上矩形框。消息用从一个对象的生命线到另一个对象生命线的箭头表示。箭头以时间顺序在图中从上到下排列。
二、组成元素
1.角色
这个角色可以是用户、外部系统、机器等等。
用一个小人表示
2.对象和生命线
对象:类的实例,当然在时序图里面可以是类,也可以该类的某个对象
关于对象的命名:
- 对象名和类名,例如:dispatcherServlet:DispatcherServlet
- 只显示类名,即表示它是一个匿名对象,例如::DispatcherServlet
- 只显示对象名不显示类名,例如:dispatcherServlet
生命线:在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。
3.活动条(激活条)
在生命线的虚线上可以用活动条来表示某种行为(功能)的开始和结束,一般用小矩形来表示。
4.消息(交互行为)
什么是消息?
在面向对象的分析和设计中,对象的行为也被称为消息,因为对象之间的行为的交互擢用也可以看成是对象之间发送消息实现的。通常,当一个对象调用另一个对象中的行为时,即完成了一次消息传递。
时序图中关注生命线之间的通信,这些通信就是对象发送的消息。UML用生命线间带有实心箭头的实现表示消息,每条消息从发送对象指向接收对象。
消息的分类
- 简单消息:就表示控制如何从一个对象发送给另一个对象,并不包含控制的细节。
- 同步消息:意味着阻塞和等待。如:A向B 发送一个消息后,对象A 必须一直等到B执行完成后返回才能继续往下执行。这就是同步消息。(同步消息需要建立同步通道,由发起方发起,等待接收方确认,确认后开始交互,交互完后断开通道)
- 异步消息:就意味着是非阻塞。如:A向B发送消息后,直接可以执行下面代码,无需等待B的执行。
消息的表示
同步消息用实心箭头表示,异步消息用开放式箭头表示。
自我调用消息
消息的返回值:
三、交互框
UML在2.0时在时序图中加入了交互框。交互框用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。
类型 | 参数 | 含义 |
---|---|---|
ref | 无 | 表示交互被定义在另一个图中。可将一个规模较大的图划分为若干个规模较小的图,方便图的管理和复用。 |
assert | 无 | 表示发生在交互框内的交互式唯一有效的执行路径,有助于指明何时交互的每一步必须被成功执行,通常与状态变量一起使用来增强系统的某个状态。 |
loop | min times,max times,[guard_condition] | 循环片段,当条件为真的时候执行循环。也可以写成loop(n)来表示循环n次,与java或者C#等中的for循环比较相似。 |
break | 无 | 如果交互中包含break,那么任何封闭在交互中的行为必须被推出,特别是loop片段,这与java中的break语句比较相似。 |
alt | [guard_condition1]... [guard_condition2]... [else] | 选择片段,在境界中表达互斥的条件逻辑,与if...else...语句相似。 |
neg | 无 | 展示了一个无效的交互。 |
opt | [guard_condition] | 可选片段,当警戒值为真的时候执行。 |
par | 无 | 并行片段,表达并行执行。 |
region | 无 | 区域,表示区域内仅能运行一个线程。 |
alt (选择片段)
简单说就是 将 if/else 在图示中表示出来了
opt
包含一个可能发生或不发生的序列;
只要当我成绩score小于60时,老妈打我这件事情肯定会发生。
大于就不会发生。
Loop (循环)
片段重复一定次数,可以在临界中指示片段重复的条件