轉載來源:http://blog.csdn.net/shift_wwx/article/details/79205187
可以參考:http://www.uml.org.cn/oobject/201211231.asp
一、前言
在軟件開發過程中會經常整理文檔,不是所有的信息都可以通過文字來表達,而換成圖之后會更加的直觀、有效,其中頻繁使用的就是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個或者多個 |
3 | 只能3個 |
0..3 | 0至3個 |
3..13 | 3至13個 |
(2)單向關聯
單向關聯是用一個實線帶一個開放的箭頭,表示一端知道箭頭指向的另一端。
上圖中View 中包含Canvas 類,而Canvas 中不需要包含View。
5、聚合的表示
聚合是一種特別類型的關聯,用於描述“總體到局部”的關系。在基本的聚合關系中,部分類的生命周期獨立於整體類的生命周期。用一個帶空心的菱形的實線表示,菱形指向的是整體的類。
例如,汽車和輪子的關系:
聚合與單向關聯的區別在於:單項的關聯可能只是一個簡單的“包含、引用”關系,關聯和被關聯類之間在邏輯概念上不一定有緊密的聯系,而聚合則不同,它表示的是一種內在關系緊密,相互依存,相互包含的概念,其中的一部分是構成另外一部分的不可或缺的成分。
6、組合的表示
組合聚合關系是聚合關系的另一種形式,但是子類實例的生命周期依賴於父類實例的生命周期。
用一個帶實心的菱形的實線表示,菱形指向的是整體的類。
組合跟聚合有很大的不同,聚合的部分的生命周期獨立於整體,整體結束那不影響部分。而組合是部分的生命周期依賴與整體,整體結束,部分沒有必要存在。就想公司和部分,公司都不存在了,那部門就沒有存在的必要了,解散了算。
同樣用View 為例:
其中的DeclaredOnclickListener 類是View的一部分,而且是依賴View的生命周期。
7、依賴的表示
依賴(Dependency)關系是一種使用關系,特定事物的改變有可能會影響到使用該事物的其他事物,在需要表示一個事物使用另一個事物時使用依賴關系,大多數情況下依賴關系體現在某個類的方法使用另一個類的對象作為參數。在UML中,依賴關系用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
依賴關系通常通過三種方式來實現:
- 將一個類的對象作為另一個類中方法的參數
- 在一個類的方法中將另一個類的對象作為其對象的局部變量
- 在一個類的方法中調用另一個類的靜態方法
關聯關系、聚合、組合之間的區別:
關聯關系跟突出的是has,只是has的關系,可以通過這一層關系調用到另一個對象中的某個方法。
聚合、組合更突出“整體-部分”的關系,不單單是“擁有”,部分類是構成整體類的一部分。
對於聚合、組合,區別就在於部分類的生命周期如何,如果部分類還可以獨立存在,那屬於聚合關系;如果部分類不能獨立存在,那屬於組合的關系。