在面向对象编程(OOP)中,对象之间存在多种关系,用来表达它们如何协作、依赖或组成更复杂的结构。以下是常见的几种关系的含义和区别:
一、依赖关系(Dependency)
A使用B,但 B 不是 A 的属性。
通常是方法参数、局部变量或临时使用某个对象的功能。
表示 “A 依赖于 B 的功能”,耦合程度最弱。
UML 表示法:虚线箭头:A ---> B
二、关联关系(Association)
A拥有B,B 是 A 的属性。
表示“有一个”的关系,可双向或单向。
UML 表示法:实线箭头或线:A ──> B(单向) 或A <──> B(双向)
三、聚合关系(Aggregation)
A 和 B 是整体与部分的关系,B 属于 A,但 B 的生命周期独立于 A。
表示“弱拥有”,A 被销毁时 B 可能依然存在。
空心菱形:Department ◇─── Employee
四、组合关系(Composition)
是聚合的特殊形式,强拥有。
A 和 B 是整体与部分的关系,B 的生命周期完全依赖 A,A 销毁,B 必然销毁。
实心菱形:House ◆─── Room
五、继承关系(Generalization / Inheritance)
子类继承父类。在 Go 中表现为接口实现或结构体嵌套。
UML:空心三角箭头:Dog ─▷ Animal
六、 实现关系(Realization)
类实现接口,或者某种接口适配。
Go 语言中是结构体实现接口。
UML 表示:虚线三角箭头:A - -▷ Interface
总结
关系 | 关键点 | 表示
------------|------------------------------|-----------------
依赖 | 临时使用、非字段 | 虚线箭头
关联 | 拥有字段,生命周期独立 | 实线箭头
聚合 | 整体-部分,生命周期独立 | 空心菱形
组合 | 整体-部分,生命周期绑定 | 实心菱形
继承 | “是一个”的关系 | 空心三角箭头
实现 | 接口实现 | 虚线三角箭头