Диаграмма конечного автомата UML: триггерный выход из составного состояния - PullRequest
0 голосов
/ 06 мая 2018

У меня есть диаграмма состояния 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). Но я думаю, что здесь нет конфликта:

  • Оба перехода приводят к выходу системы из состояния A и переходу в состояние B. Таким образом, они практически образуют один переход.
  • Обе диаграммы легко понять, потому что обе показывают E2, а точка выхода выглядит как «ворота» между двумя диаграммами, через которые состояние системы «перемещается» от (A, A2) до B. Я думаю, что было бы странно показывать E2 только с одной стороны точки выхода.
  • Если произошел другой аналогичный переход, например, из A1 в состояние D (не показано), то он может быть обработан таким же образом со второй точкой выхода. Однако в этом случае две точки выхода должны быть помечены по-разному (например: «Выход из A1» и «Выход из A2»).

Это действительный UML? Если нет, как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Событие должно быть размещено только на внутренней стороне перехода.

Точка выхода - это псевдосостояние, которое по сути означает, что у него нет внутренней логики, и как только конечный автомат достигает его, он «завершает», что означает, что он готов к следующему переходу. В вашем случае вы хотите, чтобы переход из A2 был запущен, когда происходит E2. Вот почему это событие должно быть размещено на внутренней части перехода. С другой стороны, как только переход достигнет точки выхода (и он «завершится»), вы захотите непрерывный дальнейший переход к B, поэтому на исходящем (внешнем) переходе не должно быть никаких условий.

Размещение E2 на обеих «частях» перехода изменит смысл диаграммы. Он остановит переход на псевдосостоянии выхода и подождет, пока не произойдет другое событие E2. Только тогда (после события second E2) конечный автомат достигнет состояния B.

Размещение E2 на внешней части также будет иметь другое значение. Переход к точке выхода произойдет только после завершения A2 (даже если E2 произойдет раньше), и только переход из точки выхода будет ожидать события E2. С другой стороны, переход к точке выхода происходит , как только A2 завершается, поэтому, если это произойдет, любые другие возможные переходы из A2 (например, некоторые E4) больше не будут доступны, так как конечный автомат уже оставил A2 и ожидает точки выхода (для E2).

Вы на самом деле ответили на свой вопрос в комментариях, но я надеюсь, что мое объяснение оправдывает полный ответ.

0 голосов
/ 06 мая 2018

Что бы я сделал в этом случае, чтобы показать A с только A2 внутри, а остальные были выключены. В записке будет сказано "это выдержка из A".

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

Точно так же вы можете пропустить часть B, добавив заметки. Также (если позволяет инструмент) вы можете добавить гиперссылки для подробных диаграмм, где это уместно.

...