2015-11-19 5 views
3

При условии, что я сейчас в StateB. Приходит Sig2. Таким образом, запись или выход не будут выполнены, а только Act5. Все идет нормально.Составные состояния и внутренние переходы

Теперь мы находимся в StateC, но на этот раз Sig1 приходит. Определяется внутренний переход, но в исходном составном состоянии. Должен ли я выйти из StateC, сделать Act2 и перейти к исходному коннектору и ввести StateB?

Я не нашел ответа на этот вопрос в стандарте UML.

State machine

+0

'StateC' недостижим, как бы вы туда попали? –

+1

Вы правы, но это не актуально для сути вопроса. Вот почему я не разрабатывал эту государственную машину и просто сделал что-то «быстрое и грязное». – user2281723

ответ

2

Вам не нужно выходить StateC, внутренние переходы владеющему государства всегда может произойти до тех пор, пока вы находитесь в некоторых из его субсостояниями.

14.5.12.3 литералы

  • внутренний
    • Подразумевается, что переход, если срабатывает, происходит без выхода или входа в исходное состояние (т.е. не причина изменение состояния) , Это означает, что условие входа или выхода исходного состояния не будет вызываться. Внутренний переход может быть выполнен, даже если SateMachine находится в одном или нескольких регионах, вложенных в соответствующее состояние.

Это имеет смысл --- вы всегда в какой-то подсосто составного состояния. (Как только вы вводите составное состояние, оно немедленно (после entry поведения) переходит в первое состояние).

И, конечно, внутренние переходы не меняют конфигурацию состояния, поэтому они останутся неизменными (<StateA::StateC>).

Это все, конечно, предполагается, что вы телепортировались в StateC, потому что это состояние недоступно.

+0

Я обычно интерпретирую последнее предложение так же, как и вы. Однако этот стандарт может быть немного более конкретным в этом отношении. Спасибо, Питер! – user2281723

+0

Часто часто возникает некоторый уровень двусмысленности (особенно в государственных машинах), поэтому конечный пользователь может определить точную семантику в зависимости от его потребностей. –

0

The Wikipedia article on UML statecharts в настоящее время делает однозначное утверждение, устраняющее это:

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

К сожалению, это не источник. Я согласен с @ user2281723, что спецификация неоднозначна. Из § 14.2.3.8.1 из UML 2.5:

внутренний является частным случаем местного Перехода, который является самостоятельной переход (то есть, с того же источника и цели государств), что государство никогда не выходит (и, следовательно, не возвращается), ..

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

Я подозреваю, что первое значение было предназначено спецификаторами и используется на практике. Надеюсь, в конечном итоге в спецификацию будет добавлено уточнение.

Смежные вопросы