UML超新手入門(11)活動圖型 by Michael | CodeData
top

UML超新手入門(11)活動圖型

分享:

UML超新手入門(10)狀態圖型 << 前情

「活動圖型、Activity diagrams」用來顯示軟體系統中特定的活動情形,活動圖型與其它圖型有一個最大的差異,就是在顯示活動情形的時候,通常不會考慮與物件或類別相關的問題。所以活動圖型是用來呈現軟體系統中某一些特定的活動,使用一般的流程圖概念來繪製就可以了。下列的活動圖型顯示從偵測溫度到自動加溫的活動流程,在圖型中沒有涉及到任何的物件,只是表現一個活動的過程:

umlandjava_11_01

活動圖型主要有下列的用途:

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

圖型元素

活動圖型由下列的基本元素組成:

  • 狀態與活動(State and Activity)
  • 轉換(Transition)
  • 分支(Branch)
  • 分岐與結合(Fork and Join)
  • 水道(Swimlane)

狀態與活動

活動圖型使用與狀態圖型相同符號的「開始狀態、Start state」和「結束狀態、Stop state」,表示活動圖型的開始和結束;而過程中的每一個活動使用圓角的矩形來表示:

umlandjava_11_02

上列圖形的狀態與活動對應的程式敘述像這樣:

umlandjava_11_03

轉換

轉換指的是活動圖型中使用箭頭的線條來表示活動的流程。一般來說,都不會為活動到活動之間的轉換加上說明或條件,只有在分支的時候才會使用:

umlandjava_11_04

分支

分支表示依據判斷式而進行不同的活動,分支以後的轉換,就必需加上說明或條件:

umlandjava_11_05

水道

活動圖型中所顯示的活動流程,有可能很單純的在一個方法或類別中就完成了,但是也可能會由不同的角色一起完成流程。以下列的應用程式來說:

umlandjava_11_06

從「Mary」發送訊息,到「Chat server」將訊息傳送給所有用戶的流程,是由兩個角色一起完成這個流程。你可以使用水道來區分不同的角色和所負責的活動:

umlandjava_11_07

水道也可以使用行為者標記來表示某一個角色,這樣的表示方法可以讓活動圖型更加清楚:

umlandjava_11_08

分岐與結合

上列討論的「Chat server」應用程式中,在用戶端的部份,它有兩個活動同時在進行,除了使用者可以隨時輸入並發送訊息外,還一個執行緒在背景執行,隨時接受由「Chat server」傳送過來的訊息。

你可以使用「分歧、Fork」來顯示這類同時進行的活動:

umlandjava_11_09

分歧通常用來表示同時進行的活動或是無關前後順序的活動,它也可用來表示「switch」敘述的行為。在下列的圖型中也使用了「結合、Join」標記,把多個活動的流程集合到一個活動:

umlandjava_11_10

上列的範例圖型是計算模擬程式中,負責處理功能按鍵的方法,程式敘述會像這樣:

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;
    }
}
分享:
按讚!加入 CodeData Facebook 粉絲群

相關文章

留言

留言請先。還沒帳號註冊也可以使用FacebookGoogle+登錄留言

熱門論壇文章

熱門技術文章