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:

Comment and share

UML图表示常见的类之间的关系

类之间的关系常见的主要包括以下几种:

  • 继承
  • 实现
  • 依赖
  • 关联
  • 聚合
  • 组合

继承(inheritance)

继承的概念大家都比较熟悉,他主要指的是派生类继承父类或者接口之间的继承,派生类继承了父类中原有的功能,并在此基础上添加了新的功能。例如public继承实质上是一种is-a的关系,(子类is a 基类)

图形表示:

实现(implement)

实现指的是一个类实现一个接口,一个类可以实现一个或者多个接口。实现是类和接口之间常见的一种关系。在java中通常通过implements实现。

图形表示:

依赖

依赖指的是一个类A使用另外一个类B,这种该使用关系是偶然性的,临时的,非常弱的一种关系。但是类B的变化会影响到类A;比如人要使用船过河中,这个时候人和船就是一种依赖关系。具体表现在代码中就是B是类A中的某个方法的参数。

图形表示:

关联

关联是指俩个类之间的或者类和接口之间的一种强依赖关系。而这种强依赖关系不是偶然性的,而是长期的,而且双方的关系是平等的,关联可以是单向的,也可以是双向的。具体表现在代码中是(1):B以类属性的方式出现在类A中(2)A引用类型为B的全局变量

图形表示:

聚合

聚合是关联关系的一种特例,它表现的是一种has-a的关系,即整体与部分的关系,此时整体与部分可以是分离的,他们可以具有各自的声明周期,部分可以属于多个整体对象,也可以被多个整体对象共享;如计算机与CPU的关系聚合中部分和整体都有各自的生命周期,并且互相影响

图形表示:

组合

组合也是关联的一种特例,它体现的是一种contain-a的关系,这种关系比聚合强;这个时候整体和部分是不可分离的,整体的声明周期与部分的声明周期相同,当整体的周期结束时,部分的周期也随之结束。如人和大脑的关系

图形表示:

依赖性强弱:

组合>聚合>关联>依赖

Comment and share

  • page 1 of 1

魏传柳(2824759538@qq.com)

author.bio


Tencent


ShenZhen,China