【发布时间】:2016-02-14 09:27:30
【问题描述】:
【问题讨论】:
标签: uml
【问题讨论】:
标签: uml
这是两个独立的转换,因此只需要触发一个事件。
您没有问,但请注意,当处于状态 s1 时,事件 e1 是不确定的。原因是有两个相互竞争的转换可用。
我会指出,正如@thomas 所建议的那样,您可以通过将该守卫添加到事件 e1 来使守卫也适用于事件 e1。它看起来像e1[x==6]。
【讨论】:
[x==6] 转换没有事件。 [x==6] 是守卫。
e1 需要在同一个转换箭头处进行防护。也许这也可以在答案中注明。
在 UML 中,内部转换优先于外部转换(请参阅 UML 2.4.1 规范的第 15.3.12 节中的“转换选择算法”),因此在 s0 中,获取 e1 将始终触发内部转换。 因此,转移到 s2 的唯一方法是发送 e1 三次,这会将守卫的条件变为真,因此运行到完成步骤将转移到 s2。顺便说一句,即使启用了保护并且会发生到 S2 的转换,但由于 s1 的退出操作,到达 s2 时 x 的值实际上是 7。
【讨论】: