在循序圖中的「聯合片段」(Combined Fragment)同樣以大方框圍住互動片段,再搭配上特定的「互動操作子」(Interaction Operator),用來對整個圍住的互動片段執行相同的操作。請你看到圖1,UML一共定義了12種互動操作子,在VS2010/UML的循序圖中都有支援。接下來的2回文章中,我們會一一說明這12種互動操作子的概念和特性。

圖1 互動操作子

聯合片段:替代
「替代」(alt,alternative)標示出可挑選的行為,不過特別注意,挑選執行片段時,只能挑選0..1個片段。也就是說,要嘛,都不執行,要嘛,只執行一個互動片段。

在VS2010/UML的操作示範上,我們可以直接用滑鼠右鍵點選第一條同步呼叫,然後挑選並執行選單上頭的「圍住→替代聯合片段」(Surround With→Alt Combined Fragment),就會出現圖2中的替代聯合片段的大方框。

圖2 替代(alt)

請你參照圖2,我們來說明一下聯合片段的主要結構,如下:

圖3 互動操作子
● 互動操作子(Interaction Operator):每一個聯合片段會搭配一個互動操作子,標示在左上角的小五角型內部。所以,你要是想要操作整個聯合片段的話,要點選靠近頂部的區域,這樣才會真的點選到整個聯合片段,否則的話,可能只是點選到某一個互動操作區而已。你要是仔細看,一旦點選了整個聯合片段,其實在頂部區域會出現一個長條內框,如圖3所示。而且,你也可以順便看一下性質表的地方,看看是不是正確選到聯合片段,如圖4所示。為什麼要特別注意這些?因為,如果你只打算刪除某一個互動操作區,但是沒有選對,而是不小心選到了整個聯合片段的話,那就會把整個聯合片段誤刪掉了。

圖4 聯合片段的性質表

● 互動操作區(Interaction Operand):互動操作子底下,就是真正放置互動片段的互動操作區了。既然稱為聯合片段,意謂著會包含多個互動片段,也就是會有多個互動操作區,彼此之間以虛線隔開。同樣地,使用滑鼠右鍵點選某一個互動操作區,可以在出現的選單中,執行插入一個新的或刪除一個現存的互動操作區,如圖5所示。此外,你也可以透過性質表得知是否有正確選中互動操作區,如圖6所示。

圖5 聯合片段的性質表

圖6 互動操作區的性質表

至於,互動操作區性質表中的「警戒條件」(Guard)欄位,可以讓我們填上布林判斷式,評估結果為「真」(True)時,才會執行該互動操作區的內容。對了,UML定義了「else」(否則)做為警戒條件的保留字,當其他互動操作區的警戒條件評估都為「否」(False)時,就會自動執行警戒條件標示為「else」的互動操作區。

大部分的聯合片段結構都如上述,如果有特別的,我們再來補充說明。接下來,我們回頭來看替代片段。一開始我們有提到替代,可以執行0..1個互動片段,因此通常會搭配警戒條件,如圖7所示。在圖7的範例中,我們特別使用了UML的保留字「else」,這樣就可以確保一定會執行一個互動片段。

圖7 一定會執行一個互動操作區

還有一種用法是,刪掉多餘的互動操作區,僅留下一個。這樣會造成,一旦未通過警戒條件,就不會執行互動操作區,圖8所示。

圖8 不一定會執行

對了,你可能已經發現到了,VS2010/UML有一個很貼心的功能。就是當循序圖太大超過螢幕長度,造成我們必須往下拉時,它會自動在頂端出現鐵灰色的半透明矩形,標示著存活線的矩形名稱,如圖9所示。這樣一來,一旦我們需要往下新增更多的訊息時,才不會搞錯了存活線。十分貼心的小服務,會讓我們對VS2010/UML大大加分啦。

圖9 存活線

聯合片段:選擇
不過,如果真要表達不一定執行的互動片段的話,其實使用「選擇」(opt,option)會比使用「替代」(alt)更為適合。沒錯,「選擇」(opt)互動操作子正是可以用來標示不一定要執行的互動片段。

所以,請你看到圖10,我們要將之前圖8的單一互動操作區的替代片段,換成此處的選擇互動,其實更適合。而且,由於選擇片段只能擁有一個互動操作區,所以你要是試著打開選單會發現,VS2010/UML不會讓我們插入新的互動操作區,完全遵守UML的規範,如圖11所示。

圖10 選擇(opt)[相較於圖8]

圖11 無法插入新的互動操作區
聯合片段:並行
現在,我們來看「並行」(par,parallel),顧名思義,就是標示出可以同時間並行執行的互動片段。通常,循序圖的訊息是由上而下依序執行的,所以如果想要表達同時執行的情況的話,就得特別使用「並行」的聯合片段,如圖12所示。

圖12 並行執行全部的互動操作區

由於,並行也可以搭配警戒條件,所以可以表達多選的情況,像是圖13的範例中,當X大於12時,就會同時並行兩個互動操作區。

圖13 並行執行其中數個互動操作區

到目前為止,你可能跟我一樣,開始覺得有點糊塗了,因為替代(alt)、選擇(opt)、並行(par)一旦配合了警戒條件之後,好像都很像。所以,此處我們來簡單歸納一下:

● 替代(alt):單選,像單選題,可以從多個互動操作區中擇一執行。雖然,可以只出現一個互動操作區,但是,盡量別這麼使用它,因為這樣用起來會跟「選擇」(opt)很像。

● 選擇(opt):是非,像是非題,只有一個互動操作區,符合警戒條件就執行,不合就不執行。

● 並行(par):多選,像多選題,同樣可以從多個互動操作區中選擇一個、或選擇多個互動操作區,來並行執行。最好也是要避免僅出現一個互動操作區的情況,因為這樣就又跟單一替代或單一選擇一樣了。

聯合片段:迴圈
此外,「迴圈」(loop)也是非常實用的互動操作子,使用率大概是排行前三名的吧。迴圈的執行次數放置於小括號中,第一個數字是最少執行圈數,然後使用逗號隔開最多執行圈數,如圖14所示。

圖14 迴圈(loop)

迴圈的執行次數,最少是0次,最多為「*」,代表無限多次。如果僅標示最少次數的話,代表最少次數和最多次數兩個數目相同。順道看一下迴圈的性質表,多了兩個放置執行次數的欄位,如圖15所示。

圖15 迴圈聯合片段的性質表

聯合片段:中斷
下一個要介紹的互動操作子是「中斷」(break),用來標示出中斷發生時該執行的互動片段,通常搭配警戒條件出現。一旦,中斷片段內的警戒條件為「真」時,便會開始執行中斷片段內的訊息,執行完畢後,就不再執行其他互動片段了。假若,中斷的警戒條件為「否」時,則省略中斷片段的訊息,直接跳去執行中斷片段外部的其他訊息。

請你看到圖圖16的例子,整張循序圖會先執行訊息1(Message1),接著評估X是否等於0。如果,X等於0,則執行訊息2(Message2),然後中斷其他執行,所以整張循序圖就結束掉了。倘若,X不等於0,那麼中斷片段就不會被執行,所以會接著往下執行訊息3(Message3)。

圖16 中斷(break)

當然,聯合片段內部還可以放置其他的聯合片段,例如我們可以在迴圈內部放置中斷片段,一旦中斷警戒成立時,直接中斷掉迴圈,不再繼續執行。請你看到圖17的例子,每一次迴圈都會評估X是否大於25,一旦X大於25時,便會執行訊息2(Message2),否則就會繼續執行下一個迴圈,直到迴圈數等於100為止。

圖17 X>25時中斷迴圈

聯合片段:否定
「否定」(neg,negative)是個非常特別的互動操作子,它用來標示出不合法的、被否定的互動片段。一般我們繪製的循序圖,都是正確的、合法的、必須遵守執行的,可是此處的否定片段卻完全相反,它提出不合法的片段。

請你看到圖18的範例,它表達了先執行報名訊息,再執行登入訊息,這樣的訊息執行順序是不合法的、不被允許的、必須被否定的,所以我們使用「否定」(neg)互動操作子來標示出被否定的互動片段。

圖18 否定(neg)

聯合片段:關鍵
在執行「關鍵」(critical)片段期間,不可以混雜著執行其他訊息。你可能會質疑為什麼會有混雜執行其他訊息的情況呢?有啊,如果我們並行執行多個互動操作區時,或者有非同步呼叫的狀況時,都可能遇到混雜執行訊息啊。

請你先看到圖19的例子,因為是並行執行,所以很可能先執行了訊息4(Message4)之後,還未開始執行訊息5(Message5),就先開始執行訊息2(Message2)了。也就是說,訊息4和訊息5之間,很可能會被插進來執行別的訊息。

圖19 不保證一定會連續執行

如果,希望訊息4和訊息5執行時不能混雜其他訊息時,這時就可以加上關鍵互動操作子了,正如圖20所示。

圖20 關鍵(critical)

所以說,關鍵片段可以讓我們標示出一個關鍵片段,一旦進入關鍵片段時,就確保不會被其他訊息插斷,將不受干擾地執行完整個關鍵片段。

專欄作者

熱門新聞

Advertisement