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