什么是時(shí)序圖
時(shí)序圖(Sequence Diagram),又名序列圖、循序圖,是一種UML交互圖。它通過描述對象之間發(fā)送消息的時(shí)間順序顯示多個(gè)對象之間的動(dòng)態(tài)協(xié)作。
讓我們來看一看visio2016對時(shí)序圖的的解釋。
StarUML工具繪制的時(shí)序圖
StarUML下載地址:http://staruml.io/

時(shí)序圖的元素
我們在畫時(shí)序圖時(shí)會(huì)涉及7種元素:角色(Actor)、對象(Object)、生命線(LifeLine)、控制焦點(diǎn)(Activation)、消息(Message)、自關(guān)聯(lián)消息、組合片段。其中前6種是比較常用和重要的元素,剩余的一種組合片段元素不是很常用,但是比較復(fù)雜。我們先介紹前6種元素,在單獨(dú)介紹組合片段元素。
角色(Actor)
系統(tǒng)角色,可以是人或者其他系統(tǒng),子系統(tǒng)。以一個(gè)小人圖標(biāo)表示。
對象(Object)
對象位于時(shí)序圖的頂部,以一個(gè)矩形表示。對象的命名方式一般有三種:
1 對象名和類名。例如:華為手機(jī):手機(jī)、loginServiceObject:LoginService。
2 只顯示類名,不顯示對象,即為一個(gè)匿名類。例如::手機(jī)、:LoginSservice。
3 只顯示對象名,不顯示類名。例如:華為手機(jī):、loginServiceObject:。
生命線(LifeLine)
時(shí)序圖中每個(gè)對象和底部中心都有一條垂直的虛線,這就是對象的生命線(對象的時(shí)間線)。以一條垂直的虛線表。
控制焦點(diǎn)(Activation)
控制焦點(diǎn)代表時(shí)序圖中在對象時(shí)間線上某段時(shí)期執(zhí)行的操作。以一個(gè)很窄的矩形表示。
消息(Message)
表現(xiàn)代表對象之間發(fā)送的信息。消息分為三種類型。
同步消息(Synchronous Message)
消息的發(fā)送者把控制傳遞給消息的接收者,然后停止活動(dòng),等待消息的接收者放棄或者返回控制。用來表示同步的意義。以一條實(shí)線+實(shí)心箭頭表示。
異步消息(Asynchronous Message)
消息發(fā)送者通過消息把信號傳遞給消息的接收者,然后繼續(xù)自己的活動(dòng),不等待接受者返回消息或者控制。異步消息的接收者和發(fā)送者是并發(fā)工作的。以一條實(shí)線+大于號表示。
返回消息(Return Message)
返回消息表示從過程調(diào)用返回。以小于號+虛線表示。
自關(guān)聯(lián)消息
表示方法的自身調(diào)用或者一個(gè)對象內(nèi)的一個(gè)方法調(diào)用另外一個(gè)方法。以一個(gè)半閉合的長方形+下方實(shí)心剪頭表示。
認(rèn)識時(shí)序圖六種元素
我們來使用Visio2016來畫一個(gè)用戶打開微信掃描二維碼支付流程時(shí)序圖,通過這個(gè)時(shí)序圖來認(rèn)識剛剛介紹的6種時(shí)序圖元素。
時(shí)序圖解釋:
1,用戶輸入手機(jī)密碼
2,打開手機(jī)
3,打開微信掃一掃
4,返回微信掃一掃界面
5.1 掃描商家收款碼
5.2 商家生成收款二維碼
5.3 返回收款二維碼
5.4 識別商家收款碼
6,提示用戶輸入微信支付密碼
7.1 輸入微信支付密碼
7.2 微信驗(yàn)證用戶輸入密碼正確
7.3 向商家匯款
7.4 匯款成功
8,提示用戶支付成功
組合片段
組合片段用來解決交互執(zhí)行的條件和方式,它允許在序列圖中直接表示邏輯組件,用于通過指定條件或子進(jìn)程的應(yīng)用區(qū)域,為任何生命線的任何部分定義特殊條件和子進(jìn)程。組合片段共有13種,名稱及含義如下:
常用組合片段舉例
抉擇(Alt)
抉擇在任何場合下只發(fā)生一個(gè)序列。 可以在每個(gè)片段中設(shè)置一個(gè)臨界來指示該片段可以運(yùn)行的條件。else 的臨界指示其他任何臨界都不為 True 時(shí)應(yīng)運(yùn)行的片段。如果所有臨界都為 False 并且沒有 else,則不執(zhí)行任何片段。Alt片段組合可以理解為if..else if...else條件語句。
我們還拿微信支付的時(shí)序圖舉例,如果7.3向商家匯款的成功或失敗流程需要在時(shí)序圖中體現(xiàn)出來,可以這么使用Alt片段組合。
選項(xiàng)(Opt)
包含一個(gè)可能發(fā)生或不發(fā)生的序列。Opt相當(dāng)于if..語句。
循環(huán)(Loop)
片段重復(fù)一定次數(shù),可以在臨界中指示片段重復(fù)的條件。Loop相當(dāng)于for語句。
并行(Par)
并行處理,片段中的事件可以并行交錯(cuò)。Par相當(dāng)于多線程。
時(shí)序圖的繪制工具
畫時(shí)序圖的工具有很多,但是個(gè)人只用過微軟visio工具,感覺很好用,可以滿足需要。
時(shí)序圖的繪制步驟
時(shí)序圖的繪制步驟可以總結(jié)為:
1,劃清邊界,識別交互語境
所謂劃清邊界是是指要確定好繪制時(shí)序圖的范圍。在微信支付例子中省略列商家打開微信、輸入收款金額等交互消息,這些不是我們需要體現(xiàn)的,我們主要體現(xiàn)的是用戶的掃碼支付流程。
所謂識別交互語境就是要知道自己繪制時(shí)序圖的前提和背景。在微信支付的例子中用戶登錄了微信、開通了支付功能是前提,背景是用戶需要掃描付款買東西。
2,梳理時(shí)序圖中的角色和對象都有哪些
微信支付的例子中角色只有一個(gè),即用戶。對象有華為手機(jī):手機(jī)、安卓版微信:微信、:商家。
3,對象之間有哪些交互消息
對象之間交互的消息詳見以上時(shí)序圖。
時(shí)序圖的繪制技巧
時(shí)序圖的繪制技巧:
1,從初始消息開始畫,依次畫出隨后消息,并給每個(gè)消息分配序號,方便理解。
2,角色和對象用名詞,消息用動(dòng)詞。
3,角色放在時(shí)序圖的開始位置,對象重要程度或使用頻率從左到右排列。這就要根據(jù)時(shí)間的流程考慮了,是一個(gè)比較主觀的事情。
4,控制焦點(diǎn)兩端要以消息元素封頂,控制焦點(diǎn)不要超過消息元素。
正確示范
錯(cuò)誤示范
最后的技巧就是多聯(lián)系繪制時(shí)序圖,熟能生巧,自然而然就會(huì)畫了。
練習(xí)事例
用戶登錄系統(tǒng)時(shí)序圖
參考資料
https://baike.baidu.com/item/%E6%97%B6%E5%BA%8F%E5%9B%BE/3659178?fr=aladdin
http://baijiahao.baidu.com/s?id=1561926824533534&wfr=spider&for=pc