本文由 简悦 SimpRead 转码, 原文地址 https://www.cnblogs.com/shindo/p/5579191.html

五分钟读懂 UML 类图

平时阅读一些远吗分析类文章或是设计应用架构时没少与 UML 类图打交道。实际上,UML 类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧:

一、类的属性的表示方式

在 UML 类图中,类使用包含类名、属性 (field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个 Employee 类,它包含 name,age 和 email 这 3 个属性,以及 modifyInfo() 方法。

那么属性 / 方法名称前加的加号和减号是什么意思呢?它们表示了这个属性或方法的可见性,UML 类图中表示可见性的符号有三种:

· + :表示 public

· - :表示 private

· #:表示 protected(friendly 也归入这类)

因此,上图中的 Employee 类具有 3 个私有属性和一个公有方法。

实际上,属性的完整表示方式是这样的:

可见性  名称 :类型 [= 缺省值]

中括号中的内容表示是可选的

二、类的方法的表示方式

上图中我们已经看到了方法的表示形式。实际上,方法的完整表示方式如下:

可见性  名称 (参数列表) [ : 返回类型]

同样,中括号中的内容是可选的。

比如在下图的 Demo 类中,定义了 3 个方法:

· public 方法 method1 接收一个类型为 Object 的参数,返回值类型为 void

· protected 方法 method2 无参数,返回值类型为 String

· private 方法 method3 接收类型分别为 int、int[] 的参数,返回值类型为 int

三、类与类之间关系的表示方式

1、关联关系

关联关系又可进一步分为单向关联、双向关联和自关联。

(1)单向关联

我们可以看到,在 UML 类图中单向关联用一个带箭头的直线表示。上图表示每个顾客都有一个地址,这通过让 Customer 类持有一个类型为 Address 的成员变量类实现。

(2)双向关联

从上图中我们很容易看出,所谓的双向关联就是双方各自持有对方类型的成员变量。在 UML 类图中,双向关联用一个不带箭头的直线表示。上图中在 Customer 类中维护一个 Product[] 数组,表示一个顾客购买了那些产品;在 Product 类中维护一个 Customer 类型的成员变量表示这个产品被哪个顾客所购买。

(3)自关联

自关联在 UML 类图中用一个带有箭头且指向自身的直线表示。上图的意思就是 Node 类包含类型为 Node 的成员变量,也就是 “自己包含自己”。

2、聚合关系

上图中的 Car 类与 Engine 类就是聚合关系(Car 类中包含一个 Engine 类型的成员变量)。由上图我们可以看到,UML 中聚合关系用带空心菱形和箭头的直线表示。聚合关系强调是 “整体” 包含 “部分”,但是“部分” 可以脱离 “整体” 而单独存在。比如上图中汽车包含了发动机,而发动机脱离了汽车也能单独存在。

3、组合关系

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

显然,嘴是头的一部分且不能脱离了头而单独存在。在 UML 类图中,组合关系用一个带实心菱形和箭头的直线表示。

4、依赖关系

从上图我们可以看到,Driver 的 drive 方法只有传入了一个 Car 对象才能发挥作用,因此我们说 Driver 类依赖于 Car 类。在 UML 类图中,依赖关系用一条带有箭头的虚线表示。

5、继承关系

继承关系对应的是 extend 关键字,在 UML 类图中用带空心三角形的直线表示,如下图所示中,Student 类与 Teacher 类继承了 Person 类。

6、接口实现关系

这种关系对应 implement 关键字,在 UML 类图中用带空心三角形的虚线表示。如下图中,Car 类与 Ship 类都实现了 Vehicle 接口。

到了这里,UML 类图中最常见的表示方式我们就介绍完了,有了这些我们就能读懂常见的 UML 类图了,剩下的遇到时再查即可。

三、参考资料

http://www.uml.org.cn/oobject/201211231.asp