UML State Machines: локальные переходы - PullRequest
0 голосов
/ 25 апреля 2018

Согласно конечному автомату, указанному ниже в главе 9.3.3.6 Переход 011-C документа Точная семантика конечных автоматов UML от OMG, можно определить локальный переход отподсостояние до содержащего состояния.

enter image description here

Но что делает этот локальный переход T1.3 при его выполнении?Я предположил, что состояние S1.2 оставлено, и после этого применяется запись состояния S1 по умолчанию, следовательно, выполняется переход T1.1 и, наконец, вводится состояние S1.1.

Однако, переход кТаблица шагов завершения этой главы показывает, что после выполнения перехода 1.3 генерируется событие завершения CE, и, таким образом, состояние S1 покидается переходом T3:

enter image description here

Это меня озадачило, так как спецификация UML 2.5.1 в главе 14.2.3.8.3 гласит: переходы завершения и события завершения , что событие завершения составного состояния, такого как S1, имеет видгенерируется, только если все его ортогональные области достигли конечного состояния.Это, конечно, не относится к конечному автомату, показанному выше.

Теперь, какое поведение является правильным?Может быть, таблица шагов от запуска к завершению неверна?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

Я предположил, что состояние S1.2 оставлено, и после этого применяется запись состояния S1 по умолчанию, следовательно, выполняется переход T1.1 и, наконец, вводится состояние S1.1.

«T1.3» должен привести к тому, что «S1.2» останется, «S1» останется активным.«S1» не оставлен и не повторно введен, потому что «T1.3» является локальным переходом.

Единственная область «S1» не завершена, так как не было введено конечное состояние.Таким образом, нет перехода к завершению.

Может быть, таблица шагов выполнения к завершению неверна?

Да, я считаю, что это неправильно.

0 голосов
/ 26 апреля 2018

Эта тема все еще беспокоила меня, несмотря на ваши благодарные ответы, поэтому я немного углубился в изучение.На странице 31 документа Точная семантика конечных автоматов UML Я нашел это:

Завершение активации области

RegionActivations никогда не достигают завершения, так как они также закрываютсянеявно или явно.Есть два способа завершить выполнение региона.

  1. Общее правило состоит в том, что RegionActivation можно завершить только в том случае, если выполняется FinalStateActivation (см. 8.5.5) для FinalState, принадлежащего Region.Это приводит к тому, что RegionActivation помечается как завершенное (его атрибут isCompleted имеет значение true).
  2. Приведенное выше общее правило нарушается только в ситуации, когда завершается VertexActivation, принадлежащее RegionActivation, иTransitionActivation, которая выходит из VertexActivation, имеет своей целью StateActivation, которой принадлежит RegionActivation.В этом случае, и только в этом случае, RegionActivation, которой принадлежит вышедшая VertexActivation, завершено.

Если я правильно понимаю, то правило 2 точно описывает поведениеконечного автомата 9.3.3.6 Переход 011-C , и в этом случае таблица выполнения до завершения является правильной.

0 голосов
/ 25 апреля 2018

Показанный подсостоящий автомат использует так называемый локальный переход (см. Ссылку в комментарии @ Roman).UML 2.5.1 описывает локальный переход на p.314

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

Примеры локальных переходов можно найти на стр. 334 спецификации UML 2.5.1.

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

Оригинальный ответ : я никогда не видел обозначений выше, но предположим, что это должно отображать подсостояниевыход (так что T3 будет следующим переходом, который соответствует таблице).

Я думаю, что для обозначения лучше использовать Final, как это

enter image description here

показано на рис.14,38 на с.339 спецификации UML 2.5.1.

...