状态机:与转换关联的行为期间的异常

  • 本文关键字:异常 状态机 转换 关联 uml
  • 更新时间 :
  • 英文 :


行为可能与转换相关联,这就是效果。我记得读到过,效果和警卫应该是没有副作用的,没有外溢的。

但是阅读规范的 2.5 版,我没有再次发现。

我错了吗?如果不是,如果在效果期间发生异常会发生什么?

解决方案可能是根据效果的结果定义一个保护,但这可能吗?事实上,我从不这样做。

第358页:

♦ guard : 约束 [0..1]{子集命名空间::ownedRule} (与A_guard_transition::transition相反) 守卫是一种约束,它提供对过渡触发的精细控制。当状态机调度事件发生时,将评估防护。如果此时保护为 true,则可能会启用转换,否则禁用转换。守卫应该是纯粹的表情,没有副作用。有副作用的守卫表情格式不正确。

第375页:

由于转换或选择行为是在向目标节点提供令牌时使用的,因此在目标节点接受令牌之前,可能会在同一令牌上运行多次。这意味着该行为不能有副作用。它不应修改对象,但转换可以例如从一个对象导航到另一个对象,从对象获取属性值或用另一个对象替换数据值。

您应该阅读第14.2.3.9.1 The run-to-completion paradigm部分,其中详细解释了转换是如何发生的。简而言之,如果在转换的行为执行期间发生异常,则不会执行此转换。

最新更新