UML时序图详解

  这几天在阅读《设计模式》一书,书中总结了前人在面向对象软件设计过程中针对特定的问题提出的简洁而优雅的解决方案。在阅读的过程中,我一边理解书中给出的实例,一边结合自己写过的项目或者用过的框架与当前模式进行对比,发现之前的项目有一些还是有很大的改进空间。在阅读本书的过程中,书中很多例子都是通过UML类图和UML时序图进行说明,所以,理解这些例子的前提是对UML类图以及UML时序图有一定的了解,UML类图在前面的博客(https://langzi989.github.io/2017/01/05/UML%E5%9B%BE%E8%A1%A8%E7%A4%BA%E5%B8%B8%E8%A7%81%E7%9A%84%E7%B1%BB%E4%B9%8B%E9%97%B4%E7%9A%84%E5%85%B3%E7%B3%BB/)中已经讲解,现在我们主要来看一下UML时序图中的重要概念。

  UML类关系以及时序图在大三上《系统分析与设计》课的时候学过,但是那个时候不知道这东西有什么用,所以没有认真学和理解。随着实战经验的增多,越来越能体会到这些在软件设计的过程中重中之重,不管是描述你的设计思想还是与团队中其他人进行交流。所以还是建议大家在学到这一部分的时候对这门课认真对待。

定义

时序图是一种按照时间顺序显示对象之间的交互的图。时序图中显示的是参与交互的对象和对象之间消息传递的顺序。

基本元素

时序图中包含的主要的元素有:

  • 角色(Actor)
  • 对象(Object)
  • 生命线(life line)
  • 控制焦点(focus of control)
  • 消息(message)
  • 自关联消息(self-associated message)
  • 组合片段(combined fragment)

基本元素详解

角色(actor)

角色指的是系统角色,这个角色可以是人,其他系统或者子系统

图形表示:

对象(object)

对象包括三种:

  • 指定类名和对象名的对象objectName: className
  • 指定类名但没有对象名的对象(匿名对象) :className
  • 指定对象名但不指定类名的对象 objectName

图形表示:
第一类:

第二类:

第三类:

生命线(life line)

生命线在时序图中使用向下的虚线表示,它指的是其所对应的对象的存活时间。从上到下表示时间的推后。

图像表示:

控制焦点(focus of control)

控制焦点在时序图中以方块的形式出现,它是一种表示时间段的方式,对象在这一时间段中执行相应的操作。

图像表示:

消息(message)

消息有三种类型

  • 同步消息:发送者发送请求后被阻塞,直到接受者返回消息或者做完其他处理之后发送者才能继续执行之后的操作
  • 异步消息:发送者发送消息给接受者之后不等待接受者返回响应而继续执行下面的操作。
  • 返回消息:接受者返回消息给发送者

消息的图形表示:
同步消息:

异步消息:

返回消息:

自关联消息(self-associated message)

自关联消息一般指的是当前类调用自己的函数的情况

组合片段(combined fragment)

组合片段中包括四个部分:

  • Alternative fragment(alt表示):与if…then…else…对应

  • option fragment(opt表示):与switch对应

  • parallel fragment(par表示):表示同时发生

  • Loop Fragment(loop表示):与循环对应

    图形表示:

    alt: