«Декларативное» составное состояние с одновременными субстанциями в UML

StackOverflow https://stackoverflow.com/questions/7819028

  •  26-10-2019
  •  | 
  •  

Вопрос

Учитывая систему, которая содержит два компонента, 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, система «запускается»
  • Система находится в состоянии "Dox", когда A находится в A.Ready, а B находится в B.Doingx
  • Система находится в состоянии «выполняет», когда А находится в А., а Б находится в B.Doingy

System state machine from yuml.me

Если я не ошибаюсь, здесь можно использовать псевдо-государства.

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

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

Это было полезно?

Решение

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

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

  • Другое государство «делает», в котором содержится регион с вашим состоянием «A.Ready» и еще одним параллельным регионом, в котором содержатся два состояния «B.Doingx» и «B.Doingy».

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top