我正在尝试正确理解区域以及fork并在UML状态机中加入伪状态。 我发现的所有例子都很简单,我不太确定什么是合法的,什么不合法。
UML超结构规范(15.3.14转换)状态
复合转变的尾部可以具有源自一组相互正交的区域的多个转变 加入点加入。
这是否意味着,连接只能放在复合转换的末尾?
这是否意味着,连接只能跟一个状态而不是伪状态?
它还声明:
复合转换的头部可能有多个转换,这些转换源自一个目标为一组的fork伪状态 相互正交的区域。
这是否意味着,叉子只能放在复合转换的开头(即直接跟随状态而不是伪状态之后)?
章 15.3.8 Pseudostate 并没有帮助我回答这些问题。 “约束”部分和“语义”部分都没有让我更清楚。
连接顶点用于合并从不同正交区域中的源顶点发出的多个过渡。该 进入连接顶点的过渡不能有警戒或触发器。“
如果传入的转换没有触发器:转换如何触发?
实施例: 复合状态S1:在区域1中S11有效,在区域2中S12有效。 S11和S12具有导致连接的转换。如何实现联接?
修改 我很快就停止了阅读。这个问题的答案是“通过完成事件”。这些转换是“完成转换”。
此外: 当提到“相互正交的区域”时:这些区域是否必须是相同复合状态的子元素? 更一般:只有当状态被放置在相同复合状态的不同区域中时才可以同时处于活动状态,或者可以 - 在分叉之后 - 多个状态处于活动状态时 是否位于完全不同的复合状态?
答案 0 :(得分:4)
分叉并加入Petri网。沿着该网络,您有一个虚拟令牌,沿着转换从一个节点传播到另一个节点。 fork会将传入令牌乘以与之一样多的传出转换。只有当所有这些令牌都已到达下一个连接时,机器才会继续使用单个令牌(除非再次使用多个转换进行分叉 - 但在fork线内部将有一个令牌)。您可以将表示fork / join的行描述为(1维)框,该框暂时保存单个标记。当所有传入转换持有令牌时,此单个令牌存在。然后将该令牌与所有传出转换相乘。解雇新令牌需要时间。当从传入的令牌创建内部令牌时,它会立即发生。
不幸的是,这个概念并不为人所知,许多建模者以错误的方式使用它。但我想如果你得到了旅行(乘法)代币的概念,你就会明白这一点。