1. 程式人生 > >[UML]UML系列——時序圖(順序圖)sequence diagram

[UML]UML系列——時序圖(順序圖)sequence 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.....

  • 部落格地址:http://www.cnblogs.com/wolf-sun/ 
    部落格版權:如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起討論,共同進步! 再次感謝您耐心的讀完本篇文章。

參考文獻: