news 2026/10/14 1:13:02

状态图和状态转换图中,“箭头”和“转换边”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
状态图和状态转换图中,“箭头”和“转换边”

在状态图和状态转换图中,“箭头”和“转换边”本质上是同一个东西的两种叫法——都是用带箭头的有向线段表示状态之间的转移。但在 UML 状态图和传统状态转换图中,它们的语义、表示能力和连接对象有显著区别。


一、核心结论

对比项状态转换图(传统 FSM)UML 状态图(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

五、示例对比

状态转换图(简单门)

text

Closed --open--> Open Open --close--> Closed Open --lock--> Locked Locked --unlock--> Closed

箭头就是转换,只连接简单状态,标注事件。

UML 状态图(带复合状态)

text

Operating ├─ Door: Closed / Open └─ Motor: Idle / Moving History: 记住上次 Door 状态

箭头可以:

  • 从初始伪状态指向 Operating

  • 从 Operating 指向历史伪状态

  • 从 Door 内部状态指向 Motor 内部状态(跨并发区域)

  • 在 Door 内部写内部转换:entry/启动电机


六、总结

要点状态转换图UML 状态图
箭头就是状态转移,简单直接是转换的可视化,转换类型丰富
转换边等价于箭头包括外部转换、本地转换,内部转换不画箭头
核心区别扁平、简单、无层次层次、并发、历史、伪状态、优先级

一句话:状态转换图中的箭头就是简单的状态转移;UML 状态图中的箭头是转换的可视化,但转换有更丰富的类型和语义,并且存在不画箭头的内部转换。两者形似而神不同,前者是 FSM 的扁平表示,后者是 Harel 状态机的层次化表示。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 1:12:58

手机专业模式参数详解:快门、ISO、对焦与白平衡实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:12:53

Ewenwan/Ros仓库实战:从SLAM建图到move_base自主导航

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:12:32

主从博弈在分布式能源竞价策略中的Matlab实现

1. 项目背景与核心价值在新型城镇配电系统中,随着分布式能源(DER)和产消者(Prosumer)的普及,传统的单向电力供应模式正在被颠覆。这个项目针对的是电力市场中最棘手的博弈问题——当每个参与者既是生产者又…

作者头像 李华
网站建设 2026/10/14 1:12:13

Splunk通过WMI远程采集Windows日志:零安装方案与实操避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:12:01

Work Agent深度解读:AI自主长程任务的执行机制与落地边界

AI的交互形态,正在从一问一答的对话模式,向能够独立完成完整工作链路的智能体形态演进。早期大模型只能完成单轮问答,用户提出问题,模型返回对应文字结果,任务在单次交互后就宣告结束。随着技术迭代,多轮对…

作者头像 李华
网站建设 2026/10/14 1:11:59

从零实现Huffman编码器与解码器:C++位操作与文件格式设计实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华