"Декларативное" составное состояние с параллельными подсостояниями в UML

Дана Система, которая содержит два компонента, А и В, и

Система запускает A и B одновременно. Теперь A может проходить через состояния {A.Starting, A.Ready}, а B может находиться в состояниях {B.Starting, B.DoingX, B.DoingY}. (События для перехода между состояниями A и B названы соответственно: B.doingx => B переходит к B.DoingX и т. Д...)

A и B конечный автомат от yuml.me

Я хочу смоделировать это

  • В то время как A находится в A.Starting, или B находится в B.Starting, система "запускается"
  • Система находится в состоянии "DoingX", когда A находится в A.Ready, а B находится в B.DoingX
  • Система находится в состоянии "DoingY", когда A находится в A.Ready, а B находится в B.DoingY

Системный конечный автомат от yuml.me

Если я не ошибаюсь, здесь можно использовать псевдо-состояния fork/join.

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

(Примечание: диаграммы взяты с http://yuml.me/)

1 ответ

Решение

Почему бы тебе просто не разобрать их? Вот еще одна идея о том, как вы могли бы смоделировать это (если я правильно понял):

  • состояние "Старт", которое содержит состояния, которые вы называете А. Старт и Б. Старт в параллельных регионах (вы можете использовать здесь разветвление / соединение или просто полагаться на поведение по умолчанию для всех регионов, активируемых при состоянии "Старт"). введен)

  • другое состояние "Doing", которое содержит регион с вашим состоянием "A.Ready", и другой параллельный регион, который содержит два состояния "B.DoingX" и "B.DoingY".

Если вам действительно нужно иметь общее состояние "DoingX", то вам, возможно, придется создать два состояния, которые соответствуют A.Ready.

В любом случае, в более широкой перспективе: я полагаю, что ваша точка зрения здесь немного отличается, когда вы говорите, что "Система в состоянии...". Скорее, система, моделируемая таким конечным автоматом, находится в наборе состояний. Поэтому, как правило, я был бы совершенно счастлив сказать, что "система в настоящее время находится в A.Ready и B.DoingX".

Может быть, все, что вам нужно, это изменение терминологии. Как насчет этого:

Система находится в конфигурации "DoingX", когда активны состояния A.Ready и B.DoingX?

В ответ на комментарий: Да, это стандарт, вот соответствующая часть из спецификации надстройки (бета-версия 2.4):

В иерархическом автомате состояний одновременно могут быть активны несколько состояний. [...] текущее активное "состояние" фактически представлено набором деревьев состояний, начиная с самых верхних состояний корневых областей вплоть до самого внутреннего активного подсостояния. Мы называем такое дерево состояний конфигурацией состояний.

Другие вопросы по тегам