时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图中包括的建模元素主要有:角色(Actor)、对象(Object)、生命线(Lifeline)、控制焦点(Focus of control)/ 激活(Activation)、消息(Message)、组合片段(Combined Fragments)/交互片段(interaction fragment)。
- 角色 ( Actor )
用以表示和系统进行交互的参与者角色,不一定是人也可以是物或者系统。UML用例图中用一个小人来表示角色
![cb689fff928a226e9983dc8239420c78.png](https://img-blog.csdnimg.cn/img_convert/cb689fff928a226e9983dc8239420c78.png)
- 对象 ( Object )
对象就是类的实例。UML用例图中用矩形框来表示对象。
![80ffb414e99e65c01582865e17cbd3d5.png](https://img-blog.csdnimg.cn/img_convert/80ffb414e99e65c01582865e17cbd3d5.png)
- 生命线 ( Lifeline )
生命线代表对象在某一用例中的生命周期。UML用例图中用虚线来表示生命线。
![0738fa9ed7800077d2f117155014fe0a.png](https://img-blog.csdnimg.cn/img_convert/0738fa9ed7800077d2f117155014fe0a.png)
- 控制焦点 ( Focus of Control ) / 激活(Activation)
控制焦点代表对象在某一用例过程中执行某一操作的时间。UML用例图中用方块
![5b38cd8a5ec2c78b8ad83e624c332153.png](https://img-blog.csdnimg.cn/img_convert/5b38cd8a5ec2c78b8ad83e624c332153.png)
来表示控制焦点。
![773efe20c330db07710b9ee89ed7fb69.png](https://img-blog.csdnimg.cn/img_convert/773efe20c330db07710b9ee89ed7fb69.png)
- 消息(Message)
消息是角色和对象或者对象与对象之间的信息传递。消息分为三种:同步消息、异步消息、返回消息。
(1) 同步消息(Synchronous Message):把信息传递给接受者后,停止活动,等待返回结果。使用
![ae97b0db2378d21e2d06f9a1420f35e2.png](https://img-blog.csdnimg.cn/img_convert/ae97b0db2378d21e2d06f9a1420f35e2.png)
(实线)
![b88a26c8a073c8b80bfcec82137917d7.png](https://img-blog.csdnimg.cn/img_convert/b88a26c8a073c8b80bfcec82137917d7.png)
(2) 异步消息(Asynchronous Message):
把信息传递给接受者后,不用等待返回结果。可以直接开始下一个活动。类似于打电话的过程,拨通号码后,用户变不需要继续下一步的操作,只需等待连接。UML图表示如下:
![5bee8597e0b86293968945a44e60bb1f.png](https://img-blog.csdnimg.cn/img_convert/5bee8597e0b86293968945a44e60bb1f.png)
图示上与同步消息图示不同的是message的单箭头。
![3b393fe833d55e225963a3e5cf866640.png](https://img-blog.csdnimg.cn/img_convert/3b393fe833d55e225963a3e5cf866640.png)
双击message的剪头图,弹出属性对话框,选择Detail选项卡,将Control flow 下拉选项改成Asynchronous(异步),图示就会变成单箭头。
(3) 返回消息(Return Message):
代表从过程调用返回。UML图表示如下:
![7f1df6d10b9cacbe533ad3c95c3d1b7b.png](https://img-blog.csdnimg.cn/img_convert/7f1df6d10b9cacbe533ad3c95c3d1b7b.png)
使用
![47353969ffcc806ad1688aa8d3dd9908.png](https://img-blog.csdnimg.cn/img_convert/47353969ffcc806ad1688aa8d3dd9908.png)
虚线连接
(4) 自关联消息(Self-Message):
自关联消息表示方法的自身调用或者一个对象内的一个方法调用另外一个方法
![bf73e5d953853608f00a1db22ed43f39.png](https://img-blog.csdnimg.cn/img_convert/bf73e5d953853608f00a1db22ed43f39.png)
。UML图表示如下:
![58287deb426a3ad48ad48e434c454b0c.png](https://img-blog.csdnimg.cn/img_convert/58287deb426a3ad48ad48e434c454b0c.png)
- 组合片段(Combined Fragments)/交互片段(interaction fragment):
UML图表示如下:
![e9e7473bbd98a5711adb6082cb066b85.png](https://img-blog.csdnimg.cn/img_convert/e9e7473bbd98a5711adb6082cb066b85.png)
中间方框用
![f8b2e418331819470249546effd4ecfe.png](https://img-blog.csdnimg.cn/img_convert/f8b2e418331819470249546effd4ecfe.png)
(Interaction fragment) 图标表示。可选择的组合有:
![5efd317a94cffc2023a26150d76be7a7.png](https://img-blog.csdnimg.cn/img_convert/5efd317a94cffc2023a26150d76be7a7.png)
alt:在一组行为中根据特定的条件选择某个交互;
opt:表示一个可选的行为;
break:提供了和编程语言中的break类拟的机制;
par:支持交互片段的并发执行;
seq:强迫交互按照特定的顺序执行;
strict:明确定义了一组交互片段的执行顺序;
neg:用来标志不应该发生的交互;
region:标志在组合片段中先于其他交互片断发生的交互;
ignore:明确定义了交互片段不应该响应的消息;
consider:明确标志了应该被处理的消息
assert:标志了在交互片段中作为事件唯一的合法继续者的操作数;
loop:说明交互片段会被重复执行
(1)抉择(Alt):抉择用来表示多个消息序列下根据不同条件互斥的选择,类似于if...else,下图就是一个抉择的例子,用户到商店里购买一件商品,如果小于50件就可以购买成功,如果大于50件,就出现货品不足无法购买的情况,这是个比较粗糙的例子,不过对于解释抉择的组合片段还是很好理解的。
![d30b9af477085b906ad0ed9bf17a83e5.png](https://img-blog.csdnimg.cn/img_convert/d30b9af477085b906ad0ed9bf17a83e5.png)
(2)选项(Opt):表示一个可能存在又可能不存在的消息通信过程,例如上面购买操作,有可能用户会购买商品,也可能不购买商品,表示如下图:
![f1a8e1317e3c7dafdbe539e8b617696c.png](https://img-blog.csdnimg.cn/img_convert/f1a8e1317e3c7dafdbe539e8b617696c.png)
(3) 循环(Loop):表示该消息通信的过程多次根据条件重复执行,类似于for,如下图示例:
![d39a856c036cc1041474dc3b04490fc9.png](https://img-blog.csdnimg.cn/img_convert/d39a856c036cc1041474dc3b04490fc9.png)
(4)并行(Par):表示对象生命线中持续进行消息通信的部分,具体如下图:
![43c6462c8cc0582e7bfc7011dceb7ee4.png](https://img-blog.csdnimg.cn/img_convert/43c6462c8cc0582e7bfc7011dceb7ee4.png)
(5) 中断(break):用来表示序列中如果选择一个序列则要放弃其他序列的情况,类似于switch里的break,如下图:
![266961a4f007e01ba08dbf5ca8542521.png](https://img-blog.csdnimg.cn/img_convert/266961a4f007e01ba08dbf5ca8542521.png)
(6)强顺序(strict):多个操作片段必须按照顺序发生。下面就是一个典型的例子,做菜这个操作分为切菜和炒菜,这个流程是必须不可逆的,所以是强顺序。
![b38768e5aeedd8aa038f54d9f5accef3.png](https://img-blog.csdnimg.cn/img_convert/b38768e5aeedd8aa038f54d9f5accef3.png)
(7)弱顺序(Seq):多个操作片段在同一生命线上必须按照片段顺序发生,如果是不同的生命线则可以是并行发生,这个就不举实例了,基本表示方法和上面一样。
- 一个电话拨号的时序图
![b5999b49bcdd23a1aa157b8abc8c3a83.png](https://img-blog.csdnimg.cn/img_convert/b5999b49bcdd23a1aa157b8abc8c3a83.png)