【发布时间】:2018-05-06 15:42:47
【问题描述】:
我有一个 UML 状态机图,如下所示:
+-----------------------------------+
| A |
| +------+ E1 +------+ | E2 +-----+
o-->| o-->| A1 |------>| A2 |------------->| B |
| +------+ +------+ | +-----+
| |
+-----------------+-----------------+
| E3
V
+-----+
| C |
+-----+
实际上,复合状态 A 有很多子状态,我想将其提取成一个单独的图表。这意味着从A2 到B 的过渡箭头必须被一个出口点切成两半。
但是我应该把事件E2放在哪里呢?我想,我应该把它放在出口点的两边,也就是在两个图中:
高级图(o-o 是分解图标,(X) 是出口点):
+-----------+
| |
| | E2 +-----+
o-->| A (X)------>| B |
| | +-----+
| o-o |
+-----+-----+
| E3
V
+-----+
| C |
+-----+
低级图:
+------------------------------------+
| A |
| +------+ E1 +------+ E2 |
| o-->| A1 |------>| A2 |----->(X)
| +------+ +------+ |
| |
+------------------------------------+
请注意,E2 显示在两个图表中。不幸的是,我在UML spec 中找不到任何支持这个想法的东西。相反,这种方法显然会导致冲突(参见第 14.2.3.9.3 节)。但我认为这里没有冲突:
- 两个转换都使系统离开状态
A并进入状态B。所以它们实际上形成了一个过渡。 - 两个图都很容易理解,因为都显示
E2,出口点看起来就像两个图之间的“门”,系统的状态通过它从(A, A2)“移动”到B。我认为仅在出口点的一侧显示E2会造成混淆。 - 如果有另一个类似的转换,例如从
A1到状态D(未显示),那么它可以以相同的方式处理,具有第二个退出点。但是,在这种情况下,两个出口点的标签应不同(例如:“从 A1 出口”和“从 A2 出口”)。
这是有效的 UML 吗?如果不是,我应该如何解决这个问题?
【问题讨论】:
-
我最近被指向omg.org/spec/PSSM/1.0/Beta1盖茨,然而,仍然没有被提及(它们只适用于交互)。
-
@ThomasKilian 谢谢,我不知道这个文件。浏览了一下,我发现了一些示例,这些示例仅将事件放入 low level 图表中,即在出口点的“内侧”。事件到达时触发to退出点的过渡,第二次from退出点的过渡是自动,所以没有需要把事件放在上面。 UML 规范中有一个类似的论点,在第 14.2.3.4.6 节的最后一段。
-
@ThomasKilian 引用这段话(强调我的):“出口点是入口点的倒数。也就是说,源自复合状态中的顶点的转换可以在出口点终止。在格式良好的模型,这样的 Transition 应该有一个从同一个出口点传出的对应的外部 Transition,表示终止 Transition 的延续。”
-
我也只浏览了那个文件。 SM 不是我的强项,本文档是 1.0 beta。不知道 OMG 将来如何处理 UML 和这个文档。也许他们会将 SM(部分)从 UML 中分离出来,因为它是一个如此复杂的领域。
标签: uml diagram transitions state-machine