基本概念:是UML中一種重要的用於表達系統動態特性的圖
活動圖的作用是描述一系列具體動態過程的執行邏輯,展現活動和活動之間轉移的控制流,並且它采用一種着重邏輯過程的方式來敘述。
在對軟件密集系統建模的時候,有時需要詳細地模擬系統在運作時的業務流程。面對這種需要,我們可以分析對象間發生的活動和觸發條件,選用活動圖對這些動態方面進行建模。
活動圖的主要組成元素包括動作、活動、動作流、分支與合並、分叉與匯合、泳道和對象流等。

活動圖組成元素:動作和活動節點、開始和終止、控制流、判斷節點、合並節點、泳道。

動作和活動節點
動作代表一個原子操作,操作可能是任何合法的行為。
動作可以是並且不限於:創建或刪除對象、發送消息、調用接口,甚至數學運算以及返回表達式的求值結果。
活動節點是一系列動作,主要用於實現動作序列的簡化和動作圖的嵌套。活動節點在圖例上的表達方式和動作相同。、

開始和終止
活動圖中的開始和終止是兩個標記符號,分別標記了業務流程的起始位置和結束位置。
活動圖中必須有且僅有一個開始標記,一般至少有一個結束標記。(存在一些特殊的無窮過程不存在終止標記。)

控制流
控制流是活動圖中用於標示控制路徑的一種符號。它負責當一個動作或活動節點執行完畢后,將執行主體從當前已完畢的節點轉移到過程的下一個動作或動作節點。
控制流從活動圖的開始標記開始運行,經過順序、分支等結構引導着各個動作的連續執行。

判斷節點
判斷節點是活動圖中進行邏輯判斷、並創造分支的一種方法。
判斷節點具有一個進入控制流和至少兩個導出控制流。
判斷節點具有多個導出流,對於每條導出流而言,應當在表示該控制流的箭頭上附加控制條件。

合並節點
合並節點將多個控制流進行合並,並統一導出到同一個離開控制流。
合並節點僅有邏輯意義而沒有時間和數據上的意義:幾個動作都指向同一個合並節點也並不意味着這些動作要在進入之后互相等待或進行同步數據之類的操作。

泳道
泳道是將活動中的具體活動按照負責進行該活動的對象進行分區,一條泳道中的所有活動由同一個對象來執行。
除了以上的對線性流程進行分區以外,使用泳道表示法可以更清晰地表示並發。

工時審批流程
員工填寫工時,項目工時報項目經理審批后再報部門經理審批、非項目工時直接報部門經理審批。

活動圖的高級概念:分叉節點、結合節點、對象流、擴展區域
分叉節點與結合節點
分叉節點是從線性流程進入並發過程的過渡節點,它擁有一個進入控制流和多個離開控制流。分叉節點的所有離開流程是並發關系,即分叉節點使執行過程進入多個動作並發的狀態。
結合節點是將多個並發控制流收束回同一流程的節點標記,功能上與合並節點類似。結合節點的各個進入控制流間具有並發關系,它們在系統中同時運行。

例子:學生選課的活動圖
學生選上課后需要上課、復習、考試、查詢成績,查詢成績后可以申請復核、查詢復核結果、成績如果及格慶祝、未通過補考或重修。


對象流
對象流是UML為填補活動圖與面向對象思想之間的疏離而出現的。如果需要在活動圖中表現對象流,則首先需要繪制出泳道,且對象應該作為泳道的負責對象出現。



擴展區域
擴展區域是表示過程中的某個活動片段的模型。擴展區域可以將一個需要體現在活動圖中的循環過程進行提取(不需要體現在活動圖中的,可以直接使用活動節點來略寫)。

活動圖建模技術
對業務流程建模
選擇一個將要描述的重要過程,過程中盡量涉及數量少但是關鍵的對象或參與者,將無關或關聯很小的對象排除在外,為每一個對象或參與者繪制泳道。
在總體業務流程中提取關鍵的動作或活動節點,並且將他們與對象或參與者相對應;若發現有些動作無法對應,則考慮動作是否在這個流程中起關鍵作用,或者是否遺漏了某些對象或參與者。
規定初始狀態;確定過程可能的結束位置,為活動圖添加開始和結束節點。
從業務流程的開始節點開始,把過程中發生的動作按事件順序排列,依次把這些動作添加到活動圖中。
把局部的過於復雜的動作序列加以總結,繪制成一個活動節點;如果需要,把這個動作序列使用另外的活動圖進行建模。
找出連接這些動作和活動節點的控制流,並且准確找到過程中的分支、分叉、合並與結合節點。
如果業務流程中有一些關鍵對象的值或狀態需要加以描述,使用對象流添加這些對象在某些動作或活動節點前后的狀態描述。
對用例交互建模
選擇概念用例——即從系統對客戶提供的各種服務中確定出一個關鍵業務,這個關鍵業務可能是在多個相同或不同的情況下反復出現,或者是系統需要提供的一個關鍵服務或進行的關鍵操作。
對於當前選擇的用例,通過事件流進行順序敘述,並找出所有的參與者主動動作,把這些動作整理成動作或活動節點。
把參與者和系統划分為兩個泳道,如果有除了主參與者以外的其它參與者,也為它們分別划分泳道。
把活動節點縱向按照事件發生順序、橫向按照參與者角色和系統角色對應填入活動圖中。
繪制活動圖
“活動圖” 比較直觀易懂;與傳統的流程圖十分的相近,只要能夠讀懂活動圖,就不難畫出活動圖
繪制時首先決定是否采用泳道:主要根據活動圖中是否要體現出活動的不同實施者
然后盡量使用分支、分岔和匯合等基本的建模元素來描述活動控制流程
如果需要,加入對象流以及對象的狀態變化,利用一些高級的建模元素(如輔助活動圖、匯合描述、發送信號與接收信號、引腳、擴展區)來表示更多的信息
活動圖的建模關鍵是表示出控制流,其它的建模元素都是圍繞這一宗旨所進行的補充
例子(1)上班活動圖
早上起來,心里斗爭是否去上班。如果決定睡懶覺,就打電話請假,繼續睡覺。如果決定上班,洗漱后出門上班。上班時要決定吃不吃早餐,吃就買早餐在途中食用,不吃就回公司再做打算。

例子(2)汽車租賃

例子(3)客戶下單
用戶下單后,生成送貨清單時讓客戶選擇支付方式。若支付成功后,將收款清單和送貨地址交到供貨商,供貨商修改訂單狀態,如果送貨完成則訂單完成否則返回供貨商。若支付超時、或支付失敗,則結束。



