UML包括九種圖:使用案例圖、類圖、對象圖、構件圖、部署圖、活動圖表、共同作業圖表、狀態圖、順序圖表。在這些圖中使用案例圖、類圖、順序圖表是最有用的。
根據其用意,可以將其劃分為結構型圖和行為型圖兩種。
結構型圖:描述系統的靜態結構。在顯示系統中類及類之間的關係時最有用。
行為型圖:描述系統的動態性質。在顯示系統中元素如何協作產生滿足要求的系統行為方面是最有用。
結構型圖
顯然,要描述一個設計模式的靜態結構,使用類圖和對象圖是很合適的。
行為型圖
顯然,要描述一個設計模式的行為特徵,使用狀態圖和時序圖是很合適的。
應當指出的是,一個使用UML的系統設計,往往是從使用案例圖開始的,而且是一個設計應當是使用案例驅動的。
UML中的關係在UML中有4種關係:
(1)依賴關係
依賴(dependency)是兩個模型元素間的語義關係,其中一個元素(獨立元素)發生變化會影響另一個元素(依賴元素)的語義(也就是說“獨立元素”中引用了“依賴元素”)。在圖形上,把依賴畫成一條可能有方向的虛線,偶爾在其上還帶有一個標記2-14所示。
(獨立元素)(依賴元素)
圖2-14 依賴關係
(2)關聯關係
關聯(association)是類之間的結構關係,它描述了一組鏈,鏈是對象(類的執行個體)之間的串連。彙總是一種特殊類型的關聯,它描述了整體和部分間的結構關係。在圖形上,把關聯畫成一條實線,它可能有方向,偶爾在其上還帶有一個標記,而且它還經常含有諸如多重性和端名這樣的修飾,2-15所示。關於關聯我們將在下面進一步詳述。
圖2-15 關聯
(3)泛化關係
泛化(generalization)是一種特殊/一般關係,在其中特殊元素(子項目)基於一般元素(父元素)而建立。用這種方法,子項目共用了父元素的結構和行為(也就是說“子項目”繼承了“父元素”)。在圖形上,把泛化關係畫成一條帶有空心箭頭的實線,該實線指向父元素,2-16所示。
(子項目)(父元素)
圖2-16 泛化關係
(4)實現關係
實現(realization)是類目之間的語義關係,其中的一個類目指定了由另一個類目保證執行的合約。在兩種地方會遇到實現關係:一種是在介面和實現它們的類或構件之間;另一種是在用況和實現它們的協作之間。在圖形上,把實現關係畫成一條帶有空心箭頭的虛線,它是泛化和依賴關係兩種圖形的結合,2-17所示。
(實現)(介面)
圖2-17 實現關係
關於UML圖中的關聯包含種關係:
一般化關係:表示類與類之間的繼承關係,介面與介面之間的繼承關係,或類對介面的實現關係。一般化關係是子類指向父類的,或從實現介面的類指向被實現的介面,與繼承或實現的方向相反。如所示:
圖:一般化關係
關聯關係:是類與類之間的聯結,它使一個類知道另一個類的屬性和方法。關聯關係包括單向關聯、雙向關聯、彙總關聯、合成關聯、反射關聯關係。
| 可能的多重值描述 |
| 表示 |
含義 |
| 0..1 |
0個或1個 |
| 1 |
只能1個 |
| 0..* |
0個或多個 |
| * |
0個或多個 |
| 1..* |
1個或我個 |
| 3 |
只能3個 |
| 0..5 |
0到5個 |
| m..n |
m到n個 |
|
表:多重值和它們的表示
單向關聯:在一個單向關聯中,兩個類是相關的,但是只有一個類知道這種聯絡的存在。圖7 顯示單向關聯的透支財務報告的一個執行個體。
圖7 :單向關聯的透支財務報告
雙向關聯:兩個類彼此知道它們間的聯絡,除非你限定一些其它類型的關聯。圖 6 顯示了在Flight類和Plane類之間的的雙向關聯。 圖 6 在Flight類和Plane類之間的雙向關聯
彙總關聯:有彙總關係的關聯指出,某個類是另外某個類的一部分。在一個彙總關係中,子類執行個體可以比父類存在更長的時間。為了表現一個彙總關係,畫一條從父類到部分類的實線,並在父類的關聯末端畫一個未填充棱形。圖12 顯示車和輪胎間的彙總關係的例子。
圖12 車和輪胎間的彙總關係合成關聯(組合彙總關係):組合彙總關係是彙總關係的另一種形式,但是子類執行個體的生命週期依賴於父類執行個體的生命週期。在圖13中,顯示了Company類和Department類之間的組合關係,注意組合關係如彙總關係一樣繪製,不過這次菱形是被填充的。
圖13:Company類和Department類之間的組合關係反射關聯:類也可以使用反射關聯與它本身相關聯。起先,這可能沒有意義,但是記住,類是抽象的。圖14 顯示一個Employee類如何通過manager / manages角色與它本身相關。當一個類關聯到它本身時,這並不意味著類的執行個體與它本身相關,而是類的一個執行個體與類的另一個執行個體相關。圖14 :Employee類通過manager / manages角色與它本身相關
表4:UML支援的可見度類型的標誌
| 標誌 |
可見度類型 |
| + |
Public |
| # |
Protected |
| - |
Private |
| ~ |
Package |