定義
合作圖型和循序圖型的使用上,有部分是重複的,都是用來呈現物件在時間上面的互動。
但是和循序圖型不同,合作圖型強調的是以某個物件為出發點,它與其它物件達成一件任務的過程。
循序圖則是以任務為出發點,在達成任務的時間中所有會使用到的物件。
下圖為之前開飲機冷水加熱為熱水這個任務的循序圖。
那麼下圖就是換個角度出發的合作圖型,可以在圖型中看到所有的出發點都來自主程式,而要達成任務所需要的物件則分布在四周。
接下來進一步解釋合作圖型中,每個元素與其用途。
元素
跟循序圖型相同,合作圖型的組成元素也非常類似,但相較之下較為單純
- 物件節點(Object Node)
- 連結(Link)
- 訊息(Message)
物件節點
*********************************************************
public
class
TestHeater {
public
static
void
main(String args[]) {
CoolWaterContainer c =
new
CoolWaterContainer(
50
);
HotWaterContainer h =
new
HotWaterContainer(
2
);
int
water = c.useWater(
1
);
h.addWater(water);
}
}
*********************************************************
同樣,在要畫出合作圖型之前,必須把任務中的物件先找出來。
上面的main function中就是開飲機把冷水倒到熱水的過程。
因此,我們可以確認物件有主程式、冷水容器、熱水容器、加熱器。
連結
在這邊訊息的格式其實和循序圖型的語法相同
於是就會得到下面的合作圖型
再詳細一點的圖型如下
同樣的,物件使用虛線箭頭來表示它方法的傳回值。
另外,如果一件任務是物件內的方法互動,在合作圖型裡面稱為內部訊息,物件內方法互動的例子如下。
開飲機有重新加熱的功能,在這個功能啟動時,開飲機中的開水狀態是無法使用的。
用下列程式碼來表示。
那麼合作圖型就可以這樣畫。
這邊就可以使用物件節點的屬性區來表示狀態的變化。
解構物件
通常解構物件這個任務會用在網路連線的任務結束時。
像是Socket的開啟,作業,與最後的結束。
迴圈
同樣合作圖型也會有迴圈的表示。
於是合作圖型就會是下圖。
可以看到,迴圈條件可以使用一個{*[條件]}來表示,而這個條件要連到迴圈有呼叫到的敘述,而由敘述的編號,也可以讓人知道敘述在迴圈內次序。
多執行緒
在開飲機的例子中,多執行緒的例子可以運用在恆溫這個功能上。
恆溫的兩個維持條件
1. 水溫持續降低(DropTemperature)
2. 水降溫到80度後加熱到100度(ReBrew)
因此合作圖型是會下圖。
同樣這兩個執行緒會用粗框和匿名物件來表示。
而原始碼會是這樣。
留言