看網上有很多關于 UML 圖的介紹,但都不完整,于是參考了一些 UML 書籍、部落格、視訊、官網,并基于最新的 UML 2.5 版本(涵蓋了 UML 14 種圖),總結了這篇文章,希望能給系統分析設計的同學一點參考。
本文分為上下兩篇,主要講解 UML 核心圖的結構和一些案例,偏向于操作介紹,如果發現本篇文章有任何問題,或在使用 UML 畫圖過程中遇到問題,歡迎留言評論。
01
UML的定義
UML 全稱 Unified Modeling Language,即統一模組化語言,是軟體工程領域中一種通用的、開發性的模組化語言,它不是一種程式設計語言,旨在提供一種标準的方法來可視化系統的設計。它比 C++、Java 這樣的程式設計語言抽象層次更高,可以适用于任何面向對象的程式設計語言。這種模組化語言已經得到了工業界的廣泛支援和應用,并已被 ISO 确立為國際标準。
統一模組化語言是由對象管理組織(Object Management Group, OMG)制定的一個通用的、可視化的模組化語言标準,可以用來可視化、描述、構造和文檔化軟體密集型系統的各種工件。它是由資訊系統和面向對象領域的 3 位著名的方法學家 Grady Booch、James Rumbaugh 和 Ivar Jacobson(threeAmigos,三友)提出的。
在面向對象的軟體開發中,選擇 UML 已經成了必然的趨勢。面向對象專家 Martin Flower 曾經這樣說過:“如果正在使用其他的舊技術模組化,我強烈建議您馬上轉用 UML,因為它明顯地将成為符号系統的統一标準。如果正在考慮開始使用設計符号來工作,UML 是一個好的選擇,因為它已經統治業界了。”在很多情況下,開發人員都應該選擇 UML 作為模組化語言。
作為一種統一模組化語言,UML 的統一并不僅僅是三大面向對象方法的統一,還合并了許多面向對象方法中被普遍接受的概念,對每一種概念,UML 都給出了清晰的定義、表示法和有關術語。
02
UML的曆史
UML 的誕生經曆了一個漫長的曆程。從 20 世紀 80 年代初期開始,衆多的方法學家都在嘗試用不同的方法進行面向對象的分析與設計。當時,許多方法開始在一些項目中發揮作用,如 Booch、OMT、Shlaer/Mellor、Odell/Martin、RDD、Objectory 等方法。到了 20 世紀 90 年代中期出現了比較完善的面向對象方法,知名的有 Booch 94、OMT 2、OOSE、Fusion 等方法,那時面向對象方法已經成為軟體分析和設計方法的主流。
目前,UML 主要存在 UML 1.x 和 UML 2 兩個大的版本系列。UML 1.x 主要是指 UML 1.0~UML 1.5 的這幾個版本,版本之間有一些差别,但總體差别不大。而 UML 2 則是指從 2005 年正式釋出的 UML 2 之後的各個版本。
相比 UML 1.x,UML 2 的變化很大,首先是結構的調整,從 UML 2 開始,UML 标準被劃分為兩個相對獨立的部分:基礎結構和上層結構;其次内容上也有很大的變化,包括底層概念的統一、各種圖形的改進和增加等。目前,UML 2 已經成為發展趨勢。
早期的 UML 1.x 隻提供了 9 種圖形。包圖、組合結構圖、外廓圖、互動概覽圖、時間圖這 5 種是在 UML 2 中新增的(外廓圖是在 UML 2.3 之後才有的);而通信圖則是由 UML 1.x 的協作圖改名而來,其他的一些圖形也做了适當的調整和擴充。
本篇文章的核心圖介紹采用最新的 UML 2.5 作為模組化語言。
03
UML核心圖介紹
UML的分類
PRODUCT
UML 語義結構
UML 即然是一種語言,那麼它必然有語義結構,下圖來自 UML 2.5 規範,列出了 UML 語義域分層的詳細分解結構。
按照 UML 的語義結構,可以将 UML 劃分為三大類,結構模組化(Structural Modeling)、行為模組化(Behavioral Modeling)、補充模組化(Supplemental Modeling)
動作(Actions)是 UML 中的基本行為單元,用于定義細粒度的行為;在此基礎上形成高層次的行為機制,包括狀态機(StateMachines)、活動(Activities)和互動(Interactions)等。
既有結構化又有行為的輔助模組化結構,包括用例(Use Cases)、部署(Deployments)和資訊流(Information Flows)。
14種UML的分類
PRODUCT
目前最新的UML 2 中有 14 種圖,相比 UML 1.x 新增了 5 種圖(包圖、組合結構圖、外廓圖、互動概覽圖、時間圖),按照靜态結構和動态行為劃分如下:
靜态結構圖的主元素是靜态元素,如類圖的類、接口;
動态行為圖的主元素是動态元素,如活動圖的主元素是用例的動作
(下圖來自 wikipedia)
從對象、事物、包、系統、構件次元來看 這 14 種圖的差異點
動态行為圖(7 種)
對象互動圖
對象之間的資訊互動的圖(互動圖)
強調消息執行順序:順序圖(時序圖)
強調對象之間的協作:通信圖(協作圖)
強調真實時間資訊:時間圖
互動圖之間的執行順序:互動概覽圖
對象和對象目标之間的關系:用例圖
事物執行的控制流和資料流:活動圖
對象自身經曆的狀态轉移:狀态圖
靜态結構圖(7 種)
包和包之間的關系:包圖
系統的類/接口的協作和關系:類圖
對象和對象之間的關系的圖:對象圖
系統某一部分的内部結構:組合架構圖
構件展示及構件互相依賴關系:構件圖
構件在各節點部署的展示:部署圖
現有圖的擴充:外廓圖
它們的共同點有以下幾個:
- 描述系統中單個或多個事物動态行為特性
- 互動圖(順序圖、通信圖、互動概覽圖、時間圖)側重描述事物間的互動過程
- 行為圖(活動圖、狀态機圖)側重描述事物本身的行為特征
它們的差別主要展現在每種圖形的側重點不同:
- 互動圖(順序圖、通信圖):适合描述單個用例中多個對象之間的協作行為。
- 互動概覽圖:用于描述複雜用例多個順序圖間的控制流程。
- 時間圖:用于描述時間受控的單個或多個對象間狀态互動。
- 狀态機圖:适合描述跨越多個用例的單個對象的行為如何影響該對象的狀态。
- 活動圖:适合描述多個對象跨越多個用例時的總貌。
04
從業務分析設計過程看使用階段
(1)業務模組化:采用軟體模組化方法分析和了解待開發的業務,描述業務流程;其目标是認識業務本質,該業務本質是後續用例模組化的基礎。
(2)用例模組化:采用 UML 用例模組化技術描述軟體需求,該需求模型将為後續用例分析提供輸入。
(3)用例分析:采用 UML 用例分析技術分析軟體需求,建立軟體系統的分析模型。
(4)架構設計:在系統的全局範圍内,以分析模型為基礎,設計系統的架構。
(5)構件設計:根據架構設計的成果,将分析模型細化,設計系統構件的實作細節。
(6)代碼實作:将系統構件映射到目智語言上。
下面将從“作用”、“組成元素”、“示例”三個次元介紹每個 UML 圖用法
靜态結構圖(7種)
PRODUCT
1、類圖
1.1、作用
類圖(Class Diagram)是軟體的藍圖,用于較長的描述系統内各個對象的相關類,以及這些類之間的靜态關系;
1.2、組成元素
組成元素 | 符号 |
類 | 例子: |
接口 | |
對象 | |
關系 | 依賴(Dependency) |
關聯(Association) | |
聚合(Aggregation) | |
組合(Composition) | |
泛化(Generalization) | |
實作(Realization) |
1.3、示例
(1)圖書館管理系統類圖
2、包圖
2.1、作用
包圖(Package Diagram)用于展現由模型本身分解而成的組織單元(包)及它們的依賴關系
核心概念
- 包(架構、層、子系統)
- 依賴
2.2、組成元素
組成元素 | 符号 |
包(Package) | |
關系 | 依賴(Dependency) |
關聯(Association) | |
聚合(Aggregation) | |
組合(Composition) | |
泛化(Generalization) | |
實作(Realization) |
2.3、示例
在圖書館管理系統中,如上圖所示,系統高層分為 3 層,其中界面層負責使用者互動;資料通路層負責通路底層資訊;業務邏輯層負責協調界面層和資料通路層間的通路邏輯。此外,對于資料通路層内部,又可以采用分包的方式進行邏輯劃分,如圖右半部分所示,分為借閱包、讀者包、圖書包。
3、對象圖
3.1、作用
對象圖(Object Diagram)用于表示在某一時刻,類的對象的靜态結構和行為;
核心概念
對象、連結、多重性
3.2、組成元素
組成元素 | 符号 |
對象(Object) | |
關系 | 依賴(Dependency) |
關聯(Association) | |
聚合(Aggregation) | |
組合(Composition) | |
泛化(Generalization) | |
實作(Realization) |
3.3、示例
(1)某教職工借閱資訊對象圖
4、組合結構圖
4.1、作用
組合結構圖(Composite Structure Diagram)用于描述系統中某一部分(組合結構)的内部結構,包括該部分與系統其他部分的互動點。
核心概念
組合結構、部件、端口、角色綁定。
4.2、組成元素
組成元素 | 符号 |
部件(Part) | |
端口(Port) | |
協作(Collaboration) | |
連接配接(Connector) | |
角色綁定(Role binding) |
4.3、示例
(1)借書過程的組合結構圖
為了完成系統所需的某些功能(如借書),需要幾個類之間進行互相協作,而這幾個類就構成了一個組合結構。為了完成借書的功能,這些類之間存在着一定的接口(組合結構圖中稱為端口)和連接配接,這些資訊即可通過組合結構圖來反映。上圖展示了借書過程的組合結構圖,為了完成借書的過程,在該圖中需要設定借閱使用者界面類(BorrowUI)、借閱控制類(BorrowCtrl)、借閱資訊類(BorrowInfo)、讀者類(Reader)和圖書類(Book)。
5、構件圖
5.1、作用
構件圖(Component Diagram)将封裝類作為構件,描述在系統實作環境中的軟體構件和它們之間的關系。
核心概念
- 構件、工件、接口(所供接口、所需接口)
- 裝配連接配接、委托連接配接、依賴。
推薦場景:系統設計(系統依賴、邊界)、實作、部署等
5.2、組成元素
組成元素 | 符号 |
構件(Component) | |
所供接口(Shallow History) | |
所需接口(Required Interface) | |
裝配連接配接(Assembly Connector) | |
委托連接配接(Delegate Connector) | |
依賴(Dependency) |
PS:所供接口和所需接口是 UML 2 中提出的概念,UML 1.x 隻有接口的概念,特指所供接口
5.3、示例
(1)圖書館管理系統構件圖
UML 1.x 中的構件圖
UML 2 中的構件圖(新增了所供接口和所需接口圖示)
(2)ACI 排程系統構件圖
(3)Policy Admin Components Wiring
6、部署圖
6.1、作用
部署圖(Deployment Diagram)描述系統所需的硬體環境的實體結構,以及軟體資源在硬體環境中的部署方案。部署圖中的主要概念包括以下幾個。
核心概念
- 節點、工件、部署規範
- 連接配接、依賴
推薦場景
系統設計、實施、部署等場合。
6.2、組成元素
組成元素 | 符号 |
節點(Node) | |
工件(Artifacts) | |
部署規範(Deployment) | |
通信路徑 (Communication Path) | |
依賴(Dependency) | |
部署(Deploy) | |
承載(Manifestation) |
6.3、示例
(1)圖書館管理系統部署圖
從圖中可以看到,該系統共有 4 類不同的節點。其中“讀者用戶端”面向普通讀者提供查詢、預約等功能;“從業人員前置機”面向從業人員用于實作具體的借書、還書業務;“背景資料庫”用于運作系統資料庫環境;“管理者背景”用于幫助管理者實作各種系統維護功能。
(2)deployment 實體部署圖
7、外廓圖
7.1、作用
外廓(Profile)是基于 UML 元素的子集為特定領域定義 UML 的一個特定版本,即定義了一組對 UML 已有模型的擴充和限定機制,以用于某個特定領域,自 UML 2.3 起,UML标準新增了外廓圖。即如果目前所有的 UML 圖如果滿足不了業務模組化訴求的時候,就可以用外廓圖在已有的模型上擴充或減少一些 UML 元模型元素,“創造”出一種新的模組化圖。
這些擴充和限定機制包括:預定義的構造型、标記值、限制、基類等。
針對一些常用的應用領域,OMG推出了一些标準的擴充,如用于實時嵌入式模組化的MARTE(UML Profile for Modeling and Analysis of Real-time and EmbeddedSystems)、用于測試的UML Testing Profile、用于硬體設計的UML Profile for System on a Chip等。
7.2、組成元素
組成元素 | 符号 | 作用 |
構造型 | 定義了針對已存在元模型的擴充,可定義屬性 | |
元類 | 定義了該 profile 中的基本元模型 | |
外闊 | 定義了一個 profile 包結構,其内部可 以包括構造型、元類等 | |
擴充 | 構造型到元類之間的關系,表名該構造 型可以針對哪些元類進行擴充 | |
外廓應用 | 使用者模型到外廓包之間的依賴關系,表明使用者模型可以應用外廓包中的擴充 | |
引用 | 外廓包和外部其他包之間的關系,表明該外廓包引用了外部元素 |
7.3、示例
(1)用于資料庫模組化的外廓圖
資料庫模組化的核心概念是表、字段和關系等,這些概念在 UML 标準規範中并沒有定義,無法直接利用 UML 模組化。為此,我們需要通過擴充 UML 類圖中的相關概念,如可以利用 UML 類模組化表,利用類的屬性模組化表的字段,利用類之間的關聯關系來模組化實體間的關系。
這裡,我們利用外廓圖定義了 3 個構造型 MyTable、MyColumn 和 MyRelationship,分别表示資料庫表、字段和關系,它們各自從 UML 元類中的類(Class)、屬性(Attribute)和關聯關系(Association)上擴充而來;此外,對于 MyColumn 構造型,我們還添加了兩個布爾類型的标記值PK和IsNULL,分别表示該字段是否為主鍵(預設值為false)、是否可以為空(預設值為 true)。
需要說明的是,該圖采用 Enterprise Architect 繪制,圖中 3 個擴充的構造型沒有采用組成元素好表的标準表示形式(即名稱前面加“<<stereotype>>”的方式),而是采用右上角添加“《》”的方式表示,這是該模組化工具所提供的特定圖形符号。
篇幅有限,下篇會講到另外7種動态行為圖及其設計示例。
作者:劉仁權 (弈閣)
來源-微信公衆号:螞蟻研發效能
出處:https://mp.weixin.qq.com/s/N0ExeWcTufnzQTLllSlSaQ