代码之家  ›  专栏  ›  技术社区  ›  kol

UML状态机图:从复合状态触发退出

  •  1
  • kol  · 技术社区  · 8 年前

    我有一个 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吗? 如果没有,我应该如何解决这个问题?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Ister    8 年前

    活动只应安排在过渡时期的内部政党。

    退出点是一个伪状态,本质上意味着它没有内部逻辑,一旦状态机到达它,它就会“完成”,这意味着它已经为下一个转换做好了准备。在您的情况下,您希望从 A2 在以下情况下触发 E2 发生。这就是为什么这个事件必须放在过渡的内部部分。另一方面,一旦转换到达退出点(并且“完成”),您希望不间断地进一步转换到 B 因此,不应对传出(外部)转换设置任何条件。

    放置 E2级 过渡的两个“部分”都会改变图表的含义。它将在退出伪状态时停止转换,并等待另一个 E2级 事件发生。只有那时(之后 第二 E2级 事件)状态机将达到 B 状态

    放置 E2级 对外部也会有不同的含义。只有在 A2级 完成(即使 E2级 更早发生)且仅转换 从…起 退出点将等待 E2级 事件另一方面,会发生到出口点的过渡 一旦 A2级 如果发生任何其他可能的转换 A2级 (例如,一些 E4 )将不再可用,因为状态机已 左边 A2级 并在出口点等待(等待 E2级 )。

    实际上,你在评论中已经回答了自己的问题,但我希望我的解释能够证明完整的答案是正确的。

        2
  •  1
  •   qwerty_so Rainier Wolfcastle    8 年前

    在这种情况下我要做的就是展示 A 仅适用于 A2 进去了,剩下的就没了。一张便条上写着“这是 A. “。

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

    同样,您可以省略 B 通过添加注释进行分割。此外(如果工具允许),您可以在适当的情况下为详细关系图添加超链接。