我试图收集信息以便能够为UML状态机编程正确的转换选择算法。UML状态机:转换选择
的UML上层建筑规范(15.3.12的StateMachine)指出
仅发生在相互正交的区域可以被同时烧制的过渡。
“相互正交”意味着这些区域在相同的嵌套层次上吗?
对于给定级别的每个状态,将评估所有始发转换以确定它们是否已启用。
这听起来像他们必须在同一个嵌套级别。对?因为如果一个转变是在一定的嵌套层次发现,搜索结束...
的seciton“过渡选择算法”再一次是不完全清楚,我:
唯一的非小事正在解决各级正交国之间的过渡冲突。这是通过终止在每个正交 状态下的搜索来解决的,一旦其任何一个组件内的转换被触发。
为了使这个多一点的触觉我创建了2种型号:
模型1
模型2
活动状态配置:
状态1,状态3,State4,State7
实施例1a
在事件事件1其过渡火灾的情况下?
a。只有从State7到State5的那个火力?
b。还是从State3到State8?
这两种变化都会产生合法的活动状态配置。 但我的理解是,一个是正确的
例1b
同为模型2。
实施例2a
在事件事件2其过渡火灾的情况下?
a。只有从State7到State5的那个火力?
b。或者还有一个从State3到State2?
在这种情况下,我会说b会导致非法的活动状态配置。
这是否意味着该模型不合格或者只有一个转换被解雇?
实施例2b
同样为模型2.任何差?
所以你的解释是: 在(活动状态配置的)每个正交区域中,搜索(从内向外)可以启用的转换。如果找到了一个,我们就完成了该正交区域及其所有父母。像这样,我们发现0 .. *转换。 现在,如果这些转换都不会导致其他转换的任何目标状态被遗留(这将是一种“副作用”),那么转换会触发? 如果有人产生副作用:状态机是否不合格,转换是否触发,或转换搜索是否继续(我不知道如何)? – DrP3pp3r 2015-02-26 06:55:56
从State3到State2的转换将产生以下效果:退出State3,退出区域[A],退出State1(这也会导致区域[B]退出),请输入State2。 由于这退出区域[B],并且从状态7到状态5的转变在区域[B]中,所以它们不是相互正交的。 UML规范在声明相互正交的转换“可能同时触发”时,暗示了优化的机会。 – Mesmo 2015-02-26 22:52:39
如果您尝试同时触发,则可能会导致非法的活动状态配置,因为区域[A]将处于非活动状态且区域[B]处于活动状态。 所以你需要评估和顺序运行它们;如果先选择区域[A]中的转换,那么当它退出状态1时,区域[B]中的一个不会触发。如果首先测试区域[B],则其过渡将会触发,然后区域[A]中的过渡也会触发。 – Mesmo 2015-02-26 22:56:17