UML類圖的各符號含義
類圖基本符號可拆分為虛線,箭頭,實線,空心右三角,實心右三角,空心菱形和實心菱形。由這些基本的圖形進行組合構成了類圖的基本符號。這里要注意這幾個符號的順序,代表了類與類之間關系的耦合程 度。越向右耦合度越高。
其中虛線+箭頭是表示即依賴的關系,實線+箭頭表示關聯的關系,虛線+空心右三角表示implements,實線+空心右三角表示的是泛化,即類的繼承關系。實線+空心菱形表示的是聚合的關系,實線+實心菱形則表示 組合的關系。
另外一點是在看類圖的時候要注意。類圖的思想其實也還沒有脫離面向對象的思想,以某個類為中心,有些線是射入的而有些線是射出的。射入的線表示的是這 個類被哪些類所調用而射出的線則表示該類調用了 哪些類,包括泛化,關聯,依賴,聚合和組合四種關系。這類似於離散數學中有關圖部分的描述。
1. 類(Class):使用三層矩形框表示。 第一層顯示類的名稱,如果是抽象類,則就用斜體顯示。 第二層是字段和屬性。 第三層是類的方法。 注意前面的符號,‘+’表示public,‘-’表示private,‘#’表示protected。
2. 接口:使用兩層矩形框表示,與類圖的區別主要是頂端有<>顯示 。 第一行是接口名稱。 第二行是接口方法。
3. 繼承類(extends) :用空心三角形+實線來表示。
4. 實現接口(implements) :用空心三角形+虛線來表示
5. 關聯(Association) :用實線箭頭來表示,例如:燕子與氣候
6. 聚合(Aggregation) :用空心的菱形+實線箭頭來表示 聚合:表示一種弱的‘擁有’關系,體現的是A對象可以包含B對象,但B對象不是A對象的一部分,例如: 公司和員工 組合(Composition):用實心的菱形+實線箭頭來表示 組合:部分和整體的關系,並且生命周期是相同的。例如:人與手
7. 依賴(Dependency) :用虛線箭頭來表示,例如:動物與氧氣
8. 基數 :連線兩端的數字表明這一端的類可以有幾個實例,比如:一個鳥應該有兩只翅膀。如果一個類 可能有無數個實例,則就用‘n’來表示。關聯、聚合、組合是有基數的。
類之間的關系
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),意味着一個對象擁有另一個對象或者對另一個對象負責。一般我們稱一個對象包含另一個對象,或者是另一個對象的一部分。聚合意味着聚合對象和其所有者具有相同的生命周期。
抽象類名以斜體表示,抽象操作也以斜體表示。圖中可以包括實現操作的偽代碼,代碼將出現在帶有褶角的框中,並用虛線將該褶角框與代碼所實現的操作相連
圖1此實線箭頭表示, 繼承, 從一個非接口類的繼承
圖2雙向關聯
那條連線表示雙向關聯: 看左邊, Flight扮演assignedFights角色, 有0到1個Plane跟他關聯(一個航班要么取消了沒有飛機,要么只能對應一架飛機) 看右邊, Plane扮演着assignedPlane角色, 有0到多個Flight跟他關聯(一個飛機可以參與多個航班, 也可以停在倉庫里面爛掉)
圖3 單向關聯
基本的意義跟上面的是一樣的, 唯一不同的是, 右邊的類對左邊的類是一無所知的.
圖4 軟件包
那個大的包圍的框叫軟件包, 名字為Account, 就一些可以歸類的類包裝起來
圖5 實例化 (接口)
如此虛線的箭頭表示實現一個接口.
水平的連線還是表示上面所說的關聯, 但從關聯連線中引伸出來的虛線, 這意味當Flight類的一個實例關聯到 FrequentFlyer 類的一個實例時,將會產生 MileageCredit 類的一個實例.
帶菱形的箭頭表示基本聚合, 由上圖知道, Wheel類扮演wheels角色, 聚合4個到Car對象里面去, 空心的菱形表示Wheel對象並不隨Car的創建而創建,銷毀而銷毀
意義和上面類似, 唯一不同的是, 實心菱形表示Department對象隨Company對象的創建而創建,銷毀而銷毀
表示反射關聯, 顯示一個Employee類如何通過manager / manages角色與它本身相關。當一個類關聯到它本身時,這並不意味着類的實例與它本身相關,而是類的一個實例與類的另一個實例相關。