UML入門使用指南
UML可以理解為一種標準化建模語言,主要用于系統(tǒng)描述與業(yè)務建模,那么,如何使用UML?這篇文章里,作者就進行了拆解分析,并對類圖、用例圖等類型進行詳解,一起來看看吧。
一、WHAT?
什么是UML?
從網(wǎng)上了解到的UML的定義:UML(Unified Modeling Language)是統(tǒng)一建模語言的縮寫,是一種標準化建模語言,由一組集成圖組成,旨在幫助系統(tǒng)和軟件開發(fā)人員指定、可視化、構建和記錄軟件系統(tǒng)的工件,以及用于業(yè)務建模和其他非軟件系統(tǒng)。
從定義中了解到的關鍵字為UML是一種標準化建模語言,包含各種可視化集成圖,主要用于系統(tǒng)描述和業(yè)務建模。
二、WHY?
為什么需要UML?
在需求溝通方面,系統(tǒng)研發(fā)過程中包含了各類參與者,包含項目經(jīng)理、產(chǎn)品經(jīng)理、研發(fā)和測試,使用UML在于信息交互時的標準化,標準化的信息可以最大限度的降低溝通成本和減少溝通漏斗。
在系統(tǒng)設計方面,在使用UML時,可對現(xiàn)實中的業(yè)務需求,通過建模,將現(xiàn)實生活中的業(yè)務活動真實映射到對應的圖形中,最大程度還原業(yè)務需求。
在系統(tǒng)描述方面,通過UML的靜態(tài)和動態(tài)圖形(語言),可以讓閱讀者最快速、最全面的了解到整個系統(tǒng)是如何構成和運行的。
三、HOW?
如何使用UML?
UML是開發(fā)面向對象軟件和軟件開發(fā)過程中非常重要的一部分,分為結構型和行為型的圖。
1. 結構型
結構型(structure diagram):結構型的圖描述是某種結構,這種結構在某段時間內(nèi)應該是穩(wěn)定的、“靜態(tài)”的。
結構型圖包含類圖(class diagram)、對象圖(object diagram)、結構圖(component diagram)、部署圖(deployment diagram)和包圖(package diagram)。
類圖為必須會的結構型圖,主用作分析業(yè)務概念。
結構圖、部署圖主用作分析IT基礎架構、軟件架構。
對象圖、包圖則很少使用。
2. 行為型
行為型(behavior diagram)的圖描述的是某種行為,是“動態(tài)”的。
行為型圖包含活動圖(activity diagram)、狀態(tài)機圖(state diagram)、時序圖(sequence diagram)、通信圖(communication diagram)和用例圖(use case diagram)。
活動圖、狀態(tài)機圖、時序圖為必須會的行為型圖,主用作分析業(yè)務流程,大部分情況下至少會用到其中兩種圖。
用例圖也為必須會的行為型圖。
通信圖則很少使用。
由此可見,掌握UML中的20%,就能解決需求分析中的80%的問題。
不同圖形的使用,沒有規(guī)定的先后順序,但一定會交叉使用,不斷迭代對應的圖形,最終得到終版。
3.1 類圖
類圖是鍛煉面向對象分析和面向對象設計思想的重要工具,是業(yè)務結構建模的重要工具,也是其他圖形的基礎。
類圖是用來展示系統(tǒng)中類的靜態(tài)結構和類之間的關系,類圖中的基礎元素包含類和接口。
1)結構
類圖分為三層去表示,第一層為類名稱、第二層為類屬性、第三層為類的方法。
在需求分析過程中,均使用中文即可,類的屬性值和方法值類型可根據(jù)自己的要求去補充。
值類型為字符串(string)、日期(date)、整數(shù)(int)、小數(shù)(double)和布爾(boolean)類型。
2)關系
類圖包含3類5種關系,包含泛化 (Generalization) 、實現(xiàn)(Realization)和關聯(lián)(Association)三大類,關聯(lián)關系又包含聚合 (Aggregation)、組合(Composition)和依賴(Dependency)。
a)泛化
關系說明:類的泛化是將具體抽象成抽象類,抽象類表示這種類是提煉出來的一種概念,不是具體存在的,具體類具有抽象類的屬性和方法,可用‘is a’理解。
表示方法:由繼承類(具體類)實線空心箭頭指向被繼承類(抽象類)。
舉例說明:學生 is 用戶。
b)關聯(lián)
關系說明:關聯(lián)是一種擁有關系,關聯(lián)可以是單向的也可以是雙向的,單向關聯(lián)只會有一個箭頭,雙向關聯(lián)可以兩個箭頭或者沒有箭頭。
表示方法:由擁有者實線實心箭頭指向被擁有者。
多重性:多重性表達在連線末端,表示兩個類之間的數(shù)量關系。
- 數(shù)字:精確的數(shù)量
- *或者0..*:表示0到多個
- 0..1:表示0或者1個
- 1..*:表示1到多個
舉例說明:老師擁有學生,老師可以擁有很多學生,學生也可以有很多老師,所以二者是雙向關聯(lián)。
c)聚合
關系說明:聚合是整體和部分的一種關系,部分可以脫離整體而存在,整體和部分各自有自己的生命周期,可用‘has a’理解。
表示方法:由部分實線空心棱形箭頭指向整體。
多重性:多重性表達在連線末端,表示兩個類之間的數(shù)量關系。
- 數(shù)字:精確的數(shù)量
- *或者0..*:表示0到多個
- 0..1:表示0或者1個
- 1..*:表示1到多個
舉例說明:部門和員工的關系,部門可以有多名員工,員工也可屬于多個部門,部門的撤銷并不會導致員工的消失。
d)組合
關系說明:聚合是整體和部分的一種關系,部分不可脫離整體而存在,部分依托于整體,可用‘contains a’理解。
表示方法:由部分實線實心棱形箭頭指向整體。
多重性:多重性表達在連線末端,表示兩個類之間的數(shù)量關系。
- 數(shù)字:精確的數(shù)量
- *或者0..*:表示0到多個
- 0..1:表示0或者1個
- 1..*:表示1到多個
舉例說明:員工和員工卡的關系,員工可以沒有或者一張員工卡,員工卡也只可屬于某一個員工,不可屬于多名員工。
e)依賴
關系說明:依賴是兩個類的弱關聯(lián)關系,是偶發(fā)性的,可用‘use a’理解。
表示方法:由使用方虛線箭頭指向被使用方。
舉例說明:員工和筆的關系,在某些需要書寫的場景員工會使用筆。
f)實現(xiàn)
關系說明:實現(xiàn)為接口和類的關系,需求分析時用的較少。
表示方法:由類虛線空心三角箭頭指向接口。
舉例說明:登錄接口實現(xiàn)員工的登錄。
3)類圖的使用
類圖分析需求基本步驟:
- 識別出類
- 識別出類的基本屬性
- 描繪出類之間的關系
- 對各類進行分析、抽象、整理
在使用類圖的過程中,類之間的關系是因實際不同的業(yè)務形態(tài),關系也會有所不同。
例如,針對車和輪胎這兩類。
在二手車場景中,二者就是聚合關系。輪胎是車輛的組成部分,但是車也可以替換輪胎,替換下來的輪胎也可給其他車輛使用。
在車輛運行場景中,二者就是組合關系,車脫離輪胎后將無法運行。
因此,在類圖的使用過程中,一定要注重業(yè)務形態(tài)。
3.2 用例圖
用例圖是旨在描述系統(tǒng)使用用戶眼中系統(tǒng)的功能行為。
用例圖需包含參與者(actor)、用例(use case)和用例之間的關系(association)。
1)參與者
參與者表示參與和使用系統(tǒng)的一類角色。例如,用戶就是商城系統(tǒng)的參與者。
要精準把握參與者,需要注意以下幾點:
- 參與者位于系統(tǒng)之外,自身不屬于系統(tǒng)結構之中;
- 參與者是抽象的一類角色,而不是具體的對象。例如,即用戶是參與者,但是具體的用戶‘張三’不是參與者;
- 參與者不一定是人,也可是外部系統(tǒng)。例如,wms系統(tǒng)也可能是商城系統(tǒng)的參與者。
UML中用一個人表示參與者,可對不同的參與者進行命名。
2)用例
每一個橢圓表示一個用例,每個用例表示系統(tǒng)提供的一類功能。
3)關系
用例之間的關系包含三種,分別是包含、繼承和拓展。
a)包含
關系說明:包含關系表示主用例包含子用例。
表示方法:由主用例虛線實心箭頭指向子用例,虛線上標注《include》。
舉例說明:用戶在賬密登錄的時候,包含輸入賬號、輸入密碼、確認登陸這三個子用例。
b)繼承
繼承分為用例的繼承和角色的繼承。
① 用例的繼承
關系說明:繼承關系的兩個例子所處不同抽象層,被繼承的用例是繼承用例更抽象的用例。
表示方法:由繼承用例(具體用例)實線空心箭頭指向被繼承用例(抽象用例),實線線上不標注內(nèi)容。
舉例說明:用戶在登錄系統(tǒng)的時候,可以有賬密登錄、微信掃碼登錄這兩種方式。
② 角色的繼承
關系說明:繼承者是對被繼承者的更具體的角色,繼承者擁有被繼承者的所有用例,且繼承者具備特有用例。
表示方法:由繼承者實線空心箭頭指向被繼承者,實線線上不標注內(nèi)容。
舉例說明:普通用戶只有查看數(shù)據(jù)的權限,高級用戶還會有管理數(shù)據(jù)的權限。
c)拓展
關系說明:拓展關系是在基礎用例上在特定場景下功能拓展,拓展用例是對基礎用例的補充。
表示方法:由拓展用例實線實心箭頭指向基礎用例,實線線上標注《extend》。
舉例說明:用戶在登錄系統(tǒng)的時候,在忘記密碼的情況下可以有忘記密碼這個操作。
3.3 活動圖
1)元素
活動圖也就是平常我們所說的流程圖,具體元素包含以下:
- 開始節(jié)點:實心圓,表示活動圖的開始,一個活動圖中僅有一個
- 結束節(jié)點:圓圈內(nèi)加個實心圓,表示活動圖的結束,一個活動圖中可以有多個
- 活動:圓角矩形,表示活動
- 轉換:實線箭頭,兩個活動上一活動指向下一活動
- 分支和監(jiān)護條件:棱形表示分支,分支連接的轉換上標注監(jiān)護條件
- 分叉/匯合:分叉表示兩個或者多個并發(fā)運行的分支,每個分支都是相互獨立;匯合表示兩個或者多個分支全部完成之后,才可進入下一節(jié)點
2)活動圖的使用
例如:比如在申請加盟商入駐的場景,文字版描述如下:
- 加盟商需申請入駐平臺
- 入駐平臺前需先完成個人資料維護、公司資料的維護
- 后臺人員需對資料進行審核,審核通過則入駐完成,審核不通過則需重新維護資料
3.4 狀態(tài)機圖
狀態(tài)機圖描述了一個的對象在生命周期內(nèi)的各種狀態(tài)和對應的轉換條件,配合活動圖能簡潔扼要的描述對應的業(yè)務流程。
1)元素
狀態(tài)機圖包含元素如下:
- 開始狀態(tài):實心圓,表示狀態(tài)機圖的開始,一個狀態(tài)機圖中僅有一個
- 結束狀態(tài):圓圈內(nèi)加個實心圓,表示狀態(tài)機圖的結束,一個狀態(tài)機圖中可以有多個
- 狀態(tài):圓角矩形,表示狀態(tài)
- 轉換:實線箭頭,表示兩個狀態(tài)之間的關系,當滿足事件時,由上一個狀態(tài)指向下一個狀態(tài)
- 事件:標注在實線箭頭之上,表示特定的動作或行為
2)狀態(tài)機圖的使用
上例在申請加盟商入駐的場景中狀態(tài)機圖如下:
3.5 時序圖
也就是順序圖,強調時間維度下不同對象的消息交互。
1)元素
時序圖的元素包含如下:
- 對象/生命線:表示參與交互的對象。每個對象下方都連接著一條生命線(虛線),時序圖中可以包含多個對象/生命線
- 會話:對象被激活時,生命線上會出現(xiàn)一個長條,即會話,表示一次交互。
- 消息:表示對象間的消息通信,由一個對象的生命線指向另一個對象的生命線,包含調用消息和返回消息,其中返回消息分為同步消息和異步消息:
2)時序圖的使用
在用戶登錄的場景,文字版描述如下:
- 用戶在系統(tǒng)登錄頁「輸入賬密」
- 用戶「點擊登錄」按鈕
- 登錄模塊「發(fā)送登錄數(shù)據(jù)」到權限驗證模塊
- 用戶模塊對登錄數(shù)據(jù)進行「權限驗證」
- 驗證成功,則系統(tǒng)「進入主頁面」;驗證失敗,則「清空密碼」并且「提示密碼錯誤」
四、總結
本文從WHAT、WHY和HOW三個維度介紹了UML,從這三方面讀者能對UML有個粗略的認識。
類圖、用例圖、活動圖、狀態(tài)機圖和時序圖這五種使用頻率較高的圖熟練使用后,應該算是基礎入門了,對于需求分析也許會有較大的幫助,也許沒有,這些都因人而異。
UML終究是一種思考方式,了解了基礎使用之后,還是要多實踐。
這篇文章于我而言算是階段性的總結,希望對你也有用。
本文由@沒湯圓啦 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉載。
題圖來自 Unsplash,基于 CC0 協(xié)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務。提供信息存儲空間服務。
感謝!學習了!目前沒看到比你寫得更清楚更好懂的了,你一定是位優(yōu)秀的產(chǎn)品經(jīng)理!
組合那塊的關系說明寫錯了