引言
在軟體工程與系統設計領域,有效溝通與視覺化系統行為至關重要。這正是統一模型語言(UML)圖表發揮作用之處,提供多種工具來呈現系統動態的不同面向。在這些圖表中,狀態圖與活動圖尤為突出,各自承擔不同的用途,並為系統行為提供獨特的洞察。
在本文中,我們深入探討狀態圖與活動圖的世界,旨在解開它們特徵、使用情境、優點與缺點的迷團。透過理解這兩種UML圖表之間的關鍵差異,您將獲得寶貴的洞察,了解何時應使用哪一種圖表,以在軟體開發與系統建模工作中取得最佳成果。
狀態圖與活動圖的比較
狀態圖與活動圖都是用於軟體工程與系統設計中的UML(統一模型語言)圖表,用以呈現系統行為的不同面向,但它們各自承擔不同的用途,並著重於系統行為的不同方面。以下是狀態圖與活動圖的比較:
- 目的:
- 元素:
- 狀態圖:狀態圖的主要元素包括狀態(代表特定條件或情境)、轉移(描繪系統如何從一個狀態移動到另一個狀態),以及事件(觸發狀態轉移的條件)。
- 活動圖:活動圖由活動(代表任務或動作)、控制流程箭頭(表示活動的順序)、判斷節點(用於條件分支)、合併節點(用於匯流流程),以及泳道(用於將活動分隔至不同參與者或子系統)組成。
- 重點:
- 狀態圖:狀態圖強調物件或系統的不同狀態,以及這些狀態之間轉移發生的條件。它們特別適用於模擬即時系統或具有複雜狀態依賴行為的系統。
- 活動圖:活動圖著重於活動的流程,以及不同任務或動作在流程或系統中如何協調。它們非常適合用於模擬業務流程、工作流程系統以及軟體演算法。
- 應用:
- 狀態圖: 狀態圖經常用於軟體系統、嵌入式系統和硬體控制器的設計中,其中物件或系統可以處於不同狀態,並需要根據事件的發生在這些狀態之間進行轉換。
- 活動圖: 活動圖常被用於業務流程建模、軟體開發和系統設計中,以表示流程或工作流程中所涉及的步驟和活動。
左側下方所示的狀態圖,作為狀態機的視覺化表示,會根據特定事件執行動作。它細緻地展示了系統內的各種狀態以及由事件發生所引發的狀態之間的轉換。當建模反應式系統(即對外部事件作出反應的系統)時,狀態圖的作用尤為突出,例如交通信號燈或自動販賣機等應用。
相反地,右側下方展示的活動圖,則呈現系統內活動的動態流程。它細緻地描繪了所發生的活動序列,包含決策點、迴圈和分支路徑。當建模那些執行結構化活動序列的系統時,活動圖便顯得尤為重要,一個典型的例子是業務流程的建模,或複雜軟體演算法的釐清。

狀態圖用於模擬物件或系統的狀態依賴行為,而活動圖則用於模擬系統或流程中活動或動作的流程。選擇使用哪種圖表,取決於您希望呈現系統行為的特定方面,以及建模所需的細節層級。
狀態圖與活動圖的範例
考慮一個簡單的物件——交通信號燈。它有三種狀態:「紅色」、「黃色」和「綠色」。這些狀態之間的轉換由計時器觸發。以下是您使用狀態圖來表示此行為的方式:
- 狀態:紅色、黃色、綠色
- 轉換:
- 紅色 → 黃色(當紅燈時間結束時由計時器觸發)
- 黃色 → 綠色(當黃燈時間結束時由計時器觸發)
- 綠色 → 紅色(當綠燈時間結束時由計時器觸發)
在此狀態圖中,您關注的是交通信號燈可能處於的不同狀態,以及它如何根據特定事件(計時器)在這些狀態之間轉換。
活動圖範例:
現在,讓我們考慮一個業務流程,例如線上商店的訂購單處理系統。以下是此流程的簡化活動圖:
- 活動:
- 顧客下訂單。
- 系統審核訂單。
- 如果訂單有效:
- 檢查庫存。
- 處理付款。
- 安排運送。
- 訂單標示為「已出貨」。
- 如果訂單無效:
- 通知顧客。
- 訂單取消。
在此活動圖中,您關注的是處理訂購單流程中所涉及的活動序列。每一項活動代表一個具體任務,箭頭顯示活動的流程。決策點(有效性檢查)根據條件決定流程的走向。
因此,這些範例中兩種圖表的主要差異在於:
- 狀態圖表示不同的狀態(紅色、黃色、綠色)以及根據事件(計時器)在它們之間如何發生轉移。
- 活動圖表示一系列活動(訂單處理)及其按特定順序執行的方式,包括條件分支(有效性檢查)。
使用狀態圖模擬自動販賣機:
在此狀態圖表示中,自動販賣機在空閒狀態下啟動運作,為使用者提供投入硬幣的機會。當投入足夠金額後,自動販賣機進入收到資金狀態,使用者可進行商品選擇。若所選商品有庫存,自動販賣機將轉入發放狀態以交付商品,然後返回空閒狀態以完成交易。然而,若所選商品缺貨,自動販賣機將轉入退還狀態以退還硬幣,然後再返回空閒狀態,完成交易循環。當使用者未投入足夠金額時,自動販賣機會立即轉入退還狀態以退還硬幣,並在交易結束後返回空閒狀態。

使用活動圖模擬自動販賣機:所提供的活動圖揭示了自動販賣機系統內的順序事件。從起始節點開始,使用者首先被提示投入硬幣。圖中隨即進行條件檢查,以判斷使用者是否投入了足夠金額。若檢測到足夠資金,使用者將被允許選擇商品。
隨後,另一個條件檢查會評估所選商品的可用性。若商品有庫存,自動販賣機將繼續發放商品,圖中通過轉移到結束節點來標示此過程,表示交易成功完成。相反地,若所選商品不可用,自動販賣機將啟動退還硬幣的程序,然後再轉移到結束節點。
當使用者未投入足夠金額時,自動販賣機會立即啟動退還硬幣的程序,並轉移到結束節點。無論何種情況,交易均告完成,使用者可領取任何應退還的金額。

無論是透過狀態圖還是活動圖,這些表示方式都能提供自動販賣機功能的清晰且結構化的視圖,有助於分析其行為,並在必要時進行改進。
總結狀態圖與活動圖
以下是一張根據不同方面對比狀態圖與活動圖的表格:
| 方面 | 狀態圖 | 活動圖 |
|---|---|---|
| 用途 |
|
|
| 何時使用 |
|
|
| 優點 |
|
|
| 缺點 |
|
|
| 範例 |
|
|
| 重要符號 |
|
|
| 重點 |
|
|
| 抽象層級 |
|
|
這些區別應能協助您根據具體的建模需求以及您所要呈現的系統或流程性質,選擇適合的狀態圖或活動圖。
總結
狀態圖與活動圖雖然都是UML工具箱的一部分,但各自針對系統建模的不同面向。狀態圖擅長捕捉物件或系統內狀態與轉移的複雜互動,因此是具有明確有限狀態系統的首選。另一方面,活動圖則擅長呈現流程或系統內活動與任務的流程,對於建模商業流程、工作流程設計與軟體演算法而言不可或缺。
狀態圖強調狀態與轉移,因此非常適合具有複雜狀態依賴行為的系統,例如嵌入式系統與硬體控制器。然而,對於以順序性任務為主的流程,狀態圖可能變得繁瑣。相反地,活動圖擅長呈現活動流程與任務序列,因此是記錄程序性邏輯的首選工具,特別是在商業流程建模中。不過,它們在狀態與條件的明確呈現上,可能不如狀態圖來得清楚。
最終,選擇狀態圖或活動圖取決於您的建模目標。無論您是在追蹤物件的生命周期,還是協調複雜的商業流程,理解這兩種UML圖表類型將使您能選擇最適合的工具,提升系統表達的清晰度與有效性。











