引言
在软件工程和系统设计领域,有效沟通和可视化系统行为至关重要。这正是统一建模语言(UML)图发挥作用的地方,它提供了多种工具来表示系统动态的不同方面。在这些工具中,状态图和活动图尤为突出,各自具有不同的用途,并为理解系统行为提供了独特的视角。
本文将深入探讨状态图和活动图的世界,旨在揭示它们的特征、应用场景、优缺点。通过理解这两种UML图类型的关键差异,您将获得宝贵的见解,从而在软件开发和系统建模工作中选择最合适的工具以取得最佳效果。
状态图与活动图的对比
状态图和活动图都是软件工程和系统设计中用于表示系统行为不同方面的UML(统一建模语言)图,但它们具有不同的用途,并关注系统行为的不同方面。以下是状态图与活动图的对比:
- 目的:
- 元素:
- 状态图:状态图的主要元素包括状态(表示特定条件或情况)、转换(表示系统如何从一个状态转移到另一个状态)以及事件(引发状态转换的触发器)。
- 活动图:活动图由活动(表示任务或动作)、控制流箭头(表示活动的顺序)、决策节点(用于条件分支)、合并节点(用于合并流程)以及泳道(用于在不同参与者或子系统之间划分活动)组成。
- 关注点:
- 状态图:状态图强调对象或系统不同状态以及状态间转换发生的条件。它们特别适用于建模实时系统或具有复杂状态依赖行为的系统。
- 活动图:活动图关注活动的流程以及不同任务或动作在流程或系统中的协调方式。它们非常适合用于建模业务流程、工作流系统和软件算法。
- 用途:
- 状态图: 状态图常用于软件系统、嵌入式系统和硬件控制器的设计中,这些对象或系统可能处于不同状态,并需要通过在这些状态之间转换来响应事件。
- 活动图: 活动图常用于业务流程建模、软件开发和系统设计中,以表示流程或工作流中涉及的步骤和活动。
左侧下方所示的状态图,作为状态机的视觉表示,能够响应特定事件执行操作。它细致地展示了系统中的各种状态以及由事件触发的状态间转换。当建模反应式系统——即对外部事件作出反应的系统——时,状态图的作用尤为突出,例如交通灯或自动售货机等应用。
相反,右侧下方展示的活动图,则呈现了系统内活动的动态流程。它细致地描绘了活动的执行顺序,包括决策点、循环和分支路径。当建模那些涉及一系列结构化活动的系统时,活动图尤为突出,典型例子包括业务流程建模或复杂软件算法的描述。

状态图用于建模对象或系统的状态相关行为,而活动图用于建模系统或过程中的活动或动作流程。选择使用哪种图,取决于您希望表示系统行为的特定方面以及建模所需的详细程度。
状态图与活动图示例
考虑一个简单的对象——交通灯。它有三种状态:“红”、“黄”和“绿”。这些状态之间的转换由定时器触发。以下是使用状态图表示此行为的方式:
- 状态:红、黄、绿
- 转换:
- 红 → 黄(当红灯时间结束时由定时器触发)
- 黄 → 绿(当黄灯时间结束时由定时器触发)
- 绿 → 红(当绿灯时间结束时由定时器触发)
在这个状态图中,您关注的是交通灯可能处于的不同状态,以及它如何根据特定事件(定时器)在这些状态之间转换。
活动图示例:
现在,我们来考虑一个业务流程,例如在线商店的采购订单处理系统。以下是该流程的简化活动图:
- 活动:
- 客户下单。
- 系统审核订单。
- 如果订单有效:
- 检查库存。
- 处理付款。
- 安排发货。
- 订单标记为“已发货”。
- 如果订单无效:
- 通知客户。
- 订单取消。
在这个活动图中,您关注的是处理采购订单过程中涉及的活动顺序。每个活动代表一个具体任务,箭头表示活动的流程。决策点(有效性检查)根据条件决定流程的走向。
因此,这两个示例中两种图的关键区别在于:
- 状态图表示不同的状态(红、黄、绿)以及基于事件(定时器)在它们之间如何发生转换。
- 活动图表示一系列活动(订单处理)及其按特定顺序执行的方式,包括条件分支(有效性检查)。
使用状态图对自动售货机进行建模:
在此状态图表示中,自动售货机在空闲状态启动其操作,为用户提供投入硬币的机会。当投入足够金额的资金后,自动售货机进入已收款状态,用户可以进行产品选择。如果所选产品有库存,自动售货机将转入出货状态以交付产品,然后返回空闲状态以完成交易。然而,如果所选商品缺货,自动售货机将切换到退款状态以退还硬币,随后返回空闲状态,完成交易周期。当用户未投入足够资金时,自动售货机会立即转入退款状态以退还硬币,并在交易结束后返回空闲状态。

使用活动图对自动售货机进行建模:所提供的活动图揭示了自动售货机系统内一系列事件的顺序。从起始节点开始,用户首先被提示投入硬币。随后,图中包含一个条件检查,以判断用户是否投入了足够的资金。如果检测到足够资金,用户将被允许选择商品。
随后,另一个条件检查将评估所选商品的可用性。如果商品有库存,自动售货机将开始出货,图中通过过渡到终止节点来表示这一点,表明交易已成功完成。相反,如果所选商品不可用,自动售货机将启动硬币退款流程,然后过渡到终止节点。
当用户未投入足够资金时,自动售货机会立即启动硬币退款流程,并过渡到终止节点。在任何情况下,交易均告结束,用户可领取相应的退款。

无论通过状态图还是活动图,这些表示方式都为自动售货机的功能提供了清晰且结构化的视图,有助于分析其行为,并在必要时进行改进。
总结状态图与活动图
以下表格从多个方面对比了状态图与活动图:
| 方面 | 状态图 | 活动图 |
|---|---|---|
| 用途 |
|
|
| 何时使用 |
|
|
| 优点 |
|
|
| 缺点 |
|
|
| 示例 |
|
|
| 重要符号 |
|
|
| 关键关注点 |
|
|
| 抽象层次 |
|
|
这些区别应能帮助您根据具体的建模需求以及您所要表示的系统或流程的性质,在状态图和活动图之间做出选择。
总结
状态图和活动图虽然都是UML工具箱的一部分,但针对系统建模的不同方面。状态图擅长捕捉对象或系统内部状态和转换的复杂互动,因此是具有明确有限状态的系统的首选。另一方面,活动图擅长展示流程或系统内活动和任务的流动,因此在建模业务流程、工作流设计和软件算法方面不可或缺。
状态图突出显示状态和转换,因此非常适合具有复杂状态依赖行为的系统,如嵌入式系统和硬件控制器。然而,对于以顺序任务为主的流程,它们可能变得繁琐。相比之下,活动图在展示活动流和任务序列方面表现出色,因此是记录过程逻辑(尤其是在业务流程建模中)的首选工具。尽管如此,它们在状态和条件的明确表示方面可能不如状态图。
最终,选择状态图还是活动图取决于您的建模目标。无论您是在追踪对象的生命周期,还是在协调复杂的业务流程,理解这两种UML图的特性将使您能够选择最适合的工具,从而提升系统表示的清晰度和有效性。











