UML圖詳解(七)互動圖(時序圖與協作圖)
一、概念
- 互動圖描述物件之間的動態合作關係以及合作過程中的行為次序。
- 互動圖常常用來描述一個用例的行為,顯示該用例中所涉及的物件以及這些物件之間的訊息傳遞情況,即一個用例的實現過程。
互動圖有順序圖和協作圖兩種形式。
- 時序圖中描述物件按照時間順序的訊息交換。
- 協作圖著重描述系統成分如何協同工作。
時序圖和協作圖從不同角度表達了系統中的互動和系統行為,它們之間可以相互轉化。
- 時序圖(Sequence Diagram)也稱為順序圖。
- 通訊圖(Communication Diagram)也稱為協作圖。
二、時序圖
2.1 概念
- 時序圖是以時間為序的表示方法,主要用來描述完成某個行為的物件類和這些物件類之間所傳遞的訊息的時間順序。
- 時序圖是強調訊息時間順序的互動圖。
- 時序圖描述了物件之間傳送訊息的時間順序,用來表示用例中的行為順序。
順序圖(Sequence Diagram)=生命線(Lifeline)+訊息(Message)
時序圖將互動關係表示為一個二維圖。其中,縱軸是時間軸,時間沿豎線向下延伸。橫軸代表了在協作中各獨立的物件。
時序圖包含了4個元素:物件、生命線、訊息、啟用
順序圖的視覺化圖符:
UML非同步訊息:建模軟體使用實線箭頭表示。
2.2 生命線
每個物件及參與者都有一條垂直的生命線(Lifeline),表示了在互動過程中的生命期限。
表示方式:用矩形框和虛線表示生命線,矩形框中新增生命線的名稱,虛線表示生命長度。
生命線名稱語法:生命線物件名[選擇器]:類名ref decomposition (藍色表示可選選項)
選擇器:同一個類的物件可以有不同的狀態值,可以再此中標明。
ref:是引用(Reference)的英文縮寫
decomposition:指明在另一個更詳細的順序圖中展示了當前互動的參與者如何處理它所接收到的資訊的細節
2.3 互動條
活動條(Activation Bar)也稱為執行發生(Execution Occurrence),用來表示物件的某個行為的執行狀態。
表示方式:虛線上的小矩形條。
2.4 訊息
訊息簡介
物件的行為也稱為訊息(Message),通常當一個物件呼叫另一個物件中的行為時,即完成了一次訊息傳遞。
表示方式
在生命線間的帶有實心箭頭表示訊息
訊息命名
訊號或訊息名(引數:引數型別):返回值
簡單訊息、同步訊息、非同步訊息
訊息分為簡單訊息(Simple Message)、同步訊息(Synchronous Message)和非同步訊息(Asynchronous Message)
- 簡單訊息:指標是控制如何從一個物件發給另一個物件,並不包含控制資訊。
- 同步訊息:意味著阻塞和等待
- 非同步訊息:意味著非等待
表示方式如上《順序圖的視覺化圖符》圖。
物件建立訊息
參與互動的物件不必再整個順序圖互動的完整週期中一直存在,可以根據需要,通過傳送訊息來建立和銷燬他們。
表示方式有兩種:
- 在訊息的上方新增構造型《create》來表示物件在互動過程中被建立。
- 訊息的箭頭直接指向被建立的物件生命線的頭部,這樣就不需要構造型《create》來表達了
物件的銷燬
將構造型《destroy》放在訊息的上方來表達物件銷燬訊息,同時在物件的生命線的結束部分畫一個“×”來表示物件被銷燬
無觸發物件和無接收物件的訊息
無觸發物件訊息(Found Message):用活動條開始斷點上的實心球箭頭來表示。(用在開始)
無接收物件訊息(lost message):用箭頭加實心球表示。(用在結束)
控制資訊
1、條件控制資訊
當表示式的條件為真的時候訊息才會被髮送
語法:[表示式]訊息標籤
2、重複(迭代)控制資訊
訊息多次傳送給接收物件,迭代條件是表示式,當表示式的判定值為真結束
語法:*[表示式]訊息標籤
訊息的返回值
表示方式:用虛線加開箭頭的形式表示
2.5 互動框
UML2.0添加了互動框(Interaction Frame).
互動框指途中的一塊區域(Region)或片段(Fragment),包含一個操作符(或稱為標籤),幷包含一個警戒.
型別 | 引數 | 含義 |
---|---|---|
ref | 無 | 表示互動被定義在另一個圖中。可將一個規模較大的圖劃分為若干個規模較小的圖,方便圖的管理和複用。 |
assert | 無 | 表示發生在互動框內的互動式唯一有效的執行路徑,有助於指明何時互動的每一步必須被成功執行,通常與狀態變數一起使用來增強系統的某個狀態。 |
loop | min times,max times,[guard_condition] | 迴圈片段,當條件為真的時候執行迴圈。也可以寫成loop(n)來表示迴圈n次,與java或者C#等中的for迴圈比較相似。 |
break | 無 | 如果互動中包含break,那麼任何封閉在互動中的行為必須被推出,特別是loop片段,這與java中的break語句比較相似。 |
alt | [guard_condition1]… [guard_condition2]… [else] | 選擇片段,在境界中表達互斥的條件邏輯,與if…else…語句相似。 |
neg | 無 | 展示了一個無效的互動。 |
opt | [guard_condition] | 可選片段,當警戒值為真的時候執行。 |
par | 無 | 並行片段,表達並行執行。 |
region | 無 | 區域,表示區域內僅能執行一個執行緒。 |
注意:下面的圖判斷都放在了居中位置(因為軟體使用不會左對齊,明白就好,以後修正。)
alt
上圖理解:
- 訊息getPrice被髮送給SaleManagement,然後根據quantity的值進行選擇判斷
- 如果quantity的值小於MiniAmount,那麼SaleManagement將向Retail傳送訊息getPrice
- 否則,SaleManagement將向WholeSale傳送訊息getPrice
loop
par
可以理解為saveUserData()
和checkQualification()
將並行執行。
2.6時序圖建模技術
- 識別互動的語境。
- 通過識別物件在互動中扮演的角色,設定互動的場景。
- 為每個物件設定生命線。
- 從引發某個訊息的資訊開始,在生命線之間畫出從頂到底依次展開的訊息,顯示每個訊息的特性(如引數)。
- 如果需要視覺化訊息的巢狀或實際計算髮生時的時間點,可以用啟用修飾每個物件的生命期。
- 如果需要更形式化的說明某控制流,可以為每個訊息附上前置和後置條件。
2.7 注意事項
物件不一定非得是類,還可以是參與者。
三、協作圖
3.1 概念
協作圖與時序圖一樣也是用來描述物件與物件之間訊息連線關係的,側重於說明哪些物件之間有訊息傳遞。
協助圖 = 互動的參與者 + 通訊鏈 + 訊息
通訊圖描述參與一個互動的物件的連結,它強調發送和接收物件之間的連結。
3.2 互動的參與者
表示方式:用物件符號表示,在矩形框中放置互動的參與者,顯示互動的參與者的名稱和它所屬的類
語法:參與者名:類名
注意:雖然整個系統中可能有其他的物件,但只有涉及協作的物件才會被表示出來。
協作圖中可能出現的4類物件:
- 存在於整個互動作用中的物件
- 在互動作用中建立的物件
- 在互動作用中銷燬的物件
- 在加護作用中建立並銷燬的物件
3.3 連結
表示方式:用直線表示。
- 一般情況下,一個連結就是一個關聯例項。
- 訊息可以通過連結進行流動。
3.4 訊息
表示方式:依附於連結上的來由標記箭頭和帶順序號的訊息表示式表示。
- 箭頭表示訊息的方向。
控制訊息
表示方式:採用中括號表示。
當控制條件為真的時候訊息才會被髮送。
巢狀訊息和自訊息
當一個訊息導致了另一個訊息被髮送的時候(編號區分),第二個訊息被稱為巢狀在第一個訊息裡。
巢狀可以剁成巢狀。
迴圈
與時序圖中的迴圈類同。
表示方式:用“*”星號表示。
併發訊息
顧名思義,就是幾個訊息被同事傳送,編號是前半部分可以一樣,後面採用字母表示。
小細節
編號與後半部分用冒號隔開。