2015-06-17 4 views
0

Что происходит в государственной машине UML, если алгоритм выбора перехода (TSA) находит два перехода, которые должны как огонь и следующее верно:UML состояние машины: Конфликт ПОСЛЕ выбора

  • переход # 1 заканчивается непосредственно в а состояние
  • переход # 2 заканчивается (промежуточно) в выборе квазистационарных

Поскольку и переходы огня, они не могут противоречить друг другу. Иначе они не были бы выбраны TSA в первую очередь.

В настоящее время происходит следующее: Поскольку выбор оценивается (после перехода №2), он принимает путь (переход), который приведет к выходу состояния предка исходного состояния перехода # 2. Из-за этого выхода из состояния предка возникает конфликт с переходом №1.

UML диаграмма, показывающая такую ​​ситуацию

(улучшение по обсуждению с Томасом Kilian в комментариях к его (теперь удален) ответ)

... если происходит Event_1 и х < 0.

Example UML diagram

Вопросы

  • Является ли государственная машина плохо сформированной или что должно произойти сейчас?
  • Это незаконно для трансионов после выбора выхода из состояния? По крайней мере, он не хорошо сочетается с «последовательностью выполнения перехода» (exit (s), поведением перехода (переходами), enter (s)). Поскольку в этом случае это будет выход, поведение, выход, поведение, введите (и). Я не мог найти ничего об этом в спецификации UML Superstructure (глава 15). Но тогда все об ортогональных регионах очень туманно описано в этом документе ...

Мотивация

Я задаю вопрос из перспективы библиотечного реализатора. Поэтому я не фокусируюсь на том, как лучше проектировать эту ситуацию. Мне нужно выяснить, как правильно справляться с этой ситуацией (или мне нужно знать, что это незаконная ситуация).

ответ

1

Это одна из причин, почему существует «Точная семантика UML State Machine» на OMG ...

Во-первых, это законно для большинства переходов для выхода из состояния. В спецификации UML есть несколько ограничений, но ни один из них не будет касаться вашего дизайна.

У вас всегда должно быть одно состояние, потенциально активное в любой области автомата. Как бы то ни было, у вас есть неявный регион в вашем «StateMachine1», который содержит состояния «X» и «Y». Это означает, что ваш государственный аппарат может одновременно находиться в состояниях «StateMachine1 :: X» и «StateMachine1 :: Y»! Как вы уже знаете, ортогональные состояния действительно имеют дело с такой ситуацией. Возможно, вам нужно принести «X» и «Y» в состояния StateMachine1 :: S?

Также предупреждение о том, что по умолчанию в UML состояния имеют мелкую историю. Это означает, что исходные транзитоны в областях StateMachine1 :: S 'будут выполняться только один раз. Если вы попытаетесь вернуться в «S» (я знаю, у вас нет перехода для этого - просто спекулировать), он вернется к последним состояниям (по одному для каждого региона) до этого, если останется состояние, которое после event1, будет «A» и «E».

Трудно будет комментировать больше, не зная, что вы пытаетесь моделировать, но я надеюсь, что это поможет.

+0

Что такое "Точная семантика машины UML State"? Это документ, который я могу найти на веб-сайте OMG? – DrP3pp3r

+0

1. «Это будет означать, что ваш государственный аппарат может находиться в обоих [...] состояниях одновременно!» Вы говорите, что это возможно в примере или что это возможно в соответствии с спецификацией UML? В моем толковании спецификации суперструктуры UML это незаконно. 2. «Также предупреждение о том, что по умолчанию в UML состояния имеют мелкую историю». Я не думаю, что это правда. Спецификация UML Spec указывает: «Переход к охватывающему состоянию представляет собой переход к исходному псевдостату в каждом регионе». – DrP3pp3r

+0

продолжение ... 3. «зная, что вы пытаетесь моделировать». Дело в том, что я не пытаюсь самостоятельно моделировать себя прямо сейчас. Я пишу библиотеку государственных машин. И я хочу знать, как правильно обращаться с проектами других людей. Поэтому мой вопрос в основном заключается в следующем: что мне делать, если кто-то бросает такую ​​модель в мои рамки? – DrP3pp3r