跳转到内容

Has-a

本页使用了标题或全文手工转换
维基百科,自由的百科全书

has-a(或是has_ahas a)是物件組合英语Object composition的關係[註 1],這是一種以組合為概念的關係[註 2]

主要是用在資料庫設計英语Database design面向对象程序设计以及面向对象的系统分析的程式設計領域,就是一個物件(部件/組合成分/成員)「屬於」另一個物件(複合型態),而且是根據物件的所有權規則來執行動作。這個組合的關係也就是一個物件成為另一個物件的「一部分」,例如物件A成為物件B的一部分也就是物件B的成員。

簡單來說,has-a關係對於物件來說就是物件的成员变量,或是成員物件。多個has-a關係會組成產生一個獨佔性的階層結構。

相關概念

分類性階層(子类型)的is-a關係與has-a是相互對比的概念[註 3]。存在明確的is-a關係才較為適合使用繼承方法。繼承的問題在於各項物件緊密連接而難以修改,還有過度使用會導致混亂的階層結構。以組合的概念來說,只要組合簡單物件即可達成複雜的物件[1]

标准模板库容器是has-a關係的最佳範例。

範例

ER模型

ER模型

資料庫的has-a關係通常以ER模型來表示。

如圖所示,以大型多人在线角色扮演游戏為例,一個遊戲帳號可以建立多個遊戲角色,這表示遊戲帳號與遊戲角色兩者之間存在has-a關係[註 4][註 5]

UML類別圖

組合與聚合的差異

统一建模语言類別圖可以用來表示物件導向程式設計的has-a關係。如圖所示,汽車有化油器的has-a關係,或者汽車的組合部件之一是化油器。汽車方塊右方的黑色菱形表示組合關係。

池塘與鴨子兩者用白色菱形來表示聚合關係,池塘包含鴨子但是無所有權。組合關係有所有權,聚合關係則無所有權。

註釋

  1. ^ 關係(英語:relationship
  2. ^ 組合(英語:composition
  3. ^ is-a關係:繼承從屬關係,多個抽象概念之間的歸類關係,物件導向程式設計的繼承概念。
  4. ^ 遊戲帳號(英語:Account
  5. ^ 遊戲角色(英語:Character

參考資料

相關條目