我正在尝试收集信息,以便能够为UML状态机编写正确的转换选择算法。
UML超结构规范(15.3.12 StateMachine)陈述
只能在相互正交的区域中发生转换。
“相互正交”是否意味着这些区域处于相同的嵌套级别?
对于给定级别的每个状态,将评估所有原始转换以确定它们是否已启用。
这听起来像他们必须处于相同的嵌套水平。对?因为如果在某个嵌套级别上找到转换,则搜索结束...
对我来说,“过渡选择算法”再次对我来说并不完全清楚:
唯一的重要问题是在所有级别上解决跨越正交状态的转换冲突。这通过在每个正交中终止搜索来解决 状态一旦在其任何一个组件内部发生转换就被触发。
为了使这更具吸引力,我创建了2个模型:
模型1
模型2
活动状态配置:
State1,State3,State4,State7
示例1a
如果事件Event1转换为火?
一个。只有从State7到State 5的那个开火吗?
湾或者然后从State3到State8?
两种变体都会在合法的活动状态配置中产生。 但我的理解是,a是正确的
示例1b
模型2相同。
示例2a
如果事件Event2过渡了吗?
一个。只有从State7到State 5的那个开火吗?
湾或者然后从State3到State2?
在这种情况下,我会说b会导致非法的活动状态配置。
这是否意味着模型格式不正确或只会触发其中一个过渡?
示例2b
模型2相同。有什么不同吗?
答案 0 :(得分:1)
我认为相互正交意味着过渡的副作用对彼此没有影响。
因此,在任何一个图中,由Event1触发的转换可以被认为是相互正交的,因为转换都包含在[A]和[B]中,并且可以同时触发。事件2不能从[A]中转换为A和State1(因此也是[B])。