跳至內容

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

參考文獻

相關條目