2

我需要确定 UML 2.5 状态机图的所有基本元素。不幸的是,这些图表的符号似乎有很多歧义,因为网上有很多不同的变体。

我的解释是,每个状态机图都由许多状态和许多转换组成。

每个州都有:

  • 一个可选的进入动作
  • 可选的动作
  • 一个可选的退出动作

每个过渡都有:

  • 一个触发事件
  • 一个可选的前提条件
  • 转换动作(后置条件)。

我对符号如何工作的理解可以在图 1(符号[precondition] Event / [Transition Action]之后的电动门功能示例)和图 2 中进行总结。

示例:当触发事件时(例如按下关闭按钮),评估前提条件(如果有)(例如门口是否空),如果满足前提条件,则触发转换动作(例如关闭门)。

图1 电动门状态机

图 2 在此处输入图像描述

我的问题:

  1. 过渡动作是过渡的实现还是仅仅是过渡期间发生的动作。简单来说,如果转换动作出错,转换(新状态)会成功吗?我的问题基本上源于这样一个事实,即许多消息来源建议您可以在到达新状态时使用entry 操作,而不是使用转换操作。在我的理解中,虽然过渡动作是过渡的实现,因此在进入新状态之前发生,与进入动作相比这在到达新状态后立即发生。因此,就过渡本身和时间而言,这是两种完全不同类型的动作。了解这些行动的时机对我来说至关重要。
  2. 我的一般解释正确吗?(例如,我对图 1 中的事件、后置条件和转换动作的理解可能是什么)

我知道状态机图有十几种变体,因此有不同的表示/解释,但我对 UML 2.5 很感兴趣。

4

1 回答 1

2

转换动作是 UML 2.5 声明为转换的关联结束:

effect : Behavior [0..1]{subsets Element::ownedElement} (相反的 A_effect_transition::transition)指定当转换触发时要执行的可选行为。

<<entry>>状态的 是分配给状态本身的行为。也就是说,它将从转换的来源触发。相比之下,上述效果只是沿过渡触发。

效果不能“出错”。任何行为被执行,被执行。此处不检查任何条件。

是否触发转换可以由[guard]您错误命名的控制[precondition]。(可以开始争论,但你需要去[guard]。)

guard : Constraint [0..1]{subsets Namespace::ownedRule} (与 A_guard_transition::transition 相反) 守卫是一个提供对转换触发的细粒度控制的约束。当 StateMachine 调度事件发生时,就会评估守卫。如果当时守卫为真,则可以启用转换,否则禁用。守卫应该是没有副作用的纯表达式。带有副作用的守卫表达式格式不正确。

关于时间,您可以想象一个令牌沿着各州移动。当守卫让你通过时,<<exit>>行为就会被执行。然后是转换effect,最后是<<entry>>下一个状态的行为。

于 2016-04-23T13:13:15.053 回答