在状态图和状态转换图中“箭头”和“转换边”本质上是同一个东西的两种叫法——都是用带箭头的有向线段表示状态之间的转移。但在 UML 状态图和传统状态转换图中它们的语义、表示能力和连接对象有显著区别。一、核心结论对比项状态转换图传统 FSMUML 状态图State Machine Diagram箭头含义状态之间的转移转换Transition可连接状态或伪状态转换边本质就是箭头本身箭头是转换的可视化表示标注内容事件[条件]/动作事件[守卫]/动作可省略部分内部转移不存在存在但不画箭头写在状态内部连接对象只能连接简单状态可连接简单状态、复合状态、伪状态初始、终止、历史、选择、分叉、汇合等层次跨越不支持支持跨层次转换、本地转换、外部转换优先级无内层状态优先处理事件二、状态转换图中的箭头与转换边1. 图形表示用带箭头的有向线段连接两个状态。箭头从源状态指向目标状态。2. 标注格式通常标注为text事件[条件]/动作事件触发转移的信号或条件。条件守卫条件只有为真时才允许转移。动作转移发生时执行的操作。3. 语义当源状态处于活动状态且事件发生、条件满足时执行动作并进入目标状态。转移是原子的、不可中断的。4. 特点只有外部转移没有内部转移。没有伪状态箭头只能连接简单状态。没有层次、并发、历史等概念。适合描述简单的有限状态机。三、UML 状态图中的箭头与转换边1. 图形表示同样用带箭头的有向线段表示转换。但箭头可以连接简单状态 ↔ 简单状态简单状态 ↔ 复合状态复合状态 ↔ 复合状态伪状态 ↔ 状态如初始伪状态、历史伪状态、选择伪状态、分叉/汇合等2. 标注格式完整格式text事件[守卫]/动作事件触发器可为空表示完成转移。守卫布尔条件。动作转移时执行的动作effect。3. 转换的类型类型说明是否画箭头外部转换从源状态退出进入目标状态执行 exit/entry 动作✅ 画箭头内部转换不离开当前状态不执行 exit/entry 动作❌ 不画箭头写在状态内部本地转换在复合状态内部转移不退出复合状态✅ 画箭头但有特殊语义完成转换无事件源状态完成活动后自动触发✅ 画箭头无事件标签4. 语义外部转换源状态执行 exit 动作 → 转移动作 → 目标状态执行 entry 动作。内部转换只执行转移动作不执行 exit/entry。本地转换在复合状态内转移不触发复合状态的 exit/entry。完成转换当源状态的 do 活动完成或达到完成条件时自动触发。5. 特点支持层次箭头可以跨越复合状态的边界。支持并发箭头可以连接并发区域。支持历史箭头可以指向历史伪状态恢复上次退出时的子状态。支持选择、分叉、汇合等伪状态。转移有优先级内层状态优先处理事件未被处理才向外层冒泡。四、箭头与转换边的具体区别区别点状态转换图UML 状态图箭头是否等于转换边是箭头就是转换箭头是转换的可视化但转换还包括内部转换不画箭头连接对象只能连接状态可连接状态、伪状态、复合状态边界标注内容事件/条件/动作事件[守卫]/动作可省略事件完成转移是否支持内部转移不支持支持不画箭头是否支持完成转移不支持支持无事件标签是否支持层次跨越不支持支持是否支持伪状态不支持支持初始、终止、历史、选择、分叉、汇合等优先级规则无内层优先动作执行顺序源状态动作→转移动作→目标状态动作外部转移exit→effect→entry内部转移只执行 effect五、示例对比状态转换图简单门textClosed --open-- Open Open --close-- Closed Open --lock-- Locked Locked --unlock-- Closed箭头就是转换只连接简单状态标注事件。UML 状态图带复合状态textOperating ├─ Door: Closed / Open └─ Motor: Idle / Moving History: 记住上次 Door 状态箭头可以从初始伪状态指向 Operating从 Operating 指向历史伪状态从 Door 内部状态指向 Motor 内部状态跨并发区域在 Door 内部写内部转换entry/启动电机六、总结要点状态转换图UML 状态图箭头就是状态转移简单直接是转换的可视化转换类型丰富转换边等价于箭头包括外部转换、本地转换内部转换不画箭头核心区别扁平、简单、无层次层次、并发、历史、伪状态、优先级一句话状态转换图中的箭头就是简单的状态转移UML 状态图中的箭头是转换的可视化但转换有更丰富的类型和语义并且存在不画箭头的内部转换。两者形似而神不同前者是 FSM 的扁平表示后者是 Harel 状态机的层次化表示。