UML建模資料已經不少了,有人想用有人不用,有人會用也有人不會用,本文只是做者的一篇UML建模總結,不想去寫太細,由於真正的你去用下,去畫下就基本都會了。工具畢竟是工具,設計和思想才最重要。數據庫
Enterprise Architect(簡稱EA) 是Sparx Systems 公司推出的UML建模工具。編程
它支持模型驅動的軟件開發全生命週期工做。適合項目經理:有效地管理項目、業務分析師:業務需求戰略分析、開發人員:創建和開發系統和測試人員:測試和調查使用。服務器
它主要功能包括:UML建模、SysML 建模、BPMN建模、模型仿真、應用程序執行與調試、雙向代碼工程、需求管理、項目管理、版本管理、測試點管理等等,而且可以生成 PDF格式、 RTF格式和HTML格式的文檔報告。框架
注:本文使用Enterprise Architect建模工具進行UML建模介紹,不過度去介紹Enterprise Architect建模工具自己,只借助工具來完成和講解下UML建模的過程,旨在指導你們進行UML建模的設計。異步
UML(Unified Modeling Language)又稱統一建模語言或標準建模語言,它是一個用於溝通、 建模、 指定和定義系統的可視化語言,爲軟件開發的全部階段提供模型化和可視化支持。編程語言
UML 圖主要分兩種:函數
· 結構圖:描繪結構元素構成的系統或函數,顯示結構或運行時體系結構的靜態關係工具
· 行爲圖:描繪一個系統或業務過程的行爲特徵,顯示動態模型的視圖。測試
結構圖包括下面的圖表類型:spa
圖類型 |
詳細 |
類圖 |
類圖捕獲系統的邏輯結構、 類和對象描述它存在哪些屬性和行爲。 |
複合結構圖 |
複合結構圖反映類、 接口和組件的內部合做 (和它們的屬性) 來描述它的功能。 |
組件圖 |
組件圖說明了軟件塊、 嵌入的控制器等構成了一個系統,其組織和依賴關係。 |
部署圖 |
部署圖顯示瞭如何進行系統部署 ; 部署在哪裏,也就是說,它執行的體系結構。 |
對象圖 |
對象圖描繪類的對象實例和它們在一個時間點上之間的關係。 |
包圖 |
包圖描繪模型元素在包內的組織結構和依賴關係。 |
配置文件圖 |
配置文件圖是那些 在«配置文件» 包中建立的擴展 UML 元素、 鏈接器和組件。 |
行爲圖包括下面的圖表類型:
圖類型 |
詳細 |
活動圖 |
活動圖建模一個系統的行爲。系統的總體流中這些行爲是如何相關的。 |
用例圖 |
用例圖捕獲用例以及系統和使用戶之間的關係。他們描述了系統的功能要求,使用者做用於系統邊界的方法以及系統的反應。 |
狀態機圖 |
狀態機圖說明了如何元素能夠在狀態之間移動、 根據狀態轉移觸發器和制約條件來分類其行爲。 |
時態圖 |
時態圖中定義不一樣的對象的行爲時間尺度內提供更改狀態,以及隨着時間的推移進行交互的對象的可視化表示形式。 |
序列圖 |
隨着時間的推移,序列圖做爲一系列的有序步驟是行爲結構化表示形式。他們用來描繪工做流程、 消息傳遞和元素通常合做隨着時間達到的結果。 |
通訊圖 |
通訊圖顯示了在運行時,元素之間的互動關係,並可視化對象間關係。 |
互動概述圖 |
互動概述圖用可視化方式說明其餘交互圖 (時間、 序列、 溝通和互動概述圖) 之間的合做,展現控制流的做用。 |
類圖捕獲系統的邏輯結構、 類和對象描述它存在哪些屬性和行爲。
類是面向對象系統中最重要的構造塊。
類圖顯示了一組類、接口、協做以及他們之間的關係。在UML中問題域最終要被逐步轉化,經過類來建模,經過編程語言構建這些類從而實現系統。類加上他們之間的關係就構成了類圖,類圖中還能夠包含接口、包等元素,也能夠包括對象、鏈等實例。
類包含類名、屬性和操做,如定義一個類Contacts,它包含屬性num,name,age,note以及操做AddContacts,DelContacts,GetAge,SetAge,在UML類圖中該圖表示爲如圖所示:
在UML類圖中,類由三部分組成:
一、類名:類的名字,是一個字符串。
二、屬性(Attributes):類的成員變量。
UML屬性的表示方式爲:可見性名稱:類型 [ = 缺省值 ]
• 「可見性」表示該屬性對於類外的元素是否可見,包括公有(public)、私有(private)和受保護(protected),在類圖中分別用符號+、-和#表示。
• 「名稱」表示屬性名,用一個字符串表示。
• 「類型」表示屬性的數據類型,能夠是基本數據類型,也能夠是用戶自定義類型。
• 「缺省值」是一個可選項,即屬性的初始值。
三、 操做(Operations):類的成員方法。
UML操做的表示方式爲:可見性名稱(參數列表) [ : 返回類型]
• 「可見性」的定義與屬性的可見性定義相同。
• 「名稱」即方法名,用一個字符串表示。
• 「參數列表」表示方法的參數,其語法與屬性的定義類似,參數個數是任意的,多個參數之間用逗號「,」隔開。
• 「返回類型」是一個可選項,表示方法的返回值類型,依賴於具體的編程語言,能夠是基本數據類型,也能夠是用戶自定義類型,還能夠是空類型(void),若是是構造方法,則無返回類型。
類之間的關係是類圖中比較複雜的內容,有關聯、聚合、組合、泛化、依賴。
1、關聯
關聯(Association)是類與類之間最經常使用的一種結構化關係,用於表示一類對象與另外一類對象之間的聯繫,一般用在一個類中被實現爲一個實例變量。關聯能夠有單向關聯、雙向關聯 和多重性關聯。
1)單向關聯
單向關聯是單向的,用帶箭頭的實線表示。如:聯繫人(Contact)擁有地址(Address),則Contact類與Address類具備單向關聯關係,如圖所示:
2)雙向關聯
雙向關聯是雙向的,有實線表示。如:顧客(Customer)買了商品(Product)並擁有商品,反之,賣出的商品總會有某個顧客與之相關聯。所以,Customer類和Product類之間具備雙向關聯關係,如圖所示:
3)多重關聯
多重關聯表示兩個關聯對象在數量上的對應關係。在類圖中,對象之間的多重性能夠直接在關聯直線上用一個數字或一個數字範圍表示。
常見的多重性表示方式以下表所示:
表示方式 |
多重性說明 |
1..1 |
表示另外一個類的一個對象只與該類的一個對象有關係。 |
0..* |
表示另外一個類的一個對象與該類的零個或多個對象有關係。 |
1..* |
表示另外一個類的一個對象與該類的一個或多個對象有關係。 |
0..1 |
表示另外一個類的一個對象沒有或只與該類的一個對象有關係。 |
m..n |
表示另外一個類的一個對象與該類最少m,最多n個對象有關係 (m≤n)。 |
簡單的多重關聯關係示例,如圖所示:
2、泛化
泛化(Generalizations) 被用來講明繼承關係。泛化的含義是源類繼承了目標類的特性。如:圓形(Circle)將繼承形狀(Shape)的屬性x_position,y_position,radius和操做display()。如圖所示:
3、聚合、組合
聚合(Aggregation)表示類之間總體與部分的關係。
組合(Composition)也表示類之間總體和部分的關係,可是在組合關係中總體對象能夠控制成員對象的生命週期,一旦總體對象不存在,成員對象也將不存在,成員對象與總體對象之間具備同生共死的關係。
聚合表示爲白色菱形箭頭(弱聚合)指向目標類或父類。
組合表示爲黑色菱形箭頭(強聚合)指向目標類或父類。
如:地址本(address book)由許多 聯繫人(contacts)和聯繫人組(contact groups)組成。聯繫人組(contact groups)是一個聯繫人(contacts)的虛分組, 聯繫人(contact)能夠被包含在不止一個聯繫人組(contact groups)中。 若是你刪除一個地址本(address book),全部的聯繫人(contacts)和聯繫人組(contact groups)都會被刪除,若是你刪除聯繫人組(contact groups),聯繫人(contacts)卻不會被刪除。如圖所示:
4、依賴
依賴(Dependency)表示兩個元素之間存在某種關係,表示一個事物依賴另外一個事物。類的依賴關係主要體如今一個類的方法使用另外一個類的對象做爲參數。
依賴用帶箭頭的虛線表示,由依賴的一方指向被依賴的一方。
如:駕駛員開車,將Car類型的對象car做爲Driver的一個參數傳遞,以便在drive()方法中可以調用car的move()方法,且駕駛員的drive()方法依賴車的move()方法,所以類Driver依賴類Car,如圖所示:
附,EA工具類圖元素和鏈接器註釋:
複合結構圖反映類、 接口和組件的內部合做 (和它們的屬性) 來描述它的功能。
如:暴露接口,包含端口和部件。如圖所示:
如:系統安裝的關係,如圖所示:
附,EA工具複合結構圖元素和鏈接器註釋:
組件圖說明了軟件塊、 嵌入的控制器等構成了一個系統,其組織和依賴關係。
如:一個組件與另外一個組件提供接口,如圖所示:
附,EA工具組件圖元素和鏈接器註釋(重複的不註釋了):
部署圖顯示瞭如何進行系統部署 ; 部署在哪裏,也就是說,它執行的體系結構。
如:簡單的服務器部署圖,如圖所示:
部署圖還可使用替代圖像元素來表示,如圖所示:
再看一圖像元素的部署圖,如圖所示:
對象圖描繪類的對象實例和它們在一個時間點上之間的關係。
對象圖與類圖密切相關,區別是它描述類的對象實例和它們之間在一個點時間上的關係。
對象圖對於理解複雜的類圖是有用的,經過建立不一樣狀況下的應用反映類和類關係。
如driver和car的對象圖,如圖所示:
附:
包圖描繪模型元素在包內的組織結構和依賴關係。
包圖是在 UML 中用相似於文件夾的符號表示的模型元素的組合。系統中的每一個元素都只能爲一個包全部,一個包可嵌套在另外一個包中。使用包圖能夠將相關元素納入一個系統。一個包中可包含附屬包、圖表或單個元素。
包圖中的元素能夠包含:類,類型,接口,枚舉,表等等。如圖所示:
配置文件圖是那些 在«配置文件» 包中建立的擴展UML元素、鏈接器和組件。
配置文件提供擴展 UML 的手段。他們基於可應用於UML元素、鏈接器和它們的組件而附加的構造型和標記值。配置文件是這些擴展的集合,它們在一塊兒描述一些特定的建模問題,促進建模構造。
活動圖建模一個系統的行爲。系統的總體流中這些行爲是如何相關的。
活動圖描述活動的順序,展示從一個活動到另外一個活動的控制流。活動圖在本質上是一種流程圖。活動圖着重表現從一個活動到另外一個活動的控制流,是內部處理驅動的流程。
簡單活動圖:
如:接收訂單,如圖所示:
如:收發郵件,如圖所示:
如:真假判斷,如圖所示:
如:分叉,如圖所示:
複雜活動圖:如圖所示:
附,活動圖元素和鏈接器註釋:
用例圖捕獲用例以及系統和使用者之間的關係。他們描述了系統的功能要求,使用者做用於系統邊界的方法以及系統的反應。用例是一個系統性的工做,這個系統的工做很是明確的去爲某個參與者達成一個特定的目標。
主要經過泛化、包含和擴展關係說明下使用。
泛化關係:泛化關係相似於 「繼承」或「多態」。 子用例繼承父用例,可重載,可有特殊的行爲。如圖所示:
包含關係:包含關係反映一個用例包括另外一個用例的行爲。如:聯繫人管理包含聯繫人的增長、刪除、更新。如圖所示:
擴展關係:擴展關係表示一個用例擴展另外一個用例的行爲。如:員工提交請假申請以後,就能夠打印請假單了。如圖所示:
用例和功能的區別:
一、功能是脫離使用者的願望而存在的。例如咱們描述一個自行車的功能就是他能騎和載物,並沒有誰來使用它。
二、功能是孤立的,在系統中,給一個輸入就能獲得一個輸出。而用例是一個系統性的工做,這個系統的工做很是明確的去爲某個參與者達成一個特定的目標。
三、若是非要從功能的角度去解釋用例,那麼用例能夠解釋爲一系列完成一個特定目標的功能的組合。
泛化、包含和擴展關係的區別:
一、泛化表示子用例間的互斥性。
二、包含表示被包含用例對Actor提供服務的間接性。
三、擴展表示擴展用例的觸發不定性。
泛化與包含用例屬於無條件發生(確定發生的)的用例,而擴展屬於有條件發生(未必發生,發生與否取決於系統狀態)的用例。
附,用例圖元素和鏈接器註釋:
狀態機圖說明了如何元素能夠在狀態之間移動、 根據狀態轉移觸發器和制約條件來分類其行爲。主要爲利用狀態和事件來描述對象自己的行爲。
簡單狀態機圖:
描述安裝軟件的行爲,如圖所示:
描述圖書類的入庫、待借、借出的類行爲,如圖所示:
複雜狀態機圖,如圖所示:
附,狀態機圖元素和鏈接器註釋:
時態圖中定義不一樣的對象的行爲時間尺度內提供更改狀態,以及隨着時間的推移進行交互的對象的可視化表示形式。
一條生命線是跨時間,由 x 軸表示標準所需的對象的路徑。有兩種:值生命線和狀態生命線。
狀態生命線遵循沿 y 軸的時間軸定義的狀態之間的離散狀態轉移。任何狀態轉移有時間約束、 持續時間約束和觀察的可選屬性。
值生命線顯示的生命線狀態圖中,跨平行線表示穩定的狀態。跨線之間指示狀態轉移或狀態的變化。
默認示例,如圖所示:
附,時態圖元素和鏈接器註釋:
隨着時間的推移,序列圖做爲一系列的有序步驟是行爲結構化表示形式。他們用來描繪工做流程、 消息傳遞和元素通常合做隨着時間達到的結果。
序列圖使用:
一、描述工做流、 消息傳遞和元素間的通常合做,並隨着時間推移而實現某一結果。
二、捕獲系統的信息和責任,在分析早期,元素間的消息最終成爲類模型的方法調用。
三、爲用例方案生成解釋性的模型,經過建立帶有參與者的序列圖以及所涉及的用例元素,你能夠創建模型用戶和系統承諾完成所需任務的步驟序列。
序列圖描述:
一、每一個序列元素按水平排列序列,消息在元素之間來回傳遞。
二、序列圖中的消息能夠是幾種類型,消息也能夠配置爲反映操做,以及源和目標元素的屬性。
三、參與者元素可用於表示用戶啓動的事件流。
四、構造型元素,如邊界、 控制和實體,能夠分別用來講明屏幕、 控制器和數據庫項目。
五、每一個元素都有一條虛線,稱爲生命線,該元素存在,而且有可能參與相互做用。
簡單序列圖:
發送短信,如圖所示:
幾種消息類型,如圖所示:
複雜序列圖,如圖所示:
附,序列圖元素和鏈接器註釋:
通訊圖顯示了在運行時,元素之間的互動關係,並可視化對象間關係。
通訊圖是對交互中有意義的對象和對象之間的鏈建模。
通訊圖主要包括:對象、鏈和消息。消息類型有同步、異步和返回三種,消息編號指示順序和加工的嵌套。編號方案多是:
1
1.1
1.1.1
1.1.2
簡單通訊圖,如圖所示:
複雜通訊圖,如圖所示:
交叉概述圖用可視化方式說明其餘交互圖 (時間、 序列、 溝通和互動概述圖) 之間的合做,展現控制流的做用。交叉概述圖是活動圖的變體,大部分符號都同樣,使用的是矩形元素而不是活動元素。有兩種類型的這些元素:
一、交叉元素顯示內聯交互圖,能夠是任何四種類型中的任何一個(序列、時機、通訊或交互概述)
二、交互發生元素是對現有互動圖的引用: 用框架直觀地表示,框架內容顯示圖名稱。
交叉概述圖,如圖所示:
總結下幾種經常使用的關係:
泛化(Generalization):是一種繼承關係,表示通常與特殊的關係,它指定了子類如何特化父類的全部特徵和行爲。
實現(Realization):是一種類與接口的關係,表示類是接口全部特徵和行爲的實現。
關聯(Association):是一種擁有的關係,它使一個類知道另外一個類的屬性和方法。
聚合(Aggregation):是總體與部分的關係,且部分能夠離開總體而單獨存在。
組合(Composition):是總體與部分的關係,但部分不能離開總體而單獨存在。
依賴(Dependency):是一種使用的關係,即一個類的實現須要另外一個類的協助。
最後,附上EA的工程文件,目錄結構如圖所示: