简介 本文主要介绍UML类图的概念、作用以及使用方法。

本文和大家重点讨论一下UML类图的使用,以及UML类图与设计模式之间的关系。

为什么要学习使用UML类图?

在软件开发工作初期,分析与设计是不可或缺的步骤。

何为分析?在我的理解里,分析就是:根据用户的需求,做出一系列与业务领域相关,与编程技术无关的整理与识别。

而设计,一定是分析结果完成之后,根据分析材料与技术平台,确定软件系统的架构、结构、编码方式及一切与具体技术有关的问题。

可以看到,设计与分析不同,它必须由计算机编程领域相关的人来完成,因为它和技术是息息相关的。

众所周知,UML(Unified Modelling Language,统一建模语言)已经在系统分析与设计中得到了广泛的采用。本文主要讲的是系统设计,不谈系统分析,在系统设计领域,UML类图是最重要也是使用最普遍的图之一。

UML类图一般实现于系统的设计阶段,其主要作用是描述系统的技术架构、结构,用来指导程序员编码。它包括系统中所有有必要指明的实体类、控制类、界面类及与具体平台有关的所有技术性信息。

UML类图是作为程序员编码的依据存在的,UML类图设计好之后,程序员只用专注于系统的编码实现即可,无需去关心系统的健壮性、耦合程度,因为这都是在设计阶段所考虑的。所以,UML类图的设计,可以看做是编程的核心部分。

由于在设计原则、设计模式的学习过程中,会大量使用UML类图,所以在学习设计模式之前,有必要对UML类图有个全面的了解认识。

在UML类图中,每一个矩形代表一个类,矩形从上到下包含类名、属性和方法,且用分割线隔开,如下图所示:

依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。

大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。

在UML类图中依赖关系用虚线箭头表示。

从上图我们可以看到,司机的驾驶方法只有传入了一个汽车对象才能发挥作用,因此我们说司机类依赖于汽车类。

接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现(Realization)关系。如下图,汽车和火车都实现了交通工具接口。

在UML类图中用带空心三角形的虚线表示实现关系。

我们拿生活中常有的点外卖举例,每位顾客都有一个地址,那么在UML类图中,每位顾客都关联一个地址,而地址是单独存在的,这就是单向关联。如下图表示:

在UML类图中单向关联用一个带箭头的直线表示。

在上图中,每位顾客都会购买一份快餐外卖,快递员送快餐时,每个快递也都有个顾客,顾客与快餐这两个对象互相持有对方类型的成员变量,那么这两个类就是双向关联的。

在UML类图中,双向关联用一个不带箭头的直线表示。

聚合关系表示一种弱的‘拥有’关系,即has-a的关系,强调的是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在,这 两个对象具有各自的生命周期。

例如汽车与发动机,汽车”拥有”发动机,但发动机脱离汽车也是可以单独存在的。类图如下:

组合关系与聚合关系见得最大不同在于:这里的“部分”脱离了“整体”便不复存在。比如下图:

显然,嘴是头的一部分,并且不能脱离了头而单独存在。