前言
UML建模資料已經很多了,有人想用有人不用,有人會用也有人不會用,本文只是作者的一篇UML建模總結,不想去寫太細,因為真正的你去用下,去畫下就基本都會了。工具畢竟是工具,設計和思想才最重要。
Enterprise Architect簡介
Enterprise Architect(簡稱EA) 是Sparx Systems 公司推出的UML建模工具。
它支持模型驅動的軟件開發全生命周期工作。適合項目經理:有效地管理項目、業務分析師:業務需求戰略分析、開發人員:建立和開發系統和測試人員:測試和調查使用。
它主要功能包括:UML建模、SysML 建模、BPMN建模、模型仿真、應用程序執行與調試、雙向代碼工程、需求管理、項目管理、版本管理、測試點管理等等,並且能夠生成 PDF格式、 RTF格式和HTML格式的文檔報告。
注:本文使用Enterprise Architect建模工具進行UML建模介紹,不過分去介紹Enterprise Architect建模工具本身,只借助工具來完成和講解下UML建模的過程,旨在指導大家進行UML建模的設計。
UML簡介
UML(Unified Modeling Language)又稱統一建模語言或標准建模語言,它是一個用於溝通、 建模、 指定和定義系統的可視化語言,為軟件開發的所有階段提供模型化和可視化支持。
UML 圖主要分兩種:
· 結構圖:描繪結構元素構成的系統或函數,顯示結構或運行時體系結構的靜態關系
· 行為圖:描繪一個系統或業務過程的行為特征,顯示動態模型的視圖。
結構圖包括下面的圖表類型:
圖類型 |
詳細 |
類圖 |
類圖捕獲系統的邏輯結構、 類和對象描述它存在哪些屬性和行為。 |
復合結構圖 |
復合結構圖反映類、 接口和組件的內部合作 (和它們的屬性) 來描述它的功能。 |
組件圖 |
組件圖說明了軟件塊、 嵌入的控制器等構成了一個系統,其組織和依賴關系。 |
部署圖 |
部署圖顯示了如何進行系統部署 ; 部署在哪里,也就是說,它執行的體系結構。 |
對象圖 |
對象圖描繪類的對象實例和它們在一個時間點上之間的關系。 |
包圖 |
包圖描繪模型元素在包內的組織結構和依賴關系。 |
配置文件圖 |
配置文件圖是那些 在«配置文件» 包中創建的擴展 UML 元素、 連接器和組件。 |
行為圖包括下面的圖表類型:
圖類型 |
詳細 |
活動圖 |
活動圖建模一個系統的行為。系統的整體流中這些行為是如何相關的。 |
用例圖 |
用例圖捕獲用例以及系統和使用戶之間的關系。他們描述了系統的功能要求,使用者作用於系統邊界的方法以及系統的反應。 |
狀態機圖 |
狀態機圖說明了如何元素可以在狀態之間移動、 根據狀態轉移觸發器和制約條件來分類其行為。 |
時態圖 |
時態圖中定義不同的對象的行為時間尺度內提供更改狀態,以及隨着時間的推移進行交互的對象的可視化表示形式。 |
序列圖 |
隨着時間的推移,序列圖作為一系列的有序步驟是行為結構化表示形式。他們用來描繪工作流程、 消息傳遞和元素一般合作隨着時間達到的結果。 |
通信圖 |
通信圖顯示了在運行時,元素之間的互動關系,並可視化對象間關系。 |
互動概述圖 |
互動概述圖用可視化方式說明其他交互圖 (時間、 序列、 溝通和互動概述圖) 之間的合作,展示控制流的作用。 |
類圖
類圖捕獲系統的邏輯結構、 類和對象描述它存在哪些屬性和行為。
類是面向對象系統中最重要的構造塊。
類圖顯示了一組類、接口、協作以及他們之間的關系。在UML中問題域最終要被逐步轉化,通過類來建模,通過編程語言構建這些類從而實現系統。類加上他們之間的關系就構成了類圖,類圖中還可以包含接口、包等元素,也可以包括對象、鏈等實例。
類圖(類)
類包含類名、屬性和操作,如定義一個類Contacts,它包含屬性num,name,age,note以及操作AddContacts,DelContacts,GetAge,SetAge,在UML類圖中該圖表示為如圖所示:
在UML類圖中,類由三部分組成:
1、類名:類的名字,是一個字符串。
2、屬性(Attributes):類的成員變量。
UML屬性的表示方式為:可見性名稱:類型 [ = 缺省值 ]
• “可見性”表示該屬性對於類外的元素是否可見,包括公有(public)、私有(private)和受保護(protected),在類圖中分別用符號+、-和#表示。
• “名稱”表示屬性名,用一個字符串表示。
• “類型”表示屬性的數據類型,可以是基本數據類型,也可以是用戶自定義類型。
• “缺省值”是一個可選項,即屬性的初始值。
3、 操作(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元素、連接器和它們的組件而附加的構造型和標記值。配置文件是這些擴展的集合,它們在一起描述一些特定的建模問題,促進建模構造。
活動圖
活動圖建模一個系統的行為。系統的整體流中這些行為是如何相關的。
活動圖描述活動的順序,展現從一個活動到另一個活動的控制流。活動圖在本質上是一種流程圖。活動圖着重表現從一個活動到另一個活動的控制流,是內部處理驅動的流程。
簡單活動圖:
如:接收訂單,如圖所示:
如:收發郵件,如圖所示:
如:真假判斷,如圖所示:
如:分叉,如圖所示:
復雜活動圖:如圖所示:
附,活動圖元素和連接器注釋:
用例圖
用例圖捕獲用例以及系統和使用者之間的關系。他們描述了系統的功能要求,使用者作用於系統邊界的方法以及系統的反應。用例是一個系統性的工作,這個系統的工作非常明確的去為某個參與者達成一個特定的目標。
主要通過泛化、包含和擴展關系說明下使用。
泛化關系:泛化關系類似於 “繼承”或“多態”。 子用例繼承父用例,可重載,可有特殊的行為。如圖所示:
包含關系:包含關系反映一個用例包括另一個用例的行為。如:聯系人管理包含聯系人的增加、刪除、更新。如圖所示:
擴展關系:擴展關系表示一個用例擴展另一個用例的行為。如:員工提交請假申請之后,就可以打印請假單了。如圖所示:
用例和功能的區別:
1、功能是脫離使用者的願望而存在的。例如我們描述一個自行車的功能就是他能騎和載物,並無誰來使用它。
2、功能是孤立的,在系統中,給一個輸入就能得到一個輸出。而用例是一個系統性的工作,這個系統的工作非常明確的去為某個參與者達成一個特定的目標。
3、如果非要從功能的角度去解釋用例,那么用例可以解釋為一系列完成一個特定目標的功能的組合。
泛化、包含和擴展關系的區別:
1、泛化表示子用例間的互斥性。
2、包含表示被包含用例對Actor提供服務的間接性。
3、擴展表示擴展用例的觸發不定性。
泛化與包含用例屬於無條件發生(肯定發生的)的用例,而擴展屬於有條件發生(未必發生,發生與否取決於系統狀態)的用例。
附,用例圖元素和連接器注釋:
狀態機圖
狀態機圖說明了如何元素可以在狀態之間移動、 根據狀態轉移觸發器和制約條件來分類其行為。主要為利用狀態和事件來描述對象本身的行為。
簡單狀態機圖:
描述安裝軟件的行為,如圖所示:
描述圖書類的入庫、待借、借出的類行為,如圖所示:
復雜狀態機圖,如圖所示:
附,狀態機圖元素和連接器注釋:
時態圖
時態圖中定義不同的對象的行為時間尺度內提供更改狀態,以及隨着時間的推移進行交互的對象的可視化表示形式。
一條生命線是跨時間,由 x 軸表示標准所需的對象的路徑。有兩種:值生命線和狀態生命線。
狀態生命線遵循沿 y 軸的時間軸定義的狀態之間的離散狀態轉移。任何狀態轉移有時間約束、 持續時間約束和觀察的可選屬性。
值生命線顯示的生命線狀態圖中,跨平行線表示穩定的狀態。跨線之間指示狀態轉移或狀態的變化。
默認示例,如圖所示:
附,時態圖元素和連接器注釋:
序列圖
隨着時間的推移,序列圖作為一系列的有序步驟是行為結構化表示形式。他們用來描繪工作流程、 消息傳遞和元素一般合作隨着時間達到的結果。
序列圖使用:
1、描述工作流、 消息傳遞和元素間的一般合作,並隨着時間推移而實現某一結果。
2、捕獲系統的信息和責任,在分析早期,元素間的消息最終成為類模型的方法調用。
3、為用例方案生成解釋性的模型,通過創建帶有參與者的序列圖以及所涉及的用例元素,你可以建立模型用戶和系統承諾完成所需任務的步驟序列。
序列圖描述:
1、每個序列元素按水平排列序列,消息在元素之間來回傳遞。
2、序列圖中的消息可以是幾種類型,消息也可以配置為反映操作,以及源和目標元素的屬性。
3、參與者元素可用於表示用戶啟動的事件流。
4、構造型元素,如邊界、 控制和實體,可以分別用來說明屏幕、 控制器和數據庫項目。
5、每個元素都有一條虛線,稱為生命線,該元素存在,並且有可能參與相互作用。
簡單序列圖:
發送短信,如圖所示:
幾種消息類型,如圖所示:
復雜序列圖,如圖所示:
附,序列圖元素和連接器注釋:
通信圖
通信圖顯示了在運行時,元素之間的互動關系,並可視化對象間關系。
通信圖是對交互中有意義的對象和對象之間的鏈建模。
通信圖主要包括:對象、鏈和消息。消息類型有同步、異步和返回三種,消息編號指示順序和加工的嵌套。編號方案可能是:
1
1.1
1.1.1
1.1.2
簡單通信圖,如圖所示:
復雜通信圖,如圖所示:
交叉概述圖
交叉概述圖用可視化方式說明其他交互圖 (時間、 序列、 溝通和互動概述圖) 之間的合作,展示控制流的作用。交叉概述圖是活動圖的變體,大部分符號都一樣,使用的是矩形元素而不是活動元素。有兩種類型的這些元素:
1、交叉元素顯示內聯交互圖,可以是任何四種類型中的任何一個(序列、時機、通信或交互概述)
2、交互發生元素是對現有互動圖的引用: 用框架直觀地表示,框架內容顯示圖名稱。
交叉概述圖,如圖所示:
總結下幾種常用的關系:
泛化(Generalization):是一種繼承關系,表示一般與特殊的關系,它指定了子類如何特化父類的所有特征和行為。
實現(Realization):是一種類與接口的關系,表示類是接口所有特征和行為的實現。
關聯(Association):是一種擁有的關系,它使一個類知道另一個類的屬性和方法。
聚合(Aggregation):是整體與部分的關系,且部分可以離開整體而單獨存在。
組合(Composition):是整體與部分的關系,但部分不能離開整體而單獨存在。
依賴(Dependency):是一種使用的關系,即一個類的實現需要另一個類的協助。
最后,附上EA的工程文件,目錄結構如圖所示: