1. 基本概念
? UML(Unified Modeling Language)即統(tǒng)一建模語言准验,為面向?qū)ο箝_發(fā)系統(tǒng)的產(chǎn)品進(jìn)行說明、可視化黔龟、和編制文檔的一種標(biāo)準(zhǔn)語言。下面將對UML的==九種圖+包圖==的基本概念進(jìn)行介紹以及各個圖的使用場景。
? UML圖分為用例視圖婶熬、設(shè)計視圖、進(jìn)程視圖埃撵、實現(xiàn)視圖和拓?fù)湟晥D赵颅,又可以靜動分為靜態(tài)視圖和動態(tài)視圖。靜態(tài)圖分為:==用例圖暂刘,類圖饺谬,對象圖,包圖谣拣,構(gòu)件圖募寨,部署圖==。動態(tài)圖分為:==狀態(tài)圖森缠,活動圖拔鹰,協(xié)作圖,序列圖==贵涵。
2. 用例圖
? 用例圖用于從用戶角度闡述==軟件的各個功能==和其==功能的使用者==.主要使用于需求分析階段,是非常符合用戶思維的設(shè)計.
(1). 用例圖所包含的元素
1). 參與者(Actor)
? 與軟件進(jìn)行交互的用戶,組織或者其他外部系統(tǒng).
2). 用例(Use Case)
? 用例就是外部可見的系統(tǒng)功能,不包含其內(nèi)部邏輯實現(xiàn).這里完全站在不懂技術(shù)的用戶的角度思考問題.
3). 系統(tǒng)邊界
? 用來分割用例,將用例分割為不同的子系統(tǒng),子系統(tǒng)內(nèi)部的功能聯(lián)系緊密.當(dāng)然也可以只存在一個完整的系統(tǒng)邊界,例如下圖.
(2). 用例圖包含的關(guān)系
1). 關(guān)聯(lián)
? 參與者和用例的關(guān)系,任何一方都可發(fā)送或接受消息.
? 畫法:實線,無箭頭.
2). 泛化
? 可以理解為繼承關(guān)系.父用例通常是抽象的.
? 畫法:實線,空心三角形箭頭,由子用例指向父用例.
3). 包含
? 將復(fù)雜用例劃分為較小的步驟,類似程序中的代碼封裝,主程序中調(diào)用子過程.
? 畫法:虛線,線狀箭頭,標(biāo)記<<includes>>,復(fù)雜用例指向子過程.
4). 擴(kuò)展
? 指用例功能的延伸,相當(dāng)于為基礎(chǔ)用例提供一個附加功能.
? 畫法:虛線,線狀箭頭,標(biāo)記<<extends>>,拓展用例指向主用例.
3. 類圖
? 根據(jù)用例圖抽象出類,用于面向?qū)ο蟪绦蛟O(shè)計.描述類的內(nèi)部結(jié)構(gòu)和類與類之間的關(guān)系,是一種靜態(tài)結(jié)構(gòu)圖.
(1). 類圖基礎(chǔ)屬性
1). 類名
2). 屬性域
? 訪問級別 字段名 : 類型
3). 方法域
? 訪問級別 方法名(參數(shù)) : 返回值類型
+表示public
-表示private表示protected
~表示default,也就是包權(quán)限
_下劃線表示static
斜體表示抽象
(2). 類與類之間關(guān)系
1). 泛化(Generalization)
? 表示繼承關(guān)系或者類對接口的實現(xiàn)關(guān)系.Java中即 extends 和 implements 兩個關(guān)鍵字.
? 畫法:空心三角形箭頭,實線表示繼承父類,虛線表示實現(xiàn)接口.箭頭指向父類或者接口.
2). 依賴(Dependency)
? 一個類的實現(xiàn)需要另一個類的協(xié)助,如方法的參數(shù),局部變量或者靜態(tài)方法的調(diào)用.
? 畫法:虛線,線狀箭頭
3). 關(guān)聯(lián)(Association)
? 一個類知道另一個類,成員變量.
? 畫法:實線,線狀箭頭,如果為雙向關(guān)聯(lián),則去掉箭頭或者雙向箭頭都可以.箭頭指向成員變量
4). 聚合(Aggregation)
? 整體與部分的關(guān)系,是一種弱的‘擁有’關(guān)系,==部分可以獨立存在==.是關(guān)聯(lián)的一種,語法上無發(fā)區(qū)分,需要依賴邏輯區(qū)分.兩個對象具有各自的生命周期.
? 畫法:在關(guān)聯(lián)的基礎(chǔ)上,加空心菱形.
5). 組合(Composition)
? 同樣是整體和部分的關(guān)系,這里是強(qiáng)"擁有"關(guān)系,部分不可以獨立存在,是關(guān)聯(lián)的一種.部分和整體的生命周期一樣.
? 畫法:關(guān)聯(lián)的基礎(chǔ)上,加實心菱形.
4. 對象圖
(1). 概念
? 描述參與交互的==各個對象==在交互過程中的==某時刻的狀態(tài)==(所以只有屬性,不包含方法),可以看做是類圖在某一時刻的快照.表示對象之間的特定關(guān)系.
? 不包含對象的方法,名稱欄新增對象名.屬性欄中為當(dāng)前值.
? 對象圖中的建模元素主要有對象和鏈(所有關(guān)系統(tǒng)一使用實現(xiàn)來表示,不加以區(qū)分)格郁,對象是類的實例,鏈?zhǔn)穷愔g的關(guān)聯(lián)關(guān)系的實例独悴。
5. 狀態(tài)圖
? 一種由==狀態(tài),變遷,事件和活動==組成的自動機(jī).用來描述類的對象所有可能的狀態(tài)以及狀態(tài)轉(zhuǎn)移條件.
(1). 組成元素
- 狀態(tài):圓角矩形,文字?jǐn)⑹銎錉顟B(tài)內(nèi)容
- 轉(zhuǎn)移:箭頭,文字?jǐn)⑹鲛D(zhuǎn)移條件
- 起點:一個黑點
- 終點:一個圈加一個黑點
(2). 狀態(tài)機(jī)
? 描述了系統(tǒng)從一個狀態(tài)響應(yīng)一個事件后達(dá)到另一個狀態(tài)的一系列行為.
6. 活動圖
(1). 概念
? 是狀態(tài)圖的特殊情況,所有的狀態(tài)都處于活動狀態(tài),==本質(zhì)上是一種流程圖==.支持并發(fā)進(jìn)程.
(2). 組成元素
1). 起點
? 實心黑色圓點.
2). 終點
? 圓圈加內(nèi)部實心黑色圓點.
3). 動作狀態(tài)
? 是指原子的不可中斷的動作例书,并在此動作完成后通過完成轉(zhuǎn)換轉(zhuǎn)向另一個狀態(tài).
4). 動作流
? 動作之間的轉(zhuǎn)換,用帶箭頭的直線表示刻炒,箭頭的方向指向轉(zhuǎn)入的方向
5). 分支與合并
? 菱形表示,由一個箭頭指向分支符號(轉(zhuǎn)換),一個或者多個箭頭從分支符號指向外(離開轉(zhuǎn)換).每一個離開轉(zhuǎn)換都對應(yīng)一個監(jiān)護(hù)條件.滿足條件才能執(zhí)行該轉(zhuǎn)換.
6). 分叉與匯合
? 動作流分為兩個或者多個并發(fā)運行的分支.
7). 泳道
? 將活動圖中的活動劃分為若干組决采,并把每一個組指定個負(fù)責(zé)這組活動的業(yè)務(wù)組織,即對象坟奥。在活動圖中树瞭,泳道區(qū)分了負(fù)責(zé)活動的對象,它明確的表示了哪些活動是由哪些對象進(jìn)行的爱谁,在包含泳道的活動圖中晒喷,每個活動只能明確的屬于一個泳道
7. 時序圖(序列圖)
(1). 概念
? 交互圖的一種,描述了對象之間消息發(fā)送的先后順序,強(qiáng)調(diào)時間順序.
(2). 組成元素
1). 角色
? 程序外的其他人或者其他系統(tǒng).
2). 對象
? 位于時序圖的頂部,是一個矩形框.表示處理響應(yīng)步驟的處理者.
3). 生命線
? 角色和對象都有一條向下的生命線,是一條虛線.
4). 控制焦點
? 生命線上的窄矩形框,代表生命周期中這段時間處于激活狀態(tài).
5). 消息
? 代表對象之間發(fā)送的信息.分為三種:
-
同步消息:會等待返回消息.使用實線+實心箭頭表示.
image-20200221133148651 -
異步消息:不進(jìn)行等待,發(fā)完消息后繼續(xù)自己的活動,使用并發(fā)完成.使用實線+線狀箭頭表示.
image-20200221133223406 - 返回消息:對消息的回應(yīng),相當(dāng)于返回值.使用虛線+線狀箭頭表示.
8. 協(xié)作圖(通信圖)
(1). 概念
? 交互圖的一種.按照空間結(jié)構(gòu)布圖,而非時序圖的時間結(jié)構(gòu).
? 協(xié)作圖與時序圖在語義上是等價的,二者可以相互轉(zhuǎn)換访敌,而不會丟失信息凉敲。
(2). 組成元素
1). 對象
2). 鏈接
? 用來關(guān)聯(lián)對象,使用無箭頭的實線鏈接.
3). 消息
? 消息是協(xié)作圖中對象與對象之間通信的方式
9. 構(gòu)件圖
本小節(jié)總結(jié)自:UML構(gòu)件圖
(1). 概念
? 構(gòu)件圖也叫組件圖,由構(gòu)件,接口和構(gòu)件之間的關(guān)系構(gòu)成
? 用來表示系統(tǒng)中構(gòu)件與構(gòu)件之間,類或者接口與構(gòu)件之間的關(guān)系.(構(gòu)件是系統(tǒng)中可替換的物理部分,它包裝了實現(xiàn)而且遵從并提供一組接口的實現(xiàn))
? 其中構(gòu)件之間的關(guān)系為依賴,類或接口與構(gòu)件之間的關(guān)系為依賴或者實線.
(2). 組成元素
1). 構(gòu)件
? 構(gòu)件是實現(xiàn)接口的物理單元,是可替換的.是軟件,類似于jar包,可執(zhí)行文件,庫,文件,文檔等.
? 構(gòu)件通過它提供的接口和請求展現(xiàn)行為.
? 表示方式:
2). 接口
? 由一組操作組成,是構(gòu)件的一部分,分為提供接口和請求接口;
提供接口
? 意味著該接口是向其他構(gòu)件提供功能的.實現(xiàn)接口的構(gòu)件支持該接口中的所有功能.
? 使用棒棒糖圖標(biāo)表示.
Java中顯示表示為 implements 關(guān)鍵字;
請求接口
? 指該構(gòu)件向其他構(gòu)件請求服務(wù)時需要的遵循的接口.
? 要使用接口所需要的條件,對應(yīng)另外一個提供接口.比如內(nèi)部有一個接口的成員變量或者方法傳參.
? 使用插座式圖標(biāo)表示.
3). 端口
? 是構(gòu)件的一部分,所有進(jìn)出構(gòu)件的交互都要通過端口,也就是說,所有接口都需要通過端口實現(xiàn).
與接口的關(guān)系
? 一個構(gòu)件可以通過一個特定端口同另一個構(gòu)件通訊,而且通訊完全是通過由端口支持的接口來描述的爷抓。
表示
? 在接口的尾部加小方框,這個小方框就代表端口.
4). 連接器
組件連接器
? 組件連接器是兩個構(gòu)件實例間的連接件势决,它定義一個構(gòu)件實例提供服務(wù),另一個構(gòu)件實例使用這些服務(wù)
? 顯示的單純表示連接可以用一條實線表示(直接連接器),而通過接口實現(xiàn)的連接則需要通過棒棒糖圖標(biāo)和插座圖標(biāo)的結(jié)合表示.
委托連接器
? 委托連接件把外部對構(gòu)件端口的請求分發(fā)到構(gòu)件內(nèi)部的部件實例進(jìn)行處理蓝撇,或者通過構(gòu)件端口把構(gòu)件內(nèi)部部件實例向構(gòu)件外部的請求分發(fā)出去果复。
? 用于組件和其內(nèi)部組件的連接.
? 注明一點,委托連接器適用于構(gòu)件內(nèi)部的部件.
注意事項:因為構(gòu)i件是可以嵌套的,所以內(nèi)部構(gòu)件之間的連接(球-穴)是組裝連接件渤昌,內(nèi)部構(gòu)件與端口之間的連接(實線箭頭)是委托連接件虽抄。
5). 依賴關(guān)系
? 與類圖中的依賴關(guān)系相同.都是由客戶指向提供者的虛線箭頭.
10. 部署圖
(1). 概念
? 部署圖描述的是系統(tǒng)程序運行時的結(jié)構(gòu),展示了硬件配置和相關(guān)的網(wǎng)絡(luò)結(jié)構(gòu).
? 一個系統(tǒng)只有一個部署圖,往往被用來描述分布式系統(tǒng).
? 用于展示系統(tǒng)軟件和硬件的拓?fù)浣Y(jié)構(gòu).清晰的說明系統(tǒng)的使用部署,環(huán)境等情況.
(2). 組成元素
1). 結(jié)點
? 代表計算機(jī)上的物理資源,可以是硬件(外設(shè)),也可以是軟件資源(防火墻,數(shù)據(jù)庫).
? 使用三維的盒子表示.
2). 結(jié)點實例
? 與結(jié)點的區(qū)別在于冒號加名稱.
3). 結(jié)點類型
? 結(jié)點類型有:?cdrom?, ?cd-rom?, ?computer?, ?disk array?, ?pc?, ?pc client?, ?pc server?, ?secure?, ?server?, ?storage?, ?unix server?, ?user pc?,并在結(jié)點的右上角用不同的圖標(biāo)表示独柑,如下圖
4). 物件
? 軟件開發(fā)過程中的產(chǎn)物,如UML圖,源代碼,設(shè)計文檔等等.
? 表示如下,帶有關(guān)鍵字<<artifact>>和文檔圖標(biāo):
5). 連接
? 結(jié)點之間的連線表示系統(tǒng)之間進(jìn)行交互的通信路徑,被稱為連接.
6). 結(jié)點容器
? 一個結(jié)點包含了其他結(jié)點,那么稱這個結(jié)點為結(jié)點容器.
11. 各種圖的差異比較
(1). 時序圖 VS 協(xié)作圖
? 這兩個圖都是交互圖,語義上等價,可以相互轉(zhuǎn)化,但是則重點不同.
? 顧名思義,時序圖側(cè)重時間上的先后順序,協(xié)作圖則側(cè)重于對象間的協(xié)作關(guān)系(空間結(jié)構(gòu)).
(2). 狀態(tài)圖 VS 活動圖
? 二者都是行為圖.
? 狀態(tài)圖側(cè)重狀態(tài)改變的結(jié)果(行為驅(qū)動而已),而活動圖側(cè)重于改變狀態(tài)的行為.
? 活動圖并不是必須的,滿足以下條件時才有必要繪制:
- 出現(xiàn)并行或則并發(fā)行為
- 描述算法(側(cè)重于行為)
- 跨越多個用例(只側(cè)重于結(jié)果描述可能表達(dá)不清楚)
(3). 活動圖 VS 交互圖(時序圖和協(xié)作圖)
? 都涉及到對象和對象之間傳遞的消息.
? 交互圖觀察的是傳送消息的對象,而活動圖觀察的是傳送的消息(事件之間活動的邏輯關(guān)系中包含了消息的內(nèi)容).