一、 什么是時序圖?
時序圖(Sequence Diagram),亦稱為序列圖、循序圖或順序圖,是一種UML交互圖。它通過描述對象之間發送消息的時間順序顯示多個對象之間的動態協作。
時序圖是一個二維圖,橫軸表示對象,縱軸表示時間,消息在各對象之間橫向傳遞,依照時間順序縱向排列。
二、 時序圖的作用是什么?
1、展示對象之間交互的順序。將交互行為建模為消息傳遞,通過描述消息是如何在對象間發送和接收的來動態展示對象之間的交互;
2、相對於其他UML圖,時序圖更強調交互的時間順序;
3、可以直觀的描述並發進程。
三、時序圖表示
參與交互的對象在時序圖頂端水平排列, 每個對象的底端繪制了一條垂直虛線, 對象A像對象B發送消息, 用一條帶箭頭的實線表示, 該實線起始於對象A底部的虛線, 終止於對象B底部的虛線; 實線箭頭水平放置, 越靠近頂端越早被發送。
四、 組成元素有哪些?
1. 角色(Actor)
系統角色,可以是人、機器、其他系統、子系統;
2. 對象(Object)
(1)對象的三種命名方式
- 第一種方式包括對象名和類名,例如:直播課時:課時,在時序圖中,用“對象:類”表示;
- 第二種方式只顯示類名,即表示它是一個匿名對象,例如: :課程;在時序圖中,用“:類”表示;
- 第三種方式只顯示對象名不顯示類名,例如:講師;在時序圖中,用“對象”表示。
(2)命名方式的選擇
三種命名方式均可,哪種最容易讓閱讀該時序圖的人理解,就選擇哪種。
(3)對象的排列順序
對象的左右順序並不重要,但是為了作圖清晰整潔,通常應遵循以下兩個原則:把交互頻繁的對象盡可能的靠攏;2.把初始化整個交互活動的對象放置在最左端。
3. 生命線(Lifeline)
在時序圖中表示為從對象圖標向下延伸的一條虛線,表示對象存在的時間。
4. 控制焦點(Focus of Control)
又稱為激活期,表示時間段的符號,在這個時間段內對象將執行相應的操作。它可以被理解成C語言語義中一對花括號{ }中的內容;用小矩形表示。
5. 消息(Message)
消息一般分為同步消息(Synchronous Message),異步消息(Asynchronous Message)和返回消息(Return Message)。
-
同步消息:消息的發送者把控制傳遞給消息的接收者,然后停止活動,等待消息的接收者放棄或者返回控制。用來表示同步的意義;
-
異步消息:消息發送者通過消息把信號傳遞給消息的接收者,然后繼續自己的活動,不等待接受者返回消息或者控制。異步消息的接收者和發送者是並發工作的。
-
返回消息:表示從過程調用返回。
消息的功能
消息是定義交互和協作中交換信息的類,用於對實體間的通信內容建模,消息允許在實體間傳遞信息 (傳遞參數), 允許實體請求其它服務, 對象之間通過發送和接收消息進行通信。消息可以觸發操作, 喚起信號, 或使目標對象創建或銷毀。
消息的功能:
1、自調用
2、創建對象
3、同步調用其他對象
4、異步調用其他對象
5、返回
6、銷毀對象
6. 自關聯消息
表示方法的自身調用或者一個對象內的一個方法調用另外一個方法。
7. 組合片段
組合片段用來解決交互執行的條件和方式,它允許在序列圖中直接表示邏輯組件,用於通過指定條件或子進程的應用區域,為任何生命線的任何部分定義特殊條件和子進程。組合片段共有13種,名稱及含義如下:
下表列出了常用的組合片段:
片段類型 |
名稱 |
說明 |
Opt |
選項 |
包含一個可能發生或可能不發生的序列。 可以在臨界中指定序列發生的條件。 |
Alt |
抉擇 |
包含一個片段列表,這些片段包含備選消息序列。 在任何場合下只發生一個序列。 可以在每個片段中設置一個臨界來指示該片段可以運行的條件。 else 的臨界指示其他任何臨界都不為 True 時應運行的片段。 如果所有臨界都為 False 並且沒有 else,則不執行任何片段。 |
Loop |
循環 |
片段重復一定次數。 可以在臨界中指示片段重復的條件。 Loop 組合片段具有“Min”和“Max”屬性,它們指示片段可以重復的最小和最大次數。 默認值是無限制。 |
Break |
中斷 |
如果執行此片段,則放棄序列的其余部分。 可以使用臨界來指示發生中斷的條件。 |
Par |
並行 |
並行處理。 片段中的事件可以交錯。 |
Critical |
關鍵 |
用在 Par 或 Seq 片段中。 指示此片段中的消息不得與其他消息交錯。 |
Seq |
弱順序 |
有兩個或更多操作數片段。 涉及同一生命線的消息必須以片段的順序發生。 如果消息涉及的生命線不同,來自不同片段的消息可能會並行交錯。 |
Strict |
強順序 |
有兩個或更多操作數片段。 這些片段必須按給定順序發生。 |
注:
Ø Alternative fragment(denoted “alt”)與 if…then…else對應
Ø Option fragment (denoted “opt”) 與 Switch對應
Ø Parallel fragment (denoted “par”) 表示同時發生
Ø Loop fragment(denoted “loop”) 與 for 或者 Foreach對應
有關如何解釋序列的片段
默認情況下,序列圖表明可能發生的一系列消息。 在運行的系統中,可能會出現您未選擇顯示在關系圖上的其他消息。
以下片段類型可用於更改此釋義:
片段類型 |
名稱 |
說明 |
Consider |
考慮 |
指定此片段描述的消息列表。 其他消息可發生在運行的系統中,但對此描述來說意義不大。 在“Messages”屬性中鍵入該列表。 |
Ignore |
忽略 |
此片段未描述的消息列表。 這些消息可發生在運行的系統中,但對此描述來說意義不大。 在“Messages”屬性中鍵入該列表。 |
Assert |
斷言 |
操作數片段指定唯一有效的序列。 通常用在 Consider 或 Ignore 片段中。 |
Neg |
否定 |
此片段中顯示的序列不得發生。 通常用在 Consider 或 Ignore 片段中。 |
常用的組合片段有:
抉擇(Alt)
抉擇用來指明在兩個或更多的消息序列之間的互斥的選擇,相當於經典的if..else..。
抉擇在任何場合下只發生一個序列。 可以在每個片段中設置一個臨界來指示該片段可以運行的條件。else 的臨界指示其他任何臨界都不為 True 時應運行的片段。如果所有臨界都為 False 並且沒有 else,則不執行任何片段。
剩下的幾種后續有時間再補全。