«Декларативное» составное состояние с параллельными подсостояниями в UML - PullRequest
1 голос
/ 19 октября 2011

С учетом системы, которая содержит два компонента, A и B, и

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

A and B state machine from yuml.me

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

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

System state machine from yuml.me

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

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

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

1 Ответ

3 голосов
/ 19 октября 2011

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

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

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...