2015-11-18 2 views
2

На конечной машине ниже давайте предположим, что я нахожусь в «StateE». Затем идет Sig1, поэтому происходит переход. Сначала я выхожу из «StateE», затем предполагаю, что охранник «Grd1» позволяет мне заниматься.UML State machine с вложенными состояниями и do Activity

Теперь я вхожу в «StateH», выполняю действие входа («Act2»). Затем я помещаю сигнал в очередь, чтобы выполнить действие «do» в «StateH». Это означает, что действие «StateH» «do» не обязательно будет выполняться сразу после действия ввода, но некоторые другие уже запланированные сигналы могут быть поданы первыми.

Затем я перехожу к «StateG». В «StateG» снова выполняется действие входа («Act2»), и действие «do» запланировано как сигнал.

Диспетчер сигналов достигает точки в очереди сигналов, где сигнал состояния StateH действует.

Вопрос заключается в следующем: мы выходим из StateG обратно в StateH перед выполнением действия действия StateH или можем сказать: «Быть ​​в StateG также находится в StateH, поэтому переход штата не требуется, давайте выполним StateH сделайте действие сразу.

enter image description here

+0

Для увеличения изображения, нажмите на изображение. – user2281723

ответ

1

В соответствии с UML Specification (формально-15-03-01, п. 14.2.3.4.3)

Государство может также иметь ассоциированный doActivity поведение. Это поведение начинает выполнение, когда государство вводится (но только после того, как поведение записи состояния « » завершено) и выполняется одновременно с любыми другими Поведениями, которые могут быть связаны с состоянием, до: • он завершает (в этом случае завершение событие) или • выведено состояние , и в этом случае выполнение doActivity Behavior отменено.

Это означает, что 1) doActivity выполняется, как только вводится состояние (в отличие от вашего понимания), и 2) doActivity продолжает работать, пока государство активно.

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

+0

Ваши разъяснения верны. Однако такое поведение довольно громоздко: это означает, что активность do должна выполняться на отдельном потоке, отделенном от потока, обслуживающего остальные сигналы ... – user2281723

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