«Декларативное» составное состояние с одновременными субстанциями в UML
-
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 находится в A. Starting, или B находится в B.Starting, система «запускается»
- Система находится в состоянии "Dox", когда A находится в A.Ready, а B находится в B.Doingx
- Система находится в состоянии «выполняет», когда А находится в А., а Б находится в B.Doingy
Если я не ошибаюсь, здесь можно использовать псевдо-государства.
Но имеют ли эти модельные элементы декларативной семантики составленного состояния, упомянутого выше? Есть ли другой способ моделировать это?
(Примечание: диаграммы из 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 Бета):
В иерархической государственной машине более одного состояния может быть активным одновременно. [...] Нынешнее активное «состояние» фактически представлено набором деревьев состояний, начиная с самых самых самых состояний корневых областей вплоть до внутренней активной субстанции. Мы называем такое государственное дерево как Конфигурация состояния.