UML 活動圖表:方針
在 Visual Studio Ultimate 中,您可以繪製活動圖表,以便透過一系列的動作,將商務程序或軟體演算法描述成工作流程。 人員、軟體元件或裝置可以執行這些動作。 如需觀看示範影片,請參閱:使用活動圖表擷取商務工作流程 (英文)。
若要建立 UML 活動圖表,請按一下 [架構] 功能表上的 [新增圖表]。
您可以將活動圖表用於許多用途:
描述使用者與系統之間的商務程序或工作流程。 如需詳細資訊,請參閱模型化使用者要求。
描述在使用案例中執行的步驟。 如需詳細資訊,請參閱UML 使用案例圖表:方針。
描述軟體中的方法、函式或作業。 如需詳細資訊,請參閱模型化軟體系統的架構。
繪製活動圖表有助於您改善程序。 如果現有程序的圖表證實非常複雜,您就可以考慮如何簡化此程序。
如需活動圖表上項目的詳細參考資訊,請參閱 UML 活動圖表:參考。
本主題內容
與其他圖表的關聯性
繪製活動圖表的基本步驟
描述控制流程
描述資料流程
詳細定義動作
並行的流程
與其他圖表的關聯性
如果您要繪製活動圖表來描述商務程序或使用者使用系統的方式,就可以繪製使用案例圖表來顯示相同資訊的不同檢視。 在使用案例圖表中,您可以將動作繪製成使用案例。 提供與對應動作相同的名稱給使用案例。 使用案例檢視的優點在於您可以:
使用「包括」關聯,在單一圖表中顯示較大的動作/使用案例如何由較小的動作/使用案例構成。
將每個動作/使用案例明確連接至其執行所涉及的使用者或外部系統。
在您系統所支援的動作/使用案例或系統的每個主要元件周圍繪製界限。
您也可以繪製活動圖表來描述軟體作業的詳細設計。
在活動圖表中,您可以顯示在動作之間傳遞的資料流程。 請參閱有關描述資料流程的章節。 但是,活動圖表不會描述資料的結構。 您可以針對該目的繪製 UML 類別圖表。 如需詳細資訊,請參閱 UML 類別圖表:方針。
繪製活動圖表的基本步驟
HOW TO:編輯 UML 模型和圖表中會說明建立任何模型圖表的詳細步驟。
若要繪製活動圖表
按一下 [架構] 功能表上的 [新增圖表]。
在 [範本] 底下,按一下 [UML 活動圖表]。
命名圖表。
在 [加入至模型專案] 中,選取方案中的現有模型專案,或 [建立新模型專案]。
若要在活動圖表上繪製項目
將項目從工具箱拖曳至圖表。
首先,請將主要活動放置於圖表上、連接這些活動,然後加入最後觸控,例如初始和最後節點。
注意事項 您無法從 [UML 模型總管],將現有的項目拖曳至圖表。
若要連接項目,請遵循下列步驟:
在 [活動圖表] 工具箱中,按一下 [連接器]。
在圖表上,按一下來源項目。
按一下目標項目。
注意事項 若要多次使用某項工具,請在工具箱中按兩下此工具。
若要將活動移至另一個封裝
在 [UML 模型總管] 中,將活動拖曳至封裝。
-或-
在 [UML 模型總管] 中,以滑鼠右鍵按一下活動,然後按一下 [剪下]。 接著,以滑鼠右鍵按一下封裝,然後按一下 [貼上]。
注意事項 只有當您將第一個項目加入至圖表時,此活動才會出現在 [UML 模型總管] 中。
描述控制流程
活動圖表會將商務程序或軟體演算法描述成一系列的動作。 連接器箭號會顯示控制權如何依序從某個動作傳遞至下一個動作。 一般而言,只有在完成前一個動作之後,才能開始進行下一個動作。
下圖將示範如何使用動作、連接器、分支和迴圈來顯示一連串的動作。 下列章節將會詳細說明每個項目。
活動圖表會使用 [動作] 和 [連接器],將您的系統或應用程式描述成一系列的動作,並且讓控制權依序從某個動作流向下一個動作。
針對使用者、系統或兩者共同執行的每個主要工作建立 [動作] (1)。
注意事項 請嘗試只用少數幾個動作來描述您的程序或演算法。 您可以依照使用呼叫行為動作描述子活動中所述的內容,使用 [呼叫行為動作],在個別的圖表中詳細定義每個動作。
確定每個動作的標題都清楚地指出它通常要達成的目標。
使用 [連接器] (2) 依序連結動作。
每個動作都會在控制流程中的下一個動作開始之前結束。 如果您想要描述重疊的動作,請依照並行的流程一節中所描述的內容使用 [分岔節點]。
雖然圖表會描述動作的順序,不過它無法描述如何執行這些動作,或是控制權如何從某個動作傳遞至下一個動作。 例如,如果您使用圖表來代表商務程序,可能會在某位人員傳送電子郵件訊息給另一位人員時傳遞控制權。 如果您使用圖表來代表軟體設計,可能會依照一般執行流程,將控制權從某個陳述式傳遞至下一個陳述式。
描述決策和迴圈
您可以使用 [決策節點] (3) 來表示某個點,其中決策的結果會指示下一個步驟。 您可以視需要繪製任意數目的流出路徑。
如果您使用活動圖表來定義應用程式的組件,就應該定義成立條件 (4),以便確定應該採用每個路徑的時機。 以滑鼠右鍵按一下連接器、按一下 [屬性],然後在 [屬性] 視窗中,針對 [成立條件] 欄位輸入一個值。
您不一定要定義成立條件。 例如,如果您使用活動圖表來描述商務程序或互動通訊協定,分支就會定義公開給使用者或互動元件的選項範圍。
您可以使用 [合併節點] (5),將兩個或多個在 [決策節點] 分支的替代流程合併在一起。
注意事項 您應該使用 [合併節點],將代替流程合併在一起,而非將這些流程合併成動作。 在此範例中,直接從決策節點連接回 [選擇功能表項目] 並不正確。 這是因為在控制項的執行緒抵達其所有流入連接器之前將不會啟動動作。 因此,您應該只將並行的流程合併成動作。 如需詳細資訊,請參閱並行的流程。
您可以使用分支來描述迴圈,如此範例所示。
注意事項 請嘗試以結構完善的方式巢狀化迴圈,就如同處理程式碼一樣。 如果您正在描述現有的商務程序,這樣做可能會揭露一些改善商務程序的機會。
開始活動
有兩種方式可表示活動的進入點:
初始節點
建立一個 [初始節點] (6) 來表示活動的第一個動作。
當您要描述子活動,或者您不需要明確陳述起始活動的項目時,這個方法最有用。 例如,「訂購餐點」活動很明顯是在客戶肚子餓時開始進行。
接受事件節點
依照並行的流程一節中所描述的內容建立 [接受事件節點],表示回應特定事件 (例如使用者輸入) 之執行緒的開頭。 請勿將流入流程提供給此節點。 省略流入流程是表示每次發生此事件時都會啟動執行緒。
當您描述特定外部事件的回應時,這個方法最有用。
結束活動
使用 [活動的最後節點] (7) 來表示活動的結尾。
當控制項的執行緒抵達 [活動的最後節點] 時,所有活動的並行動作和子活動都會終止。
您可以使用多個 [活動的最後節點] 來減少其他連接器所造成的雜亂。
中斷活動
若要描述如何中斷活動的一般流程 (例如,如果使用者決定要取消此程序),您就可以建立接聽該事件的 [接受事件節點]。 如需詳細資訊,請參閱並行的流程一節。 建立從該節點流向 [活動的最後節點] (7) 的控制流程。
泳道
有時候,將活動的動作排入一些對應至執行動作之不同物件或商務角色的區域會很有用。 這些區域通常會排列在資料行中,而且稱為「泳道」(Swimlane)。
您可以從 [工具箱] 的 [簡單圖案] 區段中使用線條或矩形來繪製泳道或其他區域。
若要為每個泳道加上標籤,請建立註解並將其 [Transparent] 屬性設定為 [True]。
簡單圖案並不會構成 UML 模型的一部分,而且也不會顯示在 [UML 模型總管] 中。
描述資料流程
您可以用下列其中一種方式來描述傳入和傳出活動的資料:
使用 [物件節點]。 這是描述活動之間資訊流程最簡單的方法。 物件節點就像是程式中的變數。 它代表儲存了一個或多個在動作之間傳遞之值的項目。
使用 [輸出連接] 和 [輸入連接]。 這個方法可讓您個別描述來自某個動作的輸出以及前往另一個動作的輸入。 連接就像是程式中的參數。 連接代表物件可用以進入和離開動作的連接埠。
注意事項 如需這一節所使用之項目的概觀,請參閱UML 活動圖表:參考主題的<資料流程>一節。
使用物件節點描述資料流程
大部分的控制流程都帶有資料。 例如,來自 "Customer provides details" 動作的輸出流程會帶有交貨地址的參考。
如果您想要在自己的圖表上描述該項資料,可以將一個連接器取代成一個物件節點和兩個連接器,如下圖所示。
請注意,圓角矩形 (例如分派貨品) 代表進行處理的動作。 方角矩形 (例如交貨地址) 代表從某個動作到另一個動作的物件流程。
為物件節點提供名稱,以便將節點的角色反映成在動作之間流動之物件的管道或緩衝區。
您可以在 [屬性] 視窗中設定物件節點的 [Type]。 此型別可以是基本型別 (例如整數),或是您已經在類別圖表中定義的類別、介面或列舉。 例如,您可以建立 Shipment Address 類別,而此類別具有 Street Address、City 等屬性,以及與另一個名為 Customer 之類別的關聯。 如需詳細資訊,請參閱 UML 類別圖表:方針。
注意事項 |
---|
如果您輸入尚未定義之型別的名稱,就會在 [UML 模型總管] 的 [未指定的型別] 底下加入項目。 如果您隨後在類別圖表中定義具有該名稱的型別,就應該重設物件節點的型別,以便讓它參考新的型別。 |
在物件節點中緩衝處理資料
物件節點可以做為多個物件的緩衝區。 在下圖中,控制流程會顯示使用者可以在 [choose more] 迴圈 (1) 中來回移動許多次,而 Chosen Menu Items 物件節點 (2) 會累計使用者的選擇。 最後,當使用者已經完成其選取項目時,控制權就會傳遞至 Confirm Order 動作 (3),以便接受 Chosen Menu Items 緩衝區的完整選擇清單。
您可以透過設定物件節點的屬性,指定緩衝區中項目的儲存方式:
設定 [Ordering] 屬性:
Unordered:指定隨機或未指定的順序。 (預設值)。
Ordered:根據特定的索引鍵指定順序。
Fifo:指定先進先出的順序。
Lifo:指定後進先出的順序。
若要指定緩衝區可以包含的物件數目上限,請設定 [Upper Bound] 屬性。 預設值為 *。 這表示沒有限制。
使用輸入和輸出連接描述資料流程
您可以使用 [輸出連接] 和 [輸入連接] 來個別描述來自某個動作的輸出以及前往另一個動作的輸入。
若要建立連接,請在 [工具箱] 上按一下 [輸入連接] 或 [輸出連接],然後再按一下動作。 然後,您就可以在動作的周圍移動連接,並且變更它的名稱。 您可以針對任何種類的動作建立輸入和輸出連接,包括 [呼叫行為動作]、[呼叫作業動作]、[傳送訊號動作] 和 [接受事件動作]。
兩個連接之間的連接器代表物件流程,就像是物件節點之間的流程一樣。
為每個連接提供名稱,以便表示它所產生或接受的物件角色,例如參數名稱。
您可以在 [Type] 屬性中設定所傳送之物件的型別。 這個型別必須是您已經在 UML 類別圖表中建立的型別。
在連接之間流動的物件必須以某種方式相容。 這可能是因為輸出連接所產生的物件屬於輸入連接之型別的衍生型別。
或者,您也可以指定物件流程包含了在輸出連接型別與輸入連接型別之間轉換 (Convert) 資料的轉換 (Transformation)。 這類最常見的轉換只是從較大的型別擷取適當的部分而已。 圖中的範例表示存在從 Order Detail 擷取 Shipping Address 的轉換。
詳細定義動作
除了使用動作的名稱來釐清它通常應該達成的結果以外,下面有一些方式,可讓您將更多詳細資料加入至動作:
在 [Body] 屬性中撰寫更詳細的描述。 例如,您可以撰寫程式碼或虛擬程式碼的片段,也可以撰寫達成結果的完整描述。
將動作取代成「呼叫行為代動作」,並且在個別的活動圖表內部描述其詳細的行為。 請參閱使用呼叫行為動作描述子活動。
設定動作的 [Local Postconditions] 和 [Local Preconditions] 屬性,以便更詳細地描述其結果。 如需詳細資訊,請參閱定義後置條件和前置條件。
使用呼叫行為動作描述子活動
您可以使用個別的活動圖表來描述動作的詳細行為。 呼叫行為就是在您的主要活動圖表上由呼叫行為動作所代表的活動圖表。 您也可以使用呼叫行為動作來描述不同活動之間共用的行為,如此就不需要繪製子活動許多次。
在下圖中,圖表 1 會顯示具有呼叫行為動作的活動,而圖表 2 則顯示呈現呼叫行為的子活動圖表。
若要使用呼叫行為動作描述子活動
若要建立子活動的圖表,請在 [方案總管] 中,以滑鼠右鍵按一下您的模型專案、指向 [加入],然後按一下 [新項目]。
在 [加入新項目] 對話方塊的 [範本] 底下,按一下 [活動圖表],然後在 [名稱] 方塊中,輸入您計劃要提供給 [呼叫行為動作] 的名稱。
繪製子活動的詳細工作流程。 這就是呼叫行為。
- 在呼叫的子活動圖表中,[初始節點] 會指出叫用呼叫行為時開始控制的位置。 [活動的最後節點] 會顯示控制權應該傳回給父活動的位置。
將 [呼叫行為動作] 的 [Behavior] 屬性設定為參考呼叫行為圖表。
注意事項 子活動圖表本身必須具有一些項目,否則此圖表將不會提供在 [Behavior] 屬性的下拉式清單中。 此外,三叉戟圖示要等到您設定其 [Behavior] 屬性之後,才會顯示在 [呼叫行為動作] 圖案上。
設定動作的 [Is Synchronous] 屬性來指出您的活動是否要等候呼叫的活動完成。
- 如果您將 [Is Synchronous] 設定為 false,就表示流程可以在呼叫的活動完成之前繼續進行下一個動作。 您不應該根據此動作定義輸出連接或流出資料流程。
描述流入和流出子活動的資料流程
您可以用在軟體中使用參數的相同方式來描述流入和流出子活動的資料。
針對流入或流出動作的每個資料片段,在呼叫行為動作上建立輸入和輸出連接 (1)。 適當地為每個連接命名。
在子活動圖表中,針對呼叫動作上的每個輸入和輸出連接建立 [活動參數節點] (2)。 為每個節點提供與其對應連接相同的名稱。
注意事項 活動參數節點與物件節點很相似。 若要檢查您所查看之節點的型別,請以滑鼠右鍵按一下節點,然後按一下 [屬性]。 節點的型別就會顯示在 [屬性] 視窗的標頭中。
在子活動圖表中,繪製顯示流入或流出每個活動參數節點之物件流程的連接器。
定義後置條件和前置條件
您可以使用 [Local Postconditions] 和 [Local Preconditions] 屬性來詳細指定動作的結果。 這些屬性會描述動作的效果,但不會描述如何達到此效果。
若要設定這些屬性,請以滑鼠右鍵按一下動作,然後按一下 [屬性]。 在 [屬性] 視窗的屬性中,輸入值。
Local Postconditions
後置條件就是將動作視為已完成之前應該滿足的條件。 在 Confirm Order 範例動作中,後置條件可能是:
客戶已經提供處理其信用卡所需之完整且有效的詳細資料。
後置條件可以表示進行動作前後狀態之間的關聯性。 例如:
利率是先前的兩倍。
您可以用更正式的樣式來撰寫後置條件,並參考動作中所處理之資料的特定屬性。 例如:
InvoiceTotal == Sum(OrderItem.MenuItem.Price)
Local Preconditions
前置條件就是準備開始進行動作時應該成立的條件。 例如,Confirm Order 動作可能會具有此前置條件:
客戶至少從功能表中選擇了一個項目。
描述作業的呼叫
通常,動作會描述人員、軟體或電腦之任何組合所執行的工作。 但是,您可以使用「呼叫作業動作」來描述特定軟體方法或函式的呼叫。
設定呼叫作業動作的名稱,以便指出呼叫哪項作業以及針對哪個物件或元件呼叫。
將輸入和輸出連接加入至呼叫作業動作,以便描述參數和傳回值。
您可以設定動作的 [Is Synchronous] 屬性來指出您的活動是否要等候作業完成。
- 如果您將 [Is Synchronous] 設定為 false,就表示流程可以在呼叫的作業完成之前繼續進行下一個動作。 您不應該根據此動作定義輸出連接或流出資料流程。
並行的流程
您可以使用 [分岔節點] 和 [聯結節點] 來描述兩個或多個可以同時執行的活動執行緒。
[分岔節點] (1) 的作用是將控制項的執行緒分成兩個或多個執行緒。 當前一個動作結束時,就可以開始進行位於分岔之輸出端的所有動作。
[聯結節點] (2) 會將並行執行緒合併在一起。 [聯結節點] 後面的動作要等到指向 [聯結節點] 的所有動作完成之後才會開始進行。
描述訊號和事件
您可以將程序中傳送訊號的步驟顯示成活動中的「傳送訊號動作」。 您可以將等候特定訊號或事件然後步驟才能繼續進行的步驟顯示成「接受事件動作」。
例如,您可能會顯示一個傳送訂單的步驟,然後顯示另一個必須收到訂單然後才能處理該訂單的步驟。
傳送訊號
使用傳送訊號動作 (3) 來表示某種類型的訊號或訊息會傳送至其他活動或程序。 使用動作的名稱來表示它所傳送的訊息種類。
控制權會立即傳遞至控制流程中的下一個動作 (如果有的話)。
您無法使用傳送訊號動作來描述程序如何回應任何傳回的資訊。 若要這樣做,請使用個別的接受事件動作。
您可以顯示流向傳送訊號動作的流入資料流程,以便指出哪些資料可以與流出訊息一起傳送。 如需詳細資訊,請參閱描述資料流程。
等候訊號或事件
使用接受事件動作 (4) 來表示這項活動會等候某個外部事件或流入訊息。 使用動作的名稱來表示它所等候的事件類型。
若要顯示您的活動會在流程中的特定時間點等候外部事件或訊息,請在活動中的適當位置,繪製包含流入流程的接受事件動作。
若要顯示您的活動可以隨時回應外部事件或訊息,請繪製不包含任何流入流程的接受事件動作。 發生具名的外部事件時,新的執行緒就會在您的活動中開始進行,從接受事件動作開始。
您無法使用接受事件動作來描述傳回給訊號傳送者的任何值。 請針對該目的使用個別的傳送訊號動作。
您可以顯示來自動作的流出資料流程,以便顯示您的活動如何處理在訊號中收到的資料。 如果您想要顯示多個輸出流程,就應該設定接受事件動作的 [IsUnmarshall] 屬性,表示此動作會將流入訊號剖析成個別的元件。 如需詳細資訊,請參閱描述資料流程。
描述多個資料流程
您可以繪製來自某個動作的多個控制流程或物件流程,表示此動作結束時將出現多個執行緒。 其作用與分岔的作用很相似,不過您可以混合使用控制流程和物件流程。
下列範例會顯示多個流出和流入動作的流程。
當 "Customer provides details" 動作完成時,它會產生兩個物件:"Shipment address" 和 "Credit card details"。這兩個物件會前移,以便由不同的動作處理。
因為某個動作會要求其所有輸入都是可用的,然後才能開始進行動作,所以最後一個動作要等到指向它的所有動作都完成之後才能開始進行。
資料流
您可以使用活動圖表來協助描述管線或一系列的動作,而這些動作會同時執行,並從某個動作連續傳遞資料至另一個動作。
下列範例的目的是每個動作都可以產生物件並繼續運作。 因為沒有任何控制流程,所以每個動作都可以在收到第一個物件時立即開始進行。
請注意,這則範例中的連接器是物件流程,因為它們至少都在活動參數節點、物件節點或輸入或輸出連接上具有一個端點。
1. 此範例具有三個活動參數節點,代表其輸入和輸出。
2. 物件節點、輸入連接和輸出連接可以代表緩衝區。 您可以設定物件節點的 [Upper Bound] 屬性,表示同時可以包含在緩衝區中的物件數目。
3. 您可以使用決策節點來顯示資料流分支,並沿著不同的分支向下傳送不同的物件。 您可以使用註解或節點的標題來說明分支條件。
4. 您可以使用分岔節點來顯示建立兩個或多個物件複本,並傳送它們進行並行處理。
5. 您可以使用聯結節點來顯示兩個處理資料流會合併成單一資料流。
選取範圍和轉換
您可以指定物件流程中的物件已轉換、已選取或兩者都有。 物件流程就是在連接或物件節點之間來回流動的流程。
轉換會描述如何將進入流程的物件轉換成另一個型別。
選取範圍會描述如何只將進入流程的某些物件轉換成接收動作。
此範例將顯示轉換。 圖表 1 中的第一個動作會在輸出連接上產生郵遞區號。 這個動作會連接到第二個動作的輸入連接。 不過,第二個動作預期完整指定的地址。 型別之間的轉換指定於第二個活動中:Address Lookup。 這個活動是從物件流程的 Transformation 屬性參考。 Address Lookup 活動包含一個代表流入郵遞區號的活動參數節點,以及另一個代表流出完整地址的活動參數節點。
您可以用兩種方式來指定轉換或選取範圍:
將註解附加至輸入或輸出連接。
- 若要區別這項描述與一般註解,您可以在註解的開頭加上 <<transformation>> 或 <<selection>>。
在個別的活動圖表中詳細指定轉換或選取範圍。
- 如果您使用這種方法,請一併附加註解,以便讓讀取器確定已經定義轉換。
若要在個別的活動圖表中指定轉換或選取範圍
建立新的活動圖表,其中描述轉換或選取範圍流程。
- 在 [方案總管] 中,以滑鼠右鍵按一下專案、指向 [加入]、按一下 [新項目],然後按一下 [活動圖表]。 針對轉換或選取範圍流程,為圖表提供適當的名稱。 按一下 [加入]。
在新的圖表中:
建立兩個活動參數節點:一個代表輸入流程,一個代表輸出流程。
建立與物件流程互連的動作。 這會顯示轉換或選取範圍的運作方式。
在您想要使用轉換或選取範圍的任何圖表中:
建立物件流程,也就是輸入或輸出連接、物件節點或活動參數節點之間的連接器。
以滑鼠右鍵按一下物件流程,然後按一下 [屬性]。
在 [Transformation] 或 [Selection] 屬性中,選取您指定了轉換或選取範圍流程的圖表。
您也可以針對物件節點以及個別的輸入和輸出連接定義選取範圍。 定義選取範圍活動 (如先前的程序所述),然後設定物件節點或輸入或輸出連接的 [Selection] 屬性。