UML
UML类图是面向对象系统建模的核心工具,它通过不同的关系来描述类与类、类与接口之间的静态联系。下面这个表格帮你快速把握这六种核心关系。
关系类型
定义与关键区别
代码中的体现
UML表示
生活化示例
依赖 Dependency
一种临时性的“使用”关系。如果类A的变化会影响类B,则B依赖于A。
局部变量、方法的参数、静态方法调用
带箭头的虚线 ---->
人过河需要船(人依赖船)
关联 Association
一种结构性的长期“拥有”关系,比依赖更强。可以是单向或双向的。
成员变量(实例变量)
带普通箭头的实线 —->或无线/双箭头的实线
老师与学生(老师拥有学生列表)
聚合 Aggregation
一种“整体-部分”的弱关联关系,部分可以独立于整体存在。
成员变量(通过Setter方法或构造函数参数传入)
带空心菱形的实线,菱形指向整体 ◇—-
汽车与轮胎(轮胎可以卸下装到别的车上)
组合 Composition
一种“整体-部分”的强关联关系,部分与整体共存亡,生命周期一致。
成员变量(在整体的构造函数中实例化)
带实心菱形的实线,菱形指向整体 ◆—-
公司与部门(公司没了,部门也随之消失)
泛化 Generalization
继承关系,表示类与类之间的“is-a”关系。
在面向对象语言中使用extends(Java)或 :(C++)等关键字继承
带空心三角箭头的实线,箭头指向父类 ⏶——
老虎是动物的一种
实现 Realization
类实现接口的关系,约定类将实现接口的所有特征和行为。
在面向对象语言中使用implements(Java)等关键字实现接口
带空心三角箭头的虚线,箭头指向接口 ⏶ - - ->
大雁实现了“飞翔”接口
💎 核心关系梳理与记忆
理解这些关系的关键在于把握它们所体现的耦合度(类之间连接的紧密程度)强弱。这些关系的强弱顺序为:泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
。
区分聚合与组合:判断核心是“部分能否脱离整体而独立存在”。例如,轮胎可以从未装到车上,或从一辆车换到另一辆车,这是聚合;而人的心脏不能离开身体独立工作,这是组合。从代码来看,组合关系中的部分通常在整体的构造函数内部被实例化,表明它们同时诞生
。
区分关联与依赖:判断核心是“是否以成员变量(属性)的形式存在”。关联是一种长期、稳定的结构关系,体现为类的属性;而依赖是一种临时性的使用关系,主要体现在方法内部
。
希望这些解释能帮助你更清晰地理解UML类图中的各种关系。如果你对某个具体关系或应用场景有进一步的疑问,我们可以继续探讨。
浙公网安备 33010602011771号