[UML]UML系列——時序圖(順序圖)sequence diagram


系列文章

[UML]UML系列——用例圖Use Case

[UML]UML系列——用例圖中的各種關系(include、extend)

[UML]UML系列——類圖Class

[UML]UML系列——類圖class的關聯關系(聚合、組合)

[UML]UML系列——類圖class的依賴關系

[UML]UML系列——類圖class的泛化關系

[UML]UML系列——類圖class的實現關系Realization

[UML]UML系列——包圖Package

[UML]UML系列——活動圖activity  diagram

引言

用例圖、類圖、活動圖、時序圖之間是什么關系?

時序圖有什么作用?

      先來模擬一下三國演義的赤壁之戰的時序圖,先知道它到底長什么樣子,再深入介紹:

 小伙伴驚呆了,這樣畫戰略圖,一目了然,原來著名的戰役是這么回事。這樣看三國演義再也不會睡着了......

再看看各個大人物的主要操作:

代碼模擬各任務操作:

 1 public class 關羽
 2 {
 3     Public void  防守荊州();
 4 }
 5 public class 張飛
 6 {
 7    public void  防守荊州前線();
 8 }
 9 public class 孫權
10 {
11    public void  領兵相助();
12 }
13 publc class 劉備
14 {
15    public void 應戰();
16 }
17 publc class  孔明
18 {
19   public void   擬定策略();
20   public void  聯合孫權();
21   private void 借東風火攻();
22 }

     (以上為偽代碼,只為說明問題,縮短文章長度)。

分析一:用例圖、活動圖、時序圖之間的關系

分析二:類圖與時序圖之間的關系

 

類圖描述系統的靜態結構,時序圖描述系統的動態行為。

若出現了一個新的消息(不是類中的操作),則需要為類添加一個新的操作。

為類c添加k操作。如果這里不容易理解,可以參考上面的赤壁大戰的時序圖,你就知道該新加的操作到底是類B的還是C的。

時序圖的作用

用對象間的交互來描述用例。(注意是對象間的)

尋找類的操作。

時序圖的概念

時序圖描述了對象之間傳遞消息的時間順序,它用來表示用例的行為順序。

 時序圖的組成

 對象

對象是類的實例,對象是通過類來創建的,我們可以把類看作是創建對象的模版。

對象的符號

 時序圖中的每個大峽谷顯示單獨的列里。

 對象的左右排列位置

對象的左右順序並不重要,但是為了畫圖畫的清晰整潔起見,通常應遵循一下兩個原則:

(1)把交互頻繁的對象盡可能地靠攏。

(2)把初始化整個交互活動的對象(有時是一個參與者)放置在最左邊。

生命線lifeline

表示對象的生存時間。生命線從對象創建開始到對象銷毀時終止。

對象在生命線上的兩種狀態:休眠狀態、激活狀態。

 消息

消息的概念

對象之間的交互是通過相互發消息來實現的。一個對象可以請求(要求)另一個對象做某件事件。

消息從源對象指向目標對象。消息一旦發送便將控制從源對象轉移到目標對象。

 時序圖中,消息的閱讀順序是嚴格自上而下的。

 消息的類型與符號

 


實例:同步異步

你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。

你叫我去吃飯,然后自己去吃飯,我得到消息后可能立即走,也可能等到下班才去吃飯。

所以,要我請你吃飯就用同步的方法,要請我吃飯就用異步的方法,這樣你可以省錢。^_^!

(1)簡單消息

簡單消息是沒有區分同步和異步的消息。

簡單消息用從一對下崗的生命線指向另一個對象的生命線的直線箭頭來表示,箭頭上面標出消息名。

(2)同步消息

消息的發送者把進程控制傳遞給消息的接收者,然后暫停活動,等待消息接收者的回應消息。

你叫我去吃飯,我聽到了就和你去吃飯;如果沒有聽到,你就不停的叫,直到我告訴你聽到了,才一起去吃飯。

(3)異步消息

消息的發送者將消息發送給消息的接受者后,不用等待回應的消息,即可開始另一個活動。

你叫我去吃飯,然后自己去吃飯,我得到消息后可能立即走,也可能等到下班才去吃飯。

激活

激活的概念

當一個對象沒有被激活期時,該對象處於休眠狀態,什么事都不做,但它仍然存在,等待新的消息來激活它。

當一條消息被傳遞給對象的時候,它會觸發該對象的某個行為,這就是說該對象被激活了。

當一個對象處於激活期時,表明該對象正處於執行某個動作。

激活的符號

激活用一個細長的矩陣框(在生命線上)表示。

矩形框的高度表示對象執行一個操作所經歷的時間段,矩形的頂部表示動作的開始,底部表示動作的結束。

對象接收消息后可以由自己的某個操作來完成,也可以通過其他對象的操作來完成。

時序圖的Rose建模

一、新建一個時序圖

方法1:

方法2:右擊某個用例,如下圖所示

這種便於將用例圖與時序圖銜接起來

二、重命名並雙擊該時序圖

三、添加對象

方法1:利用已經存在(創建)的類

a.從瀏覽器中將類(事先已創建)拖到時序圖中

b. 雙擊該對象以設置對象的名稱

方法2:新建對象,然后給該對象指定一個類

a.通過工具欄的對象按紐在時序圖中添加一個對象

b.雙擊對象,給該對象指定一個類或新建一個類

 

四、添加消息

1、添加簡單消息

a.使用此按紐在兩個對象之間拖動

 

b.雙擊消息,在彈出的窗口中設置消息的名稱

2、添加同步消息
方法:雙擊簡單消息,在彈出的對話框選擇“detail”選項
卡,選中”procedure a call”

3、添加異步消息
方法:雙擊簡單消息,在彈出的對話框選擇“detail”選項
卡,選中”Asynchronous”

4、刪除對象
方法1:在”edit”菜單中選擇“Delete from Model”
方法2:ctrl+D

5、時序圖中的常用設置
以嵌套的形式顯示消息的序號
取消或隱藏消息的編號
顯示或隱藏激活條

(1)以嵌套的形式顯示消息的序號

選擇菜單【 Tools->Options 】,彈出以下對話框,選擇 Diagram選項卡,選中Hierarchical Message

(2)取消或隱藏消息的編號

選擇菜單【 Tools->Options 】,彈出以下對話框,選擇 Diagram選項卡,選中或取消Sequence numbering

(3)顯示或隱藏激活條

選擇菜單【 Tools->Options 】,彈出以下對話框,選擇 Diagram選項卡,選中或取消Focus of control

總結

時序圖到此結束,如果有需要補充的可以留言,lz定補上。

時序圖還是聽復雜的,遇到問題得好好分析......

矩形框的高度表示對象執行一個操作所經歷的時間段,矩形的頂部表示動作的開始,底部表示動作的結束。

對象接收消息后可以由自己的某個操作來完成,也可以通過其他對象的操作來完成。

比如下面的三張圖表達的意思就不同了:

如果能把這三個圖的區別搞明白了,時序圖也掌握的差不多......Thinking.....

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM