當你老大扔給你這樣的圖,或者你需要完成某些功能而去看文檔的時候發現以下類似這樣的圖會不會不(一)知(臉)所(懵)措(逼):
(微信的支付流程)
如果你看了都不會一臉懵逼,那麼說明你對這方面還是有一定的研究啦,小帥b的這篇文章就是來跟你說明這些圖的意思,讓你在工作交流中,或者在看一些文檔,或者看一些關于設計模式的文章,甚至架構模組化中,都能輕松了解,毫無壓力!
1.用例圖
剛剛我們看到的第一張圖檔就是用例圖,用例圖有以下幾個東東:
用例
參與者
關聯
系統邊界
「用例」使用橢圓來表示,橢圓裡邊寫上用例的名稱:
「參與者」用一個小人兒,在小人兒下面寫上參與者名稱,例如學生:
「關聯」用一條線兒表示:
把用例圍起來,「系統邊界」就用個矩形啦:
舉個例子:
我們可以看到這個系統叫做 「購物系統」 。
有新增賬號、登入系統、生成訂單的用例(這裡隻列舉幾個用例,其它用例省略)。 參與者有顧客和管理者, 顧客關聯到了新增賬號和登入系統的用例, 管理者關聯到了登入系統和生成訂單的用例!
2.時序圖
「時序圖」就是我們剛剛看到的第二個圖,時序圖有以下幾個東東:
- 對象
- 生命線
- 活動條
- 消息
- 控制流
- 順序
- 分支
- 循環
「對象」在矩形裡邊,左邊是對象名稱,右邊是對象類型,下方還有一條線:
用虛線代表的是對象的「生命線」:
「活動條」是一個豎着的矩形,當接收到消息的時候,這個對象就會有活動條:
「消息」用一根箭頭,箭頭上面寫上消息資訊,例如一個登入方法 login(userName,passWord):
「控制流」有三種,「普通控制流」就是按順序的一個流程,還有「分支控制流」就相當于if else:
矩形裡邊有一條虛線,左上角用ALT表示,當C為true的時候,就執行虛線上方的内容,當C為false的時候就執行虛線下方的内容。
「循環控制流」:左上角有LOOP表示循環,當C為true的時候,就循環執行方框裡邊的内容:
舉個時序圖例子:
可以看到,每個對象都有它們的生命線(虛線):
- 一開始使用者給類型為GUI(界面)的Login對象發送一個登入資訊 「 login(userName,passWord)」 ;
- Login這個對象接收到了就會産生活動條,這時候Login這個界面會給類型為Controller的loginController發送登入資訊「 login(userName,passWord)」 ;
- 此時loginController接收到資訊産生活動條,這時候loginController去找類型為DB的UserDao,給它發送了一個擷取使用者密碼的資訊「getUserPassword(userName)」;
- UserDao接收到資訊後産生活動條,傳回使用者的密碼;
- 此時loginController接收到資訊(使用者的密碼 userPassword),loginController此刻将資訊發送給自己,通過verify去校驗密碼并且用result接收結果;
- 校驗就産生了分支控制流,當resul為true的時候loginController會發送success給Login,當result為false的時候,loginController會發送failure給Login;
- 最後Login最後給使用者發送messag資訊。
好了,當你看到這裡的時候,你就會發現,以後關于這類的時序圖對你來說已經不在話下了。例如本文一開始的第二張圖。
3.類圖
類圖有以下幾個東東:
- 類名
- 屬性
- 方法
- 可見性
- 資料類型
- 關聯關系
- 依賴關系
- 繼承/實作關系
- 組合/聚合關系
類名、屬性、方法在一個矩形中,分為上中下:
可見性:
- private的時候在前方用 - 表示
- public的時候在前方用 + 表示
- protected的時候在前方用 # 表示
資料類型表示形式:「名字 : 類型」,例如:
userName 和 passWord 這兩個屬性是protected修飾的,資料類型都是String;login() 和 register() 這兩個方法是public修飾的,資料類型都是boolean;
關聯關系,用實線表示,例如A關聯B:
依賴關系,用虛線表示,例如A依賴B:
繼承關系,用一個△ + 一條實線表示,例如A繼承B:
實作關系,用過一個△ + 一條虛線表示,例如A實作B:
組合關系,用一個 ♦ + 一條虛線表示,例如A組合B:
聚合關系,用一個 ◇ + 一條虛線表示,例如A組合B:
聚合:表示兩個對象之間是整體和部分的弱關系,部分的生命周期可以超越整體。如電腦和滑鼠。
組合:表示兩個對象之間是整體和部分的強關系,部分的生命周期不能超越整體,或者說不能脫離整體而存在。組合關系的“部分”,是不能在整體之間進行共享的。
類圖舉例子:
可以看到,有:User類,Customer類,Address類,Role類,Payment類,aliPay類,wechatPay類。
其中Customer 繼承 User,User類的userName 和 passWord 這兩個屬性是protected修飾的,資料類型都是String;
login() 和 register() 這兩個方法是public修飾的,資料類型都是boolean;
Address和Role聚合User,Customer依賴Payment;
aliPay 和 wechatPay 實作了 Payment。
以上,就是關于UML的用例圖,時序圖,類圖。下次架構師再扔這些圖給你你就不會懵逼了。
你也可以自己手動畫幾個試試,感覺挺不錯哦,相信你在工作交流中,或者在看一些技術文檔,或者看一些關于設計模式的文章,甚至架構模組化中,都能輕松了解,毫無壓力。
建議在寫代碼之前,先看看架構師給你畫的這些圖再碼,如果沒有,自己可以先畫圖理清思路再碼代碼,事半功倍。
ps:之前咱們說的《來跟你說兩件事情》,一個月過去了,接下來會有騷操作了,快把公衆号設為星标,即将通知你,敬請期待,敬請關注,錯過了就虧得一批了....下回見,peace!
掃一掃
學習 Python 沒煩惱