首页 文章

UML状态机:转换选择

提问于
浏览
1

我正在尝试收集信息,以便能够为UML状态机编写正确的转换选择算法 .

UML超结构规范(15.3.12 StateMachine)指出

只能同时触发在相互正交的区域中发生的转换 .

“相互正交”是否意味着这些区域处于相同的嵌套水平?

对于给定级别的每个状态,将评估所有原始转换以确定它们是否已启用 .

这听起来像是他们必须处于相同的嵌套层面 . 对?因为如果在某个嵌套级别上发现转换,搜索结束...

对我来说,“过渡选择算法”再次对我来说并不完全清楚:

唯一的重要问题是解决所有层面上正交状态的过渡冲突 . 一旦在其任何一个组件内的过渡被触发,就通过在每个正交状态下终止搜索来解决这个问题 .

为了使这更具吸引力,我创建了2个模型:

Model 1

Model 1

Model 2

Model 2

活动状态配置:

State1,State3,State4,State7

Example 1a

如果事件Event1转换为火灾?

一个 . 只有State7到State 5的那个开火吗?

湾还是从State3到State8的一个?

两种变体都会在合法的活动状态配置中产生 . 但我的理解是,这是正确的

Example 1b

模型2也是如此 .

Example 2a

如果事件Event2转换火灾?

一个 . 只有State7到State 5的那个开火吗?

湾还是从State3到State2的一个?

在这种情况下,我会说b会导致非法的活动状态配置 .

这是否意味着该模型格式不正确或只会触发其中一个过渡?

Example 2b

型号2相同 . 有什么不同吗?

1 回答

  • 1

    我将相互正交解释为意味着过渡的副作用对彼此没有影响 .

    因此,在任何一个图中,由Event1触发的转换可以被认为是相互正交的,因为转换都包含在[A]和[B]中,并且可以同时触发 . 事件2不能从[A]内部转换为A和State1(因此也是[B]) .

相关问题