UML 类图简介

本文最后更新于:2021年12月11日 上午

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

0. 简介

UML分为模型和图形两大类。区分UML模型和UML图是非常重要的,UML图(包括用例图、协作图、活动图、序列图、部署图、构件图、类图、状态图)是模型中信息的图表表达形式,但是UML模型独立于UML图存在。

0.1 核心模型

在UML系统开发中有三个主要的模型:

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

0.2 图示

UML2.2中一共定义了14种图示。

  • 结构性图形(Structure diagrams)强调的是系统式的建模:
  • 静态图(static diagram):包括类图、对象图、包图
  • 实现图(implementation diagram):包括组件图、部署图
  • 剖面图
  • 复合结构图
  • 行为式图形(Behavior diagrams)强调系统模型中触发的事件
  • 活动图
  • 状态图
  • 用例图
  • 交互性图形(Interaction diagrams),属于行为图形的子集合,强调系统模型中的资料流程
  • 通信图
  • 交互概述图
  • 时序图
  • 时间图

0.3 UML类图作用

UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是软件架构层次方面已经被验证有效。
我们这次介绍的主要是类图,为了解析项目的系统结构和架构层次,可以简洁明了的帮助我们理解项目中类之间的关系。
类图的作用:
(1):在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解;
(2):类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型。

0.4 类图格式

在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,
举个栗子。一个Animal类,它包含name, age, state, isPet 这4个属性,以及name相关方法。

class Animal: NSObject {
    public var name: String?
    internal var isPet: Bool?
    fileprivate var state: String?
    private var age: Int? = 0

    override init() {
        self.name = "no name"
        self.age = 0
        self.isPet = true
        self.state = "dead"
    }

    public func getName() -> String {
        return self.name!
    }

    internal func setName(name: String?) {
        self.name = name
    }
}

1.类图基础属性

类图的表示

1
2
3
4
5
-表示private  
#表示protected
~表示default,也就是包权限
_下划线表示static
斜体表示抽象

2.类与类之间关系

在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)

类与类之间的关系

2.1泛化

介绍:
泛化(Generalization)表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系

(1)继承

介绍:
继承表示是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。
表示方法:
继承使用空心三角形+实线表示。
示例:
鸟类继承抽象类动物

继承关系

(2)实现

介绍:
实现表示一个class类实现interface接口(可以是多个)的功能。
表示方法:

1)矩形表示法

使用空心三角形+虚线表示
比如:大雁需要飞行,就要实现飞()接口

矩形表示法

2)棒棒糖表示法

使用实线表示

棒棒糖表示法

2.2依赖

介绍:
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
表示方法:
依赖关系用虚线箭头表示。
示例:
动物依赖氧气和水。调用新陈代谢方法需要氧气类与水类的实例作为参数

依赖关系

2.3关联

介绍:
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
表示方法:
关联关系用实线箭头表示。
示例:
企鹅需要‘知道’气候的变化,需要‘了解’气候规律。当一个类‘知道’另一个类时,可以用关联。

关联关系

2.4聚合

介绍:
表示一种弱的‘拥有’关系,即has-a的关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。 两个对象具有各自的生命周期
表示方法:
聚合关系用空心的菱形+实线箭头表示。
示例:
每一只大雁都属于一个大雁群,一个大雁群可以有多只大雁。当大雁死去后大雁群并不会消失,两个对象生命周期不同。

聚合关系

2.5组合

介绍:
组合是一种强的‘拥有’关系,是一种contains-a的关系,体现了严格的部分和整体关系,部分和整体的生命周期一样
表示方法:
组合关系用实心的菱形+实线箭头表示,还可以使用连线两端的数字表示某一端有几个实例。
示例:
鸟和翅膀就是组合关系,因为它们是部分和整体的关系,并且翅膀和鸟的生命周期是相同的。

组合关系

参考资料