1. 程式人生 > >繪製UML圖詳解

繪製UML圖詳解

https://blog.csdn.net/shift_wwx/article/details/79205187

一、前言

在軟體開發過程中會經常整理文件,不是所有的資訊都可以通過文字來表達,而換成圖之後會更加的直觀、有效,其中頻繁使用的就是UML圖。結合自己實踐總結一下,希望對大家都能有所幫助。

本文中的UML圖都是用visio 繪製,source code展示是Java 語言。

二、UML簡介

Unified Modeling Language (UML)又稱統一建模語言或標準建模語言,是始於1997年一個OMG標準,它是一個支援模型化和軟體系統開發的圖形化語言,為軟體開發的所有階段提供模型化和視覺化支援,包括由需求分析到規格,到構造和配置。 面向物件的分析與設計(OOA&D,OOAD)方法的發展在80年代末至90年代中出現了一個高潮,UML是這個高潮的產物。它不僅統一了Booch、Rumbaugh和Jacobson的表示方法,而且對其作了進一步的發展,並最終統一為大眾所接受的標準建模語言。

UML圖包括兩個範疇:結構圖和行為圖。

結構圖的目的是顯示建模系統的靜態結構。它包括類、元件和物件。例如UML靜態結構圖。

行為圖的目的是顯示系統中物件的動態行為。它包括物件的方法、協作和活動之類的內容。例如UML示例圖、UML活動圖、UML序列圖。


三、UML類圖

通過UML類圖可以將類之間的所有關係(泛化、實現、關聯、聚合、組合、依賴)都能具體的體現出來。

1、類圖的表示

類的 UML 表示是一個長方形,垂直地分為三個區,如下圖所示。頂部區域顯示類的名字。中間的區域列出類的屬性。底部的區域列出類的操作。在一個類圖上畫一個類元素時,你必須要有頂端的區域,下面的二個區域是可選擇的(當圖描述僅僅用於顯示分類器間關係的高層細節時,下面的兩個區域是不必要的)。

頂端是類名,中間列出的是類的屬性。底部列出的是類的操作。在繪製類圖的時候,頂端部分是必須的,其他兩個部分可選。

類名:如果是抽象類,採用斜體。

類屬性列表:可見性 + 屬性名 + 冒號 + 屬性型別 + (等號 + 預設值)

屬性的可見性下面會說明;屬性的型別看屬性而定,可以是int,可以是boolean;有的屬性可能會有預設值,在型別之後加等號和預設值。

類方法列表:可見性 + 函式名 + (引數列表) + 冒號 + 返回值型別

可見性:

標誌     可見性型別
+  public
- private
#  protected
~ package

2、繼承的表示

為了在一個類圖上建模繼承,從子類(要繼承行為的類)拉出一條閉合的單鍵頭(或三角形)的實線指向超類。

ViewGroup 和 方法onLayout 用的是斜體,說明ViewGroup 是抽象類,方法onLayout 是抽象的。

3、介面的表示

一個類和一個介面不同:一個類可以有它形態的真實例項,然而一個介面必須至少有一個類來實現它。在 UML 中,一個介面被認為是類建模元素的特殊化。因此,介面就象類那樣繪製,但是長方形的頂部區域也有文字“interface”。

對於介面,如果用<< 和 >>將字串interface包起來,表示這是個介面類。並且用虛線帶三角形的箭頭從實現類指向Interface 類。

4、關聯的表示

(1)雙向關聯

在兩個類之間用實線連線,表示兩個類彼此都知道它們之間的聯絡。

在實線的上端寫上關聯關係,例如 has;在實線的下端寫上可能的多重值,多重值表示如下:

表示    含義
0..1     0個或者1個
1     只能1個
0..*     0個或者多個
*     0個或者多個
1..*    1個或者多個

其中,*代表的是任意,..代表的是其之間的範圍。
(2)單向關聯
單向關聯是用一個實線帶一個開放的箭頭,表示一端知道箭頭指向的另一端。

上圖中View 中包含Canvas 類,而Canvas 中不需要包含View。

5、聚合的表示

聚合是一種特別型別的關聯,用於描述“總體到區域性”的關係。在基本的聚合關係中,部分類的生命週期獨立於整體類的生命週期。用一個帶空心的菱形的實線表示,菱形指向的是整體的類。

例如,汽車和輪子的關係:

聚合與單向關聯的區別在於:單項的關聯可能只是一個簡單的“包含、引用”關係,關聯和被關聯類之間在邏輯概念上不一定有緊密的聯絡,而聚合則不同,它表示的是一種內在關係緊密,相互依存,相互包含的概念,其中的一部分是構成另外一部分的不可或缺的成分。

6、組合的表示

組合聚合關係是聚合關係的另一種形式,但是子類例項的生命週期依賴於父類例項的生命週期。

用一個帶實心的菱形的實線表示,菱形指向的是整體的類。

組合跟聚合有很大的不同,聚合的部分的生命週期獨立於整體,整體結束那不影響部分。而組合是部分的生命週期依賴與整體,整體結束,部分沒有必要存在。就想公司和部分,公司都不存在了,那部門就沒有存在的必要了,解散了算。

同樣用View 為例:

其中的DeclaredOnclickListener 類是View的一部分,而且是依賴View的生命週期。

7、依賴的表示

依賴(Dependency)關係是一種使用關係,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關係,大多數情況下依賴關係體現在某個類的方法使用另一個類的物件作為引數。在UML中,依賴關係用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。

依賴關係通常通過三種方式來實現:

將一個類的物件作為另一個類中方法的引數
在一個類的方法中將另一個類的物件作為其物件的區域性變數
在一個類的方法中呼叫另一個類的靜態方法


關聯關係、聚合、組合之間的區別:

關聯關係跟突出的是has,只是has的關係,可以通過這一層關係調用到另一個物件中的某個方法。

聚合、組合更突出“整體-部分”的關係,不單單是“擁有”,部分類是構成整體類的一部分。

對於聚合、組合,區別就在於部分類的生命週期如何,如果部分類還可以獨立存在,那屬於聚合關係;如果部分類不能獨立存在,那屬於組合的關係。