在面向對象編程(OOP)中,對象之間存在多種關系,用來表達它們如何協(xié)作、依賴或組成更復雜的結構。以下是常見的幾種關系的含義和區(qū)別:
一、依賴關系(Dependency)
A使用B,但 B 不是 A 的屬性。
通常是方法參數、局部變量或臨時使用某個對象的功能。
表示 “A 依賴于 B 的功能”,耦合程度最弱。
UML 表示法:虛線箭頭:A ---> B
二、關聯(lián)關系(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
總結
關系? ? ? ? ? |? ? ? ? ? ? ? ? 關鍵點? ? ? ? ? ? ? ? ? |? ? ? 表示
------------|------------------------------|-----------------
依賴? ? ? ? ? | 臨時使用、非字段? ? ? ? ? ? ?| 虛線箭頭
關聯(lián)? ? ? ? ?| 擁有字段,生命周期獨立? | 實線箭頭
聚合? ? ? ? ?| 整體-部分,生命周期獨立 | 空心菱形
組合? ? ? ? ?| 整體-部分,生命周期綁定 | 實心菱形
繼承? ? ? ? ?| “是一個”的關系? ? ? ? ? ? ? ? ? ? | 空心三角箭頭
實現? ? ? ? ?| 接口實現? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 虛線三角箭頭