類之間的關係
UML把類之間的關係分爲以下5種.
● 關聯:類A與類B的實例之間存在特定的對應關係
● 依賴:類A訪問類B提供的服務
● 聚集:類A爲整體類,類B爲局部類,類A的對象由類B的對象組合而成
● 泛化:類A繼承類B
● 實現:類A實現了B接口
關聯(Association)
關聯指的是類之間的特定對應關係,在UML中用帶實線的箭頭表示。按照類之間的數量對比,關聯
可以分爲以下三種:
● 一對一關聯
● 一對多關聯
● 多對多關聯
注意:關聯還要以分爲單向關聯和雙向關聯
依賴(Dependency)
依賴指的是類之間的調用關係,在UML中用帶虛線的箭頭表示。如果類A訪問類B的屬性或者方法,
或者類A負責實例化類B,那麼可以說類A依賴類B。和關聯關係不同,無須在類A中定義類B類型的屬性。
聚集(Aggregation)
聚集指的是整體與部分之間的關係,在UML中用帶實線的菱形箭頭表示。
聚集關係還可以分爲兩種類型:
● 被聚集的子系統允許被拆卸和替換,這是普通聚集關係。
● 被聚集的子系統不允許被拆卸和替換,這種聚集稱爲強聚集關係,或者組成關係。
注:強聚集(組成)可用帶實線的實心菱形箭頭表示。
泛化(Generalization)
泛化指的是類之間的繼承關係,在UML中用帶實線的三角形箭頭表示。
實現(Realization)
實現指的是類與接口之間的關係,在UML中用帶虛線的三角形箭頭表示。
以下是GOF設計模式中的描述:
箭頭和三角表示子類關係。
虛箭頭線表示一個類實例化另一個類的對象,箭頭指向被實例化的對象的類。
普通的箭頭線表示相識(acquaintance也叫關聯或者引用),意味着一個對象僅僅知道另一個對象。相識的對象可能請求彼此的操作,但他們不爲對方負責,它只標示了對象間較鬆散的耦合關係。
尾部帶有菱形的箭頭線表示聚合(aggregation),意味着一個對象擁有另一個對象或者對另一個對象負責。一般我們稱一個對象包含另一個對象,或者是另一個對象的一部分。聚合意味着聚合對象和其所有者具有相同的生命週期。
抽象類名以斜體表示,抽象操作也以斜體表示。圖中可以包括實現操作的僞代碼,代碼將出現在帶有褶角的框中,並用虛線將該褶角框與代碼所實現的操作相連。
圖一:
此實線箭頭表示, 繼承, 從一個非接口類的繼承.
圖二:
那條連線表示雙向關聯:
看左邊, Flight扮演assignedFights角色, 有0到1個Plane跟他關聯(一個航班要麼取消了沒有飛機,要麼只能對應一架飛機)
看右邊, Plane扮演着assignedPlane角色, 有0到多個Flight跟他關聯(一個飛機可以參與多個航班, 也可以停在倉庫裏面爛掉)
圖三:
那條連線表示單向關聯:
基本的意義跟上面的是一樣的, 唯一不同的是, 右邊的類對左邊的類是一無所知的.
圖四:
那個大的包圍的框叫軟件包, 名字爲Account, 就一些可以歸類的類包裝起來.
圖五:
如此虛線的箭頭表示實現一個接口.
圖六:
水平的連線還是表示上面所說的關聯, 但從關聯連線中引伸出來的虛線, 這意味當Flight類的一個實例關聯到 FrequentFlyer 類的一個實例時,將會產生 MileageCredit 類的一個實例.
圖七:
帶菱形的箭頭表示基本聚合, 由上圖知道, Wheel類扮演wheels角色, 聚合4個到Car對象裏面去,
空心的菱形表示Wheel對象並不隨Car的創建而創建,銷燬而銷燬.
圖八:
意義和上面類似, 唯一不同的是, 實心菱形表示Department對象隨Company對象的創建而創建,銷燬而銷燬.
圖九:
表示反射關聯, 顯示一個Employee類如何通過manager / manages角色與它本身相關。當一個類關聯到它本身時,這並不意味着類的實例與它本身相關,而是類的一個實例與類的另一個實例相關。