2015-02-24 45 views
1

我试图收集信息以便能够为UML状态机编程正确的转换选择算法。UML状态机:转换选择

的UML上层建筑规范(15.3.12的StateMachine)指出

仅发生在相互正交的区域可以被同时烧制的过渡。

“相互正交”意味着这些区域在相同的嵌套层次上吗?

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

这听起来像他们必须在同一个嵌套级别。对?因为如果一个转变是在一定的嵌套层次发现,搜索结束...

的seciton“过渡选择算法”再一次是不完全清楚,我:

唯一的非小事正在解决各级正交国之间的过渡冲突。这是通过终止在每个正交 状态下的搜索来解决的,一旦其任何一个组件内的转换被触发。

为了使这个多一点的触觉我创建了2种型号:

模型1

Model 1

模型2

Model 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.任何差?

回答

1

我认为相互正交意味着过渡的副作用对彼此没有影响。

所以在任何一个图表中,Event1触发的转换可以被认为是相互正交的,因为转换都包含在[A]和[B]中,并且可以同时触发。 Event2不能像[A]内的转换离开A和State1(因此也是[B])。

+0

所以你的解释是: 在(活动状态配置的)每个正交区域中,搜索(从内向外)可以启用的转换。如果找到了一个,我们就完成了该正交区域及其所有父母。像这样,我们发现0 .. *转换。 现在,如果这些转换都不会导致其他转换的任何目标状态被遗留(这将是一种“副作用”),那么转换会触发? 如果有人产生副作用:状态机是否不合格,转换是否触发,或转换搜索是否继续(我不知道如何)? – DrP3pp3r 2015-02-26 06:55:56

+0

从State3到State2的转换将产生以下效果:退出State3,退出区域[A],退出State1(这也会导致区域[B]退出),请输入State2。 由于这退出区域[B],并且从状态7到状态5的转变在区域[B]中,所以它们不是相互正交的。 UML规范在声明相互正交的转换“可能同时触发”时,暗示了优化的机会。 – Mesmo 2015-02-26 22:52:39

+0

如果您尝试同时触发,则可能会导致非法的活动状态配置,因为区域[A]将处于非活动状态且区域[B]处于活动状态。 所以你需要评估和顺序运行它们;如果先选择区域[A]中的转换,那么当它退出状态1时,区域[B]中的一个不会触发。如果首先测试区域[B],则其过渡将会触发,然后区域[A]中的过渡也会触发。 – Mesmo 2015-02-26 22:56:17