如果转换选择算法(TSA)发现两个应同时触发并且后续成立的转换,则在UML状态机中会发生什么:
由于两个转换都会发生冲突,因此它们不会发生冲突。否则,TSA首先不会选择它们。
现在发生以下情况: 当评估选择时(在转换#2之后),它采用将导致转换#2的源状态的祖先状态退出的路径(转换)。由于祖先状态的退出,发生与转换#1的冲突。
显示此类情况的UML图
(根据Thomas Kilian对他(现已删除)答案的评论进行了改进)
...如果Event_1发生且x< 0
问题
动机
我从图书馆实施者的角度提问。所以我的重点不是如何以更好的方式设计这种情况。我需要弄清楚如何正确处理这种情况(或者我需要知道这是非法的情况)。
答案 0 :(得分:1)
这就是为什么在OMG上有“UML状态机的精确语义”的一个原因......
首先,大多数过渡退出一个州都是合法的。 UML规范中有一些限制,但没有一个与您的设计有关。
您应始终拥有在任何状态机区域内可能处于活动状态的单个状态。就目前而言,“StateMachine1”中有一个包含“X”和“Y”状态的隐式区域。这意味着您的状态机可能同时处于“StateMachine1 :: X”和“StateMachine1 :: Y”状态!正如你已经知道的那样,正交状态就是处理这种情况。也许你需要在状态StateMachine1 :: S'区域内带上“X”和“Y”?
同样是一个警告,默认情况下,UML中的状态具有浅层历史记录。这意味着,就目前而言,StateMachine1 :: S'区域内的初始过渡只会被采用一次。如果你试图回到“S”(我知道,你没有那个过渡 - 只是推测),它将返回到最后一个状态(每个区域一个),如果离开状态,之后, event1,将是“A”和“E”。
如果不知道你想要建模什么,就很难评论,但我希望这会有所帮助。