UML类图详解

参考来源:

学习并理解 23 种设计模式

在线画UML图的工具

visual-paradigm Online

概览

A class diagram describes the structure of an object-oriented system by showing the classes in that system and the relationships between the classes. A class diagram also shows constraints, and attributes of classes.

类图通过显示该系统中的类以及这些类之间的关系来描述面向对象系统的结构。类图还显示了类的约束和属性。UML类图通常长这样:

img

关系

1.1 Generalization/泛化/继承

泛化是一般事物(称为超类)与特定事物(称为子类)之间的关系。泛化有时被称为“是一种”关系,是通过继承过程建立的。在这类结构中,子类实现具体细节,父类提供通用模板。

继承用一条带空心箭头的直接表示。

img

1.2 实现

实现是两件事之间的关系,其中一件事(一个接口)指定了一个契约,而另一件事(一个类)则通过实现该契约中指定的操作来保证执行该契约。

实现关系用一条带空心箭头的虚线表示。

img

1.3 组合

与聚合关系一样,组合关系同样表示整体由部分构成的语义。比如公司由多个部门组成,但组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在了。例如,公司不存在了,部门也将不存在了。

img

1.4 聚合

聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义,例如一个部门由多个员工组成。与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。例如,部门撤销了,人员不会消失,他们依然存在。

img

1.5 关联

关联关系是用一条直线表示的,它表示一个对象由其他对象组成,表示两个类之间的“具有【has-a】”或“整体/部分”关系,在关联关系中,整个类的对象都将部分类的对象作为实例数据。它一般用来定义对象之间静态的、天然的结构, 所以,关联关系是一种“强关联”的关系。

关联分为两种,单向关联双向关联

单向关联 (Unidirectional association)

在单向关联中,两个类是相关的,但是只有一个类知道该关系的存在。如下图,表示 A 知道 B ,但 B 不知道 A 。

img

双向/默认关联(Bidirectional/standard association)

关联关系默认不强调方向,表示对象间相互知道,所以也叫双向。如果特别强调方向,则用单向关联。

img

1.6 依赖

依赖关系是用一套带箭头的虚线表示的,如A依赖于B,他描述一个对象在运行期间会使用到另一个对象的关系。

与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化,依赖关系也可能发生变化。显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生。

img

符号

一个类的UML表示形式是一个矩形,其中包含垂直叠放的三个部分,分别表示类名、属性和方法,如图所示:

UML Class Diagram Example

Multiplicity

这些符号表示链接到另一类的一个实例的一个类的实例数。例如,一个公司将有一个或多个雇员,但是每个雇员只能为一个公司工作。

Multiplicity Example

Visibility/可见性

可见性用于表示谁可以访问。包含在用+,-,#和〜表示的类中的信息,如图所示:

Visibilitiy Example (Attribute)

示例

销售订单系统

下面的类图示例显示了销售订单系统中涉及的类。注意在类模型中使用<< enumeration >>类。

Class Diagram Example - Sales Order System

飞行管理相关的类

下面的类图示例显示了一组与飞行管理相关的类。这些类归为一个包。

Class Diagram Example - Flight