定義
如果說之前提到的物件圖型是描述一個時間點的系統運作的樣子(memory snapshot),那麼循序圖型就是表示系統要做某件事情的那段時間內,運作的樣子(一個連續的過程)。
循序圖的重點是在描述一件事情,以及系統要完成這件事情的一連串動作,也是一種軟體系統運作的動態圖型。
上圖就是一個循序圖型,而有下圖的解析。循序圖會以做的動作(任務)出發,並列出所以參與到的物件/類別。接下來由上到下就是動作與物件彼此間的順序運作關係。下圖可以清楚展示出物件與類別/任務的互動關係。
循序圖組成的元素
有以下元素組成
-物件節點(Object Node)
-生命線(Lifeline)
-活化區塊(Activation Box)
-訊息(Message)
-內部訊息
-解構物件
-迴圈
要建構循序圖,必須要確定要描述的任務為何。
確定任務後,就要列出任務會用到的物件(即為物件節點)。
物件節點
*****************************************************
public
class
TestThermos {
public
static
void
main(String[] args) {
HotWaterContainer h =
new
HotWaterContainer(
2
);
CoolWaterContainer c =
new
CoolWaterContainer(
50
);
ThermosGui g =
new
ThermosGui();
Thermos t =
new
Thermos(h, c, g);
}
}
*******************************************************
上面的程式片段就是在描述一件任務,那件任務就是模擬一個冷熱水開飲機。
一開始先畫出類別和物件的節點,可以很清楚地分出類別和物件的區別。
最前面要是為一個主程式或是匿名物件的話可以用Use case diagram的小人圖來代替。
接著,在這個任務立面加入一個冷水加熱的類別
**********************************************************
**********************************************************
由於brew方法是static method,所以不需要建立物件就可以被呼叫
可以從圖上面看到,生命線是一個縱向的虛線,而中間穿插著活化區塊,而起點則是一個物件或是一個use case的發起點。
活化區塊的長度就是表示起點或是物件的存活時間。
上面的程式片段就是在描述一件任務,那件任務就是模擬一個冷熱水開飲機。
一開始先畫出類別和物件的節點,可以很清楚地分出類別和物件的區別。
最前面要是為一個主程式或是匿名物件的話可以用Use case diagram的小人圖來代替。
接著,在這個任務立面加入一個冷水加熱的類別
**********************************************************
public
class
Heater {
public
static
int
brew(
int
water) {
try
{
Thread.sleep(
100
);
}
catch
(Exception ex) { }
return
water;
}
}
由於brew方法是static method,所以不需要建立物件就可以被呼叫
生命線與活化區塊
活化區塊的長度就是表示起點或是物件的存活時間。
訊息
訊息就是物件之間互動的關係,會從物件的活化區塊出發,然後指到目標物件
解說格式中的意義:
- 條件: 可選擇的宣告,必須滿足條件才會送出訊息,條件使用[ ]來包起來
- 重複(次數) :可選擇的宣告,表示送出訊息的次數
- 順序編號:可選擇的宣告,表示整個任務中的順序
- 傳回值: 呼叫方法所得到的傳回值
- 操作名稱:通常是物件的方法
- 參數:物件方法所需要帶入的參數
此外,在傳回值的表示,也可以用下面兩張圖,實線箭頭表示呼叫方法,虛線箭頭表示方法的傳回值。
內部訊息
內部訊息主要用在物件內方法的彼此呼叫。
這就是一的物件內方法彼此呼叫的例子,表示如下圖。
解構物件
Java不會特別去強調物件的解構,但是像是網路連線或是服務的物件,就會需要特別點出物件使用完後,連線的解構。解構通常使用一個X,在解構方法呼叫後,並不會有返回值。
迴圈
其實在任務的執行中,有些任務需要同一事情多次執行,因此,迴圈的表示便可以達成這個描述的目的。
上圖的isFull(應該是HotWaterContainer呼叫)和isReady (應該是CoolWaterContainer呼叫)次序應該擺錯了。
多執行緒
這邊舉的例子就是開水的降溫與加溫
這邊會使用主動物件(Active Object)來加入圖型中。
這兩個執行緒使用加粗邊框的方塊表示,同時也使用匿名物件的方式表示
對照的code如下。
這兩個主動物件都是由HotWaterContainer這個類別的物件來建立它們。
留言