跳到主要內容

[UML]學習筆記-活動圖型(Activity Diagrams)-11(全系列結束)

定義

活動圖型是用來顯示軟體系統中特定的活動情形,和其他圖型最大的差異,就是它專注在「活動」上面,而不會去理會物件、類別相關的問題。

因此,活動圖型只關心活動的開始、過程、與結束,使用一般流程圖的方式來繪製就可以了。

譬如一個偵測溫度到自動加溫的活動流程。


活動圖型的用途
  • 針對循序圖型中比較複雜的訊息傳遞加以說明
  • 顯示狀態圖裡面較複雜的狀態轉換事件
  • 說明合作圖型裡面的訊息

圖型組成的元素

活動圖型由下列的基本元素組成。
  • 狀態與活動(State and Activity)
  • 轉換(Transition)
  • 分支(Branch)
  • 分歧與結合(Fork and Join)
  • 水道(Swimlane)

狀態與活動

狀態元素其實和狀態圖型中的開始與結束狀態是相同的,而活動則是圓角矩形來表示。
上圖如果轉成程式碼會是下面的樣子

轉換

轉換主要是一個箭號,用來連結活動圖型中的狀態與活動。只有在分支出來的箭頭才會在上面加上說明或是條件。


分支

分支會根據判斷式而導向不同的活動,分支後的轉換就需要加上說明或是條件。

水道

活動圖型中,活動流程可能很單純在一個方法或類別中就完成了,但是也有可能是由不同的角色去一起完成流程。

下圖是一個聊天的程式。
圖中,以Mary發訊息給[Chat Server]的流程來說,就需要使用不同的「水道」來區分不同角色所負責的活動。

水道也可以使用行為者標記來表示角色,這樣可以讓活動圖型更加清楚。像下圖就是是客戶去購買產品的活動流程。裡面的角色就包含了[客戶]、[服務中心]、以及[訂單系統]

分歧與結合

以聊天程式的客戶端來說,其實有同時執行兩個執行緒,一個是sender,用來傳送訊息,一個是receiver,用來接收chat server回傳的訊息,因此可以使用Fork來顯示這種同時進行的活動

在圖中,分岐的表示是使用一條粗黑線來分成兩個執行緒所做的事情。

結合的部分,就是要把分歧的活動再次結合成一個活動的表示方式。

上圖的計算機就是一個結合的典型例子,它裏頭的活動運作的加減乘除活動之後,均會顯示在一個統一的活動(螢幕顯示)上。

程式碼的敘述就會是這樣子。switch case是分支的開始與結束。case結束後,由screen display作為結合的活動點。
************************************************************
private class OperationHanlder implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        char operator = event.getActionCommand().charAt(0);
        String result = "";
        switch (operator) {
            case '+':
                result = calculator.opAdd(screen.getScreen());
                break;
            case '-':
                result = calculator.opSubtract(screen.getScreen());
                break;
            case '*':
                result = calculator.opMultiply(screen.getScreen());
                break;
            case '/':
                result = calculator.opDivide(screen.getScreen());
                break;
            case '=':
                result = calculator.opEquals(screen.getScreen());
                break;
        }
        screen.display(result);
        isReady = true;
    }
}
************************************************************

留言