程式設計師必備畫圖技能之——時序圖
阿新 • • 發佈:2020-07-13
## 什麼是時序圖
時序圖(Sequence Diagram),又名序列圖、循序圖,是一種UML互動圖。它通過描述物件之間傳送訊息的時間順序顯示多個物件之間的動態協作。
## 使用場景
時序圖的使用場景非常廣泛,幾乎各行各業都可以使用。當然,作為一個軟體工作者,我這邊主要列舉和軟體開發有關的場景。
**1. 梳理業務流程**
一般的軟體開發都是為了支撐某個具體的業務。有時候業務的流程會比較複雜,涉及到多種角色,這時就可以使用時序圖來梳理這個業務邏輯。這樣會使業務看起來非常清晰,程式碼寫起來也是水到渠成的事情了。
![](https://img2020.cnblogs.com/blog/1775037/202007/1775037-20200710151555933-518672375.jpg)
**2. 梳理開源軟體**
作為一個合格的程式設計師,閱讀原始碼的能力一定要過關。一般成熟框架的原始碼呼叫深度都比較深,類之間的呼叫關係也比較複雜。我喜歡用時序圖來梳理框架中這些物件之間的關係。比如再看Tomcat啟動流程的過程中,我就時序圖梳理了各個元件之間的關係,看起來層次非常清楚,也便於記憶。
![img](https://img2020.cnblogs.com/blog/1775037/202007/1775037-20200704220716365-1370663428.png)
## 時序圖的角色
我們在畫時序圖時會涉及下面7種元素:
- 角色(Actor)
- 物件(Object)
- 生命線(LifeLine)
- 控制焦點(Activation)
- 訊息(Message)
- 自關聯訊息
- 組合片段。
其中前6種是比較常用和重要的元素,最後的組合片段元素不是很常用,但是比較複雜。我們先介紹前6種元素,再單獨介紹組合片段元素。
**1. 角色(Actor)**
系統角色,可以是人或者其他系統和子系統。以一個小人圖標表示。
**2. 物件(Object)**
物件位於時序圖的頂部,以一個矩形表示。物件的命名方式一般有三種:
- 物件名和類名。例如:華為手機:手機、loginServiceObject:LoginService;
- 只顯示類名,不顯示物件,即為一個匿名類。例如::手機、:LoginSservice。
- 只顯示物件名,不顯示類名。例如:華為手機:、loginServiceObject:。
**3. 生命線(LifeLine)**
時序圖中每個物件和底部中心都有一條垂直的虛線,這就是物件的生命線(物件的時間線)。以一條垂直的虛線表。
**4. 控制焦點(Activation)**
控制焦點代表時序圖中在物件時間線上某段時期執行的操作。以一個很窄的矩形表示。
**5. 訊息(Message)**
表示物件之間傳送的資訊。訊息分為三種類型。
- 同步訊息(Synchronous Message)
訊息的傳送者把控制傳遞給訊息的接收者,然後停止活動,等待訊息的接收者放棄或者返回控制。用來表示同步的意義。以**一條實線和實心箭頭表示**。
- 非同步訊息(Asynchronous Message)
訊息傳送者通過訊息把訊號傳遞給訊息的接收者,然後繼續自己的活動,不等待接受者返回訊息或者控制。非同步訊息的接收者和傳送者是併發工作的。以**一條實線和大於號表示**。
- 返回訊息(Return Message)
返回訊息表示從過程呼叫返回。以**小於號和虛線表示**。
**6. 自關聯訊息**
表示方法的自身呼叫或者一個物件內的一個方法呼叫另外一個方法。以一個半閉合的長方形+下方實心剪頭表示。
下面舉例一個時序圖的列子,看下上面幾種元素具體的使用方式。
![](https://img2020.cnblogs.com/blog/1775037/202007/1775037-20200712162814914-638213115.png)
**7. 組合片段**
組合片段用來解決互動執行的條件和方式,它允許在序列圖中直接表示邏輯元件,用於通過指定條件或子程序的應用區域,為任何生命線的任何部分定義特殊條件和子程序。組合片段共有13種,名稱及含義如下:
| 組合名稱 | 組合含義 |
| -------- | -------- |
|ref|引用其他地方定義的組合片段|
|alt|在一組行為中根據特定的條件選擇某個互動|
|opt|表示一個可選的行為|
|break|提供了和程式語言中的break類擬的機制|
|par|支援互動片段的併發執行|
|seq|強迫互動按照特定的順序執行|
|strict|明確定義了一組互動片段的執行順序|
|neg|用來標誌不應該發生的互動|
|region|標誌在組合片段中先於其他互動片斷髮生的互動|
|ignore|明確定義了互動片段不應該響應的訊息|
|consider|明確標誌了應該被處理的訊息|
|assert|標誌了在互動片段中作為事件唯一的合法繼續者的運算元|
|loop|說明互動片段會被重複執行|
組合片段的功能平時用的不是很多,具體使用時可以參考本文最後關於組合片段的文章,這邊不做深入介紹了。
## 畫圖工具推薦
**[processon](https://processon.com/)**
- ProcessOn是一個線上作圖工具的聚合平臺,它可以線上畫流程圖、思維導圖、UI原型圖、UML、網路拓撲圖、組織結構圖等等,您無需擔心下載和更新的問題,不管Mac還是Windows,一個瀏覽器就可以隨時隨地的發揮創意,規劃工作;
- 您可以把作品分享給團隊成員或好友,無論何時何地大家都可以對作品進行編輯、閱讀和評論;
- ProcessOn不僅僅匯聚著強大的作圖工具,這裡還有著海量的圖形化知識資源我們儘可能的將有價值的知識進行梳理,傳遞到您的眼前。
![](https://img2020.cnblogs.com/blog/1775037/202007/1775037-20200712163810994-2033400356.png)
## 參考
- https://blog.csdn.net/fly_zxy/article/details/80911942(重點參)
- http://baijiahao.baidu.com/s?id=1561926824533534&wfr=spider&for=pc
- [組合片段](https://www.cnblogs.com/whylaughing/p/5794693.html)