У меня есть диаграмма состояния 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? Если нет, как мне решить эту проблему?