我正在尝试收集信息,以便能够为UML状态机编写正确的转换选择算法 .
UML超结构规范(15.3.12 StateMachine)指出
只能同时触发在相互正交的区域中发生的转换 .
“相互正交”是否意味着这些区域处于相同的嵌套水平?
对于给定级别的每个状态,将评估所有原始转换以确定它们是否已启用 .
这听起来像是他们必须处于相同的嵌套层面 . 对?因为如果在某个嵌套级别上发现转换,搜索结束...
对我来说,“过渡选择算法”再次对我来说并不完全清楚:
唯一的重要问题是解决所有层面上正交状态的过渡冲突 . 一旦在其任何一个组件内的过渡被触发,就通过在每个正交状态下终止搜索来解决这个问题 .
为了使这更具吸引力,我创建了2个模型:
Model 1
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 回答
我将相互正交解释为意味着过渡的副作用对彼此没有影响 .
因此,在任何一个图中,由Event1触发的转换可以被认为是相互正交的,因为转换都包含在[A]和[B]中,并且可以同时触发 . 事件2不能从[A]内部转换为A和State1(因此也是[B]) .