【面向对象】UML结构图:类图(类的关系:依赖/关联/聚合/组合/泛化/实现)

📅 2026/7/31 18:18:59 👁️ 阅读次数 📝 编程学习
【面向对象】UML结构图:类图(类的关系:依赖/关联/聚合/组合/泛化/实现)

考点频率:★★★★★(下午题必考,类图是UML建模的核心,六大关系符号辨识是选择题高频考点)
难度:⭐⭐⭐⭐
建议:重点区分“聚合 vs 组合”的生命周期差异,以及“依赖 vs 关联”的强度差异,别让符号在脑子里“撞车”

1️⃣ 类图到底在画什么?

类图(Class Diagram)是UML中使用频率最高、最重要的图。它描述系统的静态结构——即系统中有哪些类、类有哪些属性和方法,以及这些类之间如何相互关联。

想象一下,你要装修房子,类图就是房子的“户型图”。户型图上标明了有几室几厅(类)、每个房间有多大(属性)、房间门朝哪开(方法),以及房间与房间之间的位置关系(关系)。

在软考下午题中,通常会给你一段需求描述,让你识别类之间的关系,或者在已有的类图上补全缺失的关系线和注释。所以,看懂六大关系的符号和语义,是下午题拿分的硬门槛

2️⃣ 类图的基本组成(快速复习)

在UML类图中,一个类的图标是一个矩形,通常分为三个部分:

部分内容示例
顶部类名(通常加粗/居中)订单
中部属性(成员变量)- 订单编号: 字符串
底部方法(成员函数)+ 计算总价(): 浮点数

符号速记-表示private(私有),+表示public(公有),#表示protected(受保护)。

3️⃣ 六大关系深入解析(重头戏)

这六种关系在类图中通过不同的连线符号来区分。务必记住:箭头永远指向“被依赖/被关联/被继承/被实现”的一方

3.1 依赖(Dependency)—— 虚线箭头------>

  • 语义:一个类暂时性地使用另一个类。这种关系通常体现在局部变量、方法参数、静态方法调用上。
  • 特点:关系最弱,类A的变化可能会影响类B,反之不一定。A不持有B的引用。
  • 示例需要买票(车票)。车票只是人买票方法的参数,人不会把车票揣在兜里当自己的属性。
  • 符号B - - - - > A(B依赖A)。

3.2 关联(Association)—— 实线箭头———>

  • 语义:一个类长期性地持有另一个类的引用,两者之间存在结构化的关系。它描述了“A认识B”。
  • 特点:比依赖强。关联可以是单向(A认识B,B不认识A)或双向(A认识B,B也认识A),双向关联在软考中常有两条箭头或一条无箭头的实线。
  • 示例学生班级。学生类里有一个班级 我的班级的成员变量。
  • 符号B ———> A(B关联A)。

3.3 聚合(Aggregation)—— 空心菱形实线◇———

  • 语义:表示“整体-部分”的关系,但部分可以独立于整体存在(生命周期不同步)。菱形画在整体那一端。
  • 特点:一种特殊的关联(关联的强化版),代表“has-a”关系,但关联度不紧密。整体没了,部分还能接着用。
  • 示例汽车◇———轮胎。汽车报废了,轮胎(假设完好)可以拆下来给别的汽车用。
  • 符号整体 ——◇——> 部分

3.4 组合(Composition)—— 实心菱形实线◆———

  • 语义:表示“整体-部分”的关系,但部分无法独立于整体存在(生命周期同步)。菱形画在整体那一端。
  • 特点:最强的整体-部分关系。整体负责创建和管理部分,整体销毁时,部分也随之销毁(同生共死)。
  • 示例公司◆———部门。公司注销了,部门自然就不存在了(除非部门独立成新公司,但那在业务逻辑里视为解散)。
  • 符号整体 ——◆——> 部分

3.5 泛化(Generalization)—— 实线空心三角箭头———▷

  • 语义:表示继承关系,即“is-a”关系。子类继承父类的属性和方法。
  • 特点:从子类指向父类。箭头是空心三角形。
  • 示例———▷动物
  • 符号子类 ——▷ 父类

3.6 实现(Realization)—— 虚线空心三角箭头---▷

  • 语义:表示类与接口之间的实现关系。类实现了接口中定义的所有方法。
  • 特点:从实现类指向接口。箭头是空心三角形。
  • 示例—▷宠物(接口)。
  • 符号实现类 ---▷ 接口

特别注意:在软考下午题中,如果不确定该画聚合还是组合,就画关联。关联是语义最宽泛的关系,能覆盖聚合和组合的部分含义。这样不容易被扣分,因为关联是所有结构化关系的“底裤”。

4️⃣ 一张表背下所有符号(重点)

关系英文符号连接线菱形/三角箭头方向关系强弱
依赖Dependency------>虚线指向被使用者最弱
关联Association———>实线指向被持有者
聚合Aggregation◇———实线空心菱形指向部分(被包含者)
组合Composition◆———实线实心菱形指向部分(被包含者)
泛化Generalization———▷实线空心三角(朝左)指向父类
实现Realization---▷虚线空心三角(朝左)指向接口

5️⃣ 最容易混淆的三对关系(软考陷阱)

  1. 依赖 vs 关联(考察重点)
  • 依赖是“用完就扔”(作为方法参数传入)。
  • 关联是“长期持有”(作为类的成员变量)。
  • 做题技巧:题目描述中出现“作为参数”、“局部变量” → 选依赖
  1. 聚合 vs 组合(考察重点)
  • 聚合是“弱绑定”:部分离开整体,依然有存在的意义(雁群和大雁)。
  • 组合是“强绑定”:部分离开整体,毫无意义或同时消亡(人脑和人体)。
  • 做题技巧:题目描述出现“包含”、“由…组成”、“同生共死” → 选组合;出现“聚集”、“集合”、“组装”且部分可独立 → 选聚合
  1. 泛化 vs 实现(符号区分)
  • 线型不同:一个实线(泛化),一个虚线(实现)。
  • 三角相同(都是空心三角)。
  • 做题技巧:看目标端是还是接口。类与类 →泛化;类与接口 →实现

6️⃣ 经典例题

例题1(下午题常见形式):在UML类图中,若类A的方法中包含了类B的局部变量,则类A和类B之间的关系是( )。

A. 关联
B. 依赖
C. 聚合
D. 实现

解析:局部变量是“用完就扔”的临时关系,属于依赖。选B


例题2(高频陷阱):某系统中定义了“订单”类和“订单明细”类,每个订单包含多个订单明细,当订单被删除时,其订单明细也必须被删除。这两个类之间的关系应为( )。

A. 关联
B. 聚合
C. 组合
D. 依赖

解析:订单删了,明细也必须删(同生共死),生命周期一致 →组合。注意题干说“必须被删除”是强绑定。选C

7️⃣ 记忆口诀

虚线箭头是依赖,用完即走不欠债。
实线箭头是关联,长期持有当成员。
空心菱形是聚合,分开还能单独活。
实心菱形是组合,同生共死跑不脱。
实线三角是泛化,子承父业属 IS-A。
虚线三角是实现,类把接口契约签。

8️⃣ 小测验(评论区对答案)

某UML类图中,类A与类B之间的连线为A ———◇ B。请判断:

  1. 该符号表示( )关系。
  2. 如果B类对象被销毁,A类对象( )。
    A. 一定同时被销毁 B. 不一定同时被销毁

🔔本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #UML类图 #依赖 #关联 #聚合 #组合 #泛化 #实现 #软考备考