UML使用-身為開發(fā)人員需要具備的作圖能力
畫圖無疑是開發(fā)人員必備的能力之一,好的圖可以很快跟業(yè)務(wù)測試展示系統(tǒng)和代碼的設(shè)計以及業(yè)務(wù)邏輯,讓需求評審更有效率。
個人的理解,圖不必要事無巨細,遵循嚴格標準,只要能表達到位,可以不拘小節(jié)。
這里僅僅談使用,不談嚴格定義和標準。
最常見也最重要的無疑是類圖和序列圖,其他作為補充內(nèi)容
下面先介紹類圖
類圖
類圖主要用于表示應(yīng)用內(nèi)部每個類的職責(zé)和行為還有類之間的對應(yīng)關(guān)系,詳情如圖所示

幾乎和訂單打過交道的開發(fā)者應(yīng)該都不會感到陌生。
圖中方框是類,有分成三個隔開的部分:類名,屬性與操作。
類與類之間也有兩種關(guān)系:關(guān)聯(lián)和泛化
屬性
屬性(attribute)圖示法把特性表述成類框中的一行正文。
可見性 名:類型 ? 重數(shù)=默認{特征串}
-名:String[1]=”Untlitled”{readOnly}
只有名是必要的,可見性 ?公用+私有-包級私有~保護#
關(guān)聯(lián)
是類與類之間的一條實線,從源類指向目標類。
重數(shù)
關(guān)聯(lián)兩邊的值,表示一對一或者多對一的關(guān)系。符號和正則表示類似
一般一對多關(guān)系,多的那一方單值關(guān)聯(lián),指向一的那一方。
泛化
其實就是從子類抽取父類的過程。也可以用特征值表示,比如上圖客戶字段和操作一樣的話,也可以用一個字段表示個人客戶和公司客戶,我們會稱這個字段為特征值。
注文與注釋
虛線與其他實體相連??梢栽谌我馕恢贸霈F(xiàn)。圖中黃色部分。
依賴
一個類依賴另一個類比如業(yè)務(wù)類依賴工具類。依賴是單向的。依賴不是簡單的傳遞關(guān)系,間接依賴和直接依賴有很大區(qū)別。
約束規(guī)則
放在{}中
使用的原則,不必畫的事無巨細,圖本來就是用于輔助理解的,關(guān)注什么就畫什么。
接口與抽象類

子類指向接口。斜體也常常表示抽象類
補充
泛化與分類的區(qū)別,泛化有傳遞關(guān)系,分類則不然
泛化
牧羊犬——》狗屬——》犬科——》哺乳動物
分類
牧羊犬,獵犬,觀賞犬
序列圖
如圖就是一個簡易的供應(yīng)鏈系統(tǒng)結(jié)構(gòu)。序列圖可以直觀表示出幾個系統(tǒng)之間的交互情況

當(dāng)然它也可以用在一個應(yīng)用系統(tǒng)內(nèi)部表明數(shù)據(jù)流向

一般實心箭頭表示同步消息,箭頭表示異步消息。當(dāng)然也可以在備注里指明。
包圖
主要用于分析分布式應(yīng)用系統(tǒng)的各個模塊依賴時。
分清系統(tǒng)層級依賴關(guān)系,避免循環(huán)依賴,

包之間具有依賴、導(dǎo)入、泛化、實現(xiàn)、包含、合并等關(guān)系

狀態(tài)機圖
狀態(tài)機圖善于表述對象行為。比如經(jīng)典的java線程狀態(tài)

狀態(tài)機圖如果流程比較復(fù)雜也可以使用流程引擎,一定注意不要過度設(shè)計,引入流程引擎會降低代碼的可讀性,畫流程引擎的狀態(tài)圖
可以不用工具,用流程引擎的idea插件畫圖就可以,還能直接逆向工程生成代碼
輕量流程引擎框架
https://liteflow.yomahub.com/
阿里compileflow
https://github.com/alibaba/compileflow/blob/master/README_CN.md
流程圖
這個不屬于uml,而且是個開發(fā)都會,就不過多介紹了
推薦使用的工具
processOn
https://www.processon.com/
Draw.io
https://draw.io/
Visual Paradigm
這個我比較常用,社區(qū)版夠用了,功能比較強大,在線版的勝在方便。
畫的圖內(nèi)部還可以創(chuàng)建遞歸的圖表

本文使用 文章同步助手 同步