文章目录
- 💡 软考必考点:计算机和鼠标到底是啥关系?一文搞懂UML类图四大关系!
- 🎯 核心判定法则:一句话口诀
- 1. 泛化/继承关系 (Generalization)
- 2. 依赖关系 (Dependency)
- 3. 关联关系 (Association) —— 最宽泛的“Has-a”
- 🔥 重点难点:聚合 vs 组合 (Aggregation vs Composition)
- ✅ 聚合关系 (Aggregation) —— 弱拥有
- ❌ 组合关系 (Composition) —— 强拥有
- 📝 总结一张表 (建议截图保存)
- 💡 避坑指南
💡 软考必考点:计算机和鼠标到底是啥关系?一文搞懂UML类图四大关系!
在备考软件设计师(或系统架构设计师)时,面向对象技术绝对是重头戏。而其中,UML类图中类与类的关系又是错题率极高的“坑”。
今天我们就拿一道经典真题来彻底拆解一下:“计算机由CPU、内存、硬盘、鼠标等构成,请问计算机类与鼠标类之间是什么关系?”
很多同学第一反应选“关联”,结果错了;有的选“组合”,也错了。正确答案其实是聚合关系。
为什么?这几种关系到底怎么分?别急,看完这篇你就通透了!👇
🎯 核心判定法则:一句话口诀
在UML类图中,区分关系主要看两个维度:语义(是不是)和生命周期(能不能独立存活)。
1. 泛化/继承关系 (Generalization)
- 关键词:Is-a(是一个)
- 判定:如果A是B的一种特殊类型,那就是继承。
- 例子:
- 猫是动物→ \rightarrow→继承
- 鼠标是计算机?→ \rightarrow→❌ 显然不是,排除!
2. 依赖关系 (Dependency)
- 关键词:Use-a(用一下)
- 判定:一种临时的、偶然的关系。通常表现为:B是A某个方法的参数,或者A在方法里局部使用了B。
- 例子:
- 司机开车→ \rightarrow→司机类的方法里传入了一个“车”对象作为参数。
- 人喝水→ \rightarrow→喝完了水就没了联系,不是长期的结构关系。
3. 关联关系 (Association) —— 最宽泛的“Has-a”
- 关键词:Has-a(拥有/认识)
- 判定:类A持有类B的引用(作为成员变量),表示一种长期的连接。
- 注意:聚合和组合其实都是关联的特例。但在考试中,如果选项里有更精准的“聚合”或“组合”,优先选精准的;如果没有,才选关联。
- 例子:
- 老师教学生→ \rightarrow→老师对象里有学生列表。
🔥 重点难点:聚合 vs 组合 (Aggregation vs Composition)
这是最容易混淆的一对,也是本题的关键!它们都是“整体-部分”关系,区别在于部分能否脱离整体独立存在。
✅ 聚合关系 (Aggregation) —— 弱拥有
- 特征:同生共死?NO!部分可以脱离整体独立存在。
- 图示:空心菱形 ◇
- 本题分析:
- 计算机(整体)由鼠标(部分)组成。
- 如果把鼠标拔下来,鼠标还是鼠标,可以插到别的电脑上,甚至放在桌上当摆设。它的生命周期不依赖于这台特定的计算机。
- 结论:这就是典型的聚合关系!
- 其他例子:
- 雁群与大雁(大雁飞走还活着)
- 汽车与轮胎(轮胎可拆卸更换)
- 学校与老师(老师离职了还是老师)
❌ 组合关系 (Composition) —— 强拥有
- 特征:同生共死?YES!部分不能脱离整体存在,整体销毁,部分必须销毁。
- 图示:实心菱形 ◆
- 反例分析:
- 如果题目问“计算机类与主板上的南桥芯片类”或者“人的心脏类”,那就是组合。
- 因为把电脑拆了,南桥芯片通常就废了或者不再作为独立功能体存在;人没了,心脏也就停止功能了。
- 结论:这种“生死与共”的才是组合。
📝 总结一张表 (建议截图保存)
| 关系类型 | 关键词 | 强弱程度 | 典型例子 | 本题适用性 |
|---|---|---|---|---|
| 继承 | Is-a (是一个) | 最强 | 狗是动物 | ❌ 鼠标不是计算机 |
| 组合 | Contains-a (强包含) | 强 (同生共死) | 鸟与翅膀、公司与部门 | ❌ 鼠标拔下来还能用 |
| 聚合 | Has-a (弱包含) | 中 (可分离) | 计算机与鼠标、车队与车 | ✅正确答案 |
| 关联 | Link (连接) | 弱 (长期持有) | 老师与学生、用户与订单 | ⚠️ 太宽泛,不如聚合精准 |
| 依赖 | Use-a (使用) | 最弱 (临时) | 司机开车、人喝水 | ❌ 鼠标是电脑的组成部分,不仅仅是临时使用 |
💡 避坑指南
做题时看到“由…构成”、“包含…”这类词,首先要在聚合和组合之间二选一。
- 问自己一个问题:“把这个零件拆下来,它还能独立存在吗?”
- 能→ \rightarrow→聚合(空心菱形)
- 不能→ \rightarrow→组合(实心菱形)
这道题选C. 聚合关系,你学会了吗?