You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UML跨多层级本地/外部转换的执行规则与合法性咨询

UML本地/外部转换工作机制详解

核心定义区分

首先明确:本地转换是同一复合状态内部子状态之间的切换,外部转换是跨复合状态、或者到完全独立状态的切换——这是两者所有行为差异的根源。

Entry/Exit动作执行规则

本地转换场景

  • 只会执行源子状态的exit动作,不会触发父复合状态的exit或entry(因为整个复合状态的上下文还在,只是内部子状态切换)
  • 目标子状态的entry动作一定会执行,哪怕之前进入过这个子状态(从兄弟状态切回来也算重新进入)

外部转换场景

  • 源端:从最内层的源子状态开始,依次向外执行所有父状态的exit动作(直到最顶层的状态)
  • 目标端:从最顶层的父状态开始,依次向内执行所有子状态的entry动作(直到目标子状态本身)

转换关联动作的执行顺序

不管是本地还是外部转换,执行流程都是固定的,按这个顺序来:

  1. 先处理源端的exit动作(按层级顺序,本地仅源子状态,外部包含所有父状态)
  2. 执行转换自身绑定的动作(Action)
  3. 最后处理目标端的entry动作(按层级顺序,本地仅目标子状态,外部包含所有父状态)

举个实际例子:
假设我们有复合状态OrderProcessing,包含子状态Validating和Charging,还有一个独立状态Completed:

  • 本地转换Validating → Charging:先跑Validating.exit,再执行转换动作(比如logValidationPassed),最后跑Charging.entry
  • 外部转换Charging → Completed:先跑Charging.exit,再跑OrderProcessing.exit,接着执行转换动作(比如sendReceipt),最后跑Completed.entry

合法性说明

这类转换是UML状态机规范完全认可的合法特性:

  • 本地转换适合在复用父状态上下文的场景下切换子状态,避免重复执行父状态的初始化/清理逻辑
  • 外部转换适合彻底切换状态上下文的场景,比如流程结束、跳转至完全不同的业务分支

内容的提问来源于stack exchange,提问作者Yamahari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:59:53