首页 > 解决方案 > UML 状态机图:从复合状态触发退出

问题描述

我有一个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 规范中找不到任何东西来支持这个想法。相反,这种方法显然会导致冲突(参见第 14.2.3.9.3 节)。但我认为这里没有冲突:

这是有效的 UML 吗?如果没有,我应该如何解决这个问题?

标签: umldiagramtransitionsstate-machine

解决方案


在这种情况下,我要做的就是A只显示A2内部,其余的都没有。注释会告诉“这是”的摘录A

    +----------------+
    | A (excerpt)    |
    |  +------+      |  E2   +-----+
o-->|  |  A2  |------------->|  B  |
    |  +------+      |       +-----+
    |                |
    +----------------+

B同样,您可以通过添加注释来省略该部分。此外(如果工具允许),您可以在适当的地方添加详细图表的超链接。


推荐阅读