答案 0 :(得分:4)
这是两个独立的过渡,因此只需要触发一个事件。
你没有问,但要注意,当处于状态s1时,事件e1是不确定的。原因是有两种竞争转换可用。
我会指出,正如@thomas所建议的那样,你可以通过在该事件中添加该守卫来使守卫也适用于事件e1。它看起来像e1[x==6]
。
答案 1 :(得分:1)
在UML中,内部转换优先于外部转换(参见"转换选择算法"在UML 2.4.1规范的第15.3.12节中),因此在s0中,获取e1,将始终触发内部过渡。 所以移动到s2的唯一方法是发送e1三次,这将把守卫的条件变为真,因此运行到完成步骤将转换到s2。顺便说一句,即使保护将被启用并且将发生到S2的转换,由于s1的退出动作,当到达s2时,x的值实际上将是7。