看懂UML时序图和类图

前言

最近在工作中第一次接触UML相关内容,本篇为学习笔记,写得不好,还请大神们多多指教。以下是本篇文章的大体结构。

看懂UML时序图和类图

UML

1. 定义

以下定义引自维基百科:

统一建模语言(Unified Modeling Language,缩写UML)是非专利的第三代建模和规约语言。UML是一种开放的方法,用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法。

2. 模型

UML中的三个主要模型:

  1. 功能模型:从用户的角度展示系统的功能,包括用例图
  2. 对象模型:采用对象、属性、操作、关联等概念展示系统的结构和基础,包括类别图、对象图
  3. 动态模型:展示系统的内部行为,包括序列图(时序图)、活动图和状态图。

3. 图形

在UML 2.2中一共定义了14种图示。这里只介绍序列图和类图。

序列图

1. 定义

序列图(Sequence Diagram),也叫做循序图,是一种UML行为图。大多数人翻译为时序图(维基百科上称这种叫法并不准确),UML规范中对Sequence Diagram是这么解释的:

A sequence diagram describes an Interaction by focusing on the sequence of Messages that are exchanged, along with their corresponding Occurrence Specifications on the Lifelines

事实上,序列图与我们中学时代学的流程图大同小异,它描述的是消息在生命线上按照约定顺序执行一种交互行为。它是属于一种动态模型。

2. 元素

  1. 对象(Object)
  2. 生命线(Lifeline)
  3. 消息(Message)
  4. 激活(Activation)

3. 示例图

时序图示例

类图

1.定义

类图是统一建模语言中一种对象模型,这种图描述的是系统的类集合,类的属性和类之间的关系。

2. 元素

类图示例

上图是类图的示例,一个类有三个区域,最上面的是类名称,中间部分是类的属性,底部是类的方法。

UML提供机制,以代表类的成员,如属性和方法。指定一个类成员(即任何属性和方法)的可见性有下列符号:

1
2
3
4
5
+ public 公有
- private 私有
# protected 保护
~ 包(即对包内其他成员可见)
/ 推导(即由其他属性推导得出,不需要直接给定其值)

3. 类图中的关系

  1. 泛化(Generalization)

即继承(extend)的反方向。在UML类图中用带空心三角形的直线表示。如下图所示:

Generalization

  1. 实现(Realization)

即对应implements关键字。用带空心三角形的虚线表示

Realization

  1. 依赖(Dependency)

依赖关系可以理解为一个类A使用到了另一个类B,被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。

这种使用关系是具有偶然性、临时性的、非常弱的

但是B类的变化会影响到类A,表现在代码层面:类B作为参数被类A在某个方法中使用。用带燕尾箭头的虚线表示。

Dependency

  1. 聚合(Aggregate)

聚合是表示整体与部分的一类特殊的关联关系,是弱的包含关系,成分类可以不依靠聚合类而单独存在,可以具有各自的生命周期,部分可以属于多个整体,也可以为多个整体对象共享。用以带空心的菱形剪尾的实线表示。

Aggregation

  1. 组合(Composition)

组合是一类强的整体与部分的包含关系。成分类必须依靠合成类而存在,整体与部分是不可分的(这是与聚合关系最大的区别),整体的生命周期结束也就意味着部分的生命周期结束。图形中用带实心的菱形剪尾的实线表示。

Composition

  1. 关联(Association)

关联是两个类之间,或类与接口之间一种强依赖关系,是一种长期的稳定关系。关联关系又分为单向关联、双向关联和自关联。