在软件工程中,一个统一建模语言(UML)类图是一种静态结构图通过展示系统的类、它们的属性、操作(或方法)以及对象之间的关系来描述系统的结构。

类图的目的
- 展示系统中分类器的静态结构
- 为其他UML结构图提供基础符号
- 对开发人员和其他团队成员非常有用
- 业务分析师可以使用类图从业务角度建模系统
UML类图由以下部分组成:
- 一组类
- 类之间的关系集合
什么是类?
一组具有相似角色的对象的描述,包括:
- 结构特征(属性):定义类的对象“知道”什么
- 表示对象的状态
- 描述类的结构或静态特征
- 行为特征(操作):定义类的对象“能做什么”
- 定义对象之间的交互方式
- 描述类的行为或动态特征
类的表示法
类的表示法由三个部分组成:
- 类名
- 类名出现在第一个部分中。
- 类属性
- 属性显示在第二个部分中。
- 类型显示在冒号之后。
- 属性映射到代码中的成员变量(数据成员)。
- 类操作(方法)
- 操作显示在第三个分隔区中。它们表示类提供的服务。
- 返回类型出现在方法签名末尾的冒号之后。
- 参数类型出现在参数名称后的冒号之后。
- 操作映射到代码中的类方法。

类的图形表示MyClass如上所示:
- MyClass 有 3 个属性和 3 个操作
- op2 的参数 p3 类型为 int
- op2 返回一个 float
- op3 返回指向 Class6 的指针(由 * 表示)
类关系
一个类可能与其他类存在一种或多种关系。关系可以有以下类型:(请参考右侧图像以获取图形表示)。
| 关系类型 | 图示 |
|---|---|
继承(或泛化):
|
![]() |
简单关联:
|
![]() |
聚合:
|
![]() |
组合:
|
![]() |
依赖:
|
![]() |
关系名称
- 关系名称写在关联线的中间。
- 良好的关系名称在朗读时具有意义:
-
- “每个电子表格 包含 一些单元格”
<li>表达式 求值为 一个值”
-
- 它们通常有一个 小箭头表示读取方向,例如:表达式求值为值,但值不会求值为表达式。小箭头表示读取方向,例如:表达式求值为值,但值不会求值为表达式。

关系 – 角色
- 角色定义了关联方向的目的。
- 角色写在关联线的末端,描述了类在该关系中所扮演的角色。
- 例如,单元格与表达式相关。这种关系的本质是表达式是单元格的公式。
类成员的可见性
在面向对象设计中,属性和操作的可见性被表示出来。UML定义了四种可见性类型:公共, 受保护, – 表示私有属性或操作,以及包.
属性和操作名称前的符号 +、-、# 和 ~ 表示可见性:
- + 表示公共属性或操作
- – 表示私有属性或操作
- # 表示受保护的属性或操作
- ~ 表示包级别的属性或操作
类可见性示例

在上面的例子中:
- MyClassName 的 attribute1 和 op1 是公共的
- attribute3 和 op3 是受保护的
- attribute2 和 op2 是私有的
不同类成员的访问权限如下所示:
| 访问级别 | 公共 (+) | 私有 (-) | 受保护 (#) | 包 (~) |
|---|---|---|---|---|
| 同一类的成员 | 是 | 是 | 是 | 是 |
| 派生类的成员 | 是 | 否 | 是 | 是 |
| 任何其他类的成员 | 是 | 否 | 否 | 仅限同一包 |
多重性
多重性表示一个类的多少个对象参与关系。它可以表示为:
- 恰好 1 – 1
- 零个或一个 – 0..1
- 多个 – 0..* 或 *
- 一个或多个 – 1..*
- 精确数量——例如,3..4 或 6
- 复杂关系——例如,0..1、3..4、6* 表示除2或5以外的任意数量
多重性示例
- 需求:一个学生可以注册多门课程,而一门课程也可以有多个学生注册。
- 在下面的示例中,类图(左)描述了上述需求的静态模型,而对象图(右)展示了软件工程和数据库管理课程注册情况的快照(类图的实例)。

聚合示例——计算机与组件
- 聚合是关联的一种特殊情况,表示“包含”层次结构。
- 聚合是父类,组件是子类。

继承示例——细胞分类
- 继承是关联的另一种特殊情况,表示“种类”层次结构。
- 通过引入分类法,继承简化了分析模型。
- 子类从父类继承属性和操作。

类图——图示工具示例
类图可以包含附加到类或关系上的注释。注释以灰色显示。

从上面的示例中,我们可以将该图解释如下:
- Shape 是一个抽象类。它以斜体显示。
- Shape 是一个父类。Circle、Rectangle 和 Polygon 都从 Shape 继承。换句话说,一个 Circle 是一个 Shape。这是一种泛化/继承关系。
- DialogBox 和 DataController 之间存在关联。
- Shape 是 Window 的一部分。这是一种聚合关系。Shape 可以独立于 Window 存在。
- Point 是 Circle 的一部分。这是一种组合关系。Point 不能脱离 Circle 存在。
- Window 依赖于 Event。但 Event 不依赖于 Window。
- Circle 的属性是半径和中心点。它是一个具体类。
- Circle 的方法包括 area()、circum()、setCenter() 和 setRadius()。
- Circle 中的参数 radius 类型为 float。
- Circle 中的 method area() 返回一个 double 值。
- Rectangle 的属性和方法被隐藏。图中其他一些类也隐藏了它们的属性和方法。
处理复杂系统——使用多个还是单个类图?
在建模大型系统或大型业务领域时,必须考虑许多实体。我们应该使用多个类图还是单个类图?答案是:
- 使用多个类图比在单一图中建模每个实体及其关系要好。
- 将系统分解为多个类图会使理解变得更加容易,尤其是当每个图都是系统特定部分的视觉表示时。
类图在软件开发生命周期中的视角
类图可以在软件开发的各个阶段使用,软件开发生命周期(SDLC)通常会逐步建模三种不同层次的细节(视角):
概念视角:该图被解释为描述现实世界中的事物。因此,如果你从概念视角出发,你会绘制一个表示所研究领域中概念的图。这些概念自然与实现它们的类相关联。这种视角是被视为与语言无关.
规范视角:该图被解释为描述具有规范和接口的软件抽象或组件,而不承诺具体的实现。因此,如果你从规范视角出发,你是在研究软件接口而非实现.
实现视角:该图被解释为描述特定技术及语言的软件实现。因此,如果你从实现视角出发,你是在研究软件实现.
现在尝试绘制一个UML类图
你已经了解了类图是什么以及如何绘制它。是时候自己动手绘制了。获取 Visual Paradigm 社区版,这是一款免费的UML工具,使用免费的类图工具创建你的类图。它易于使用且直观。
免费下载
免费下载




