Порядок выполнения действий элементов диаграммы состояний

Очень важно точно знать, в каком именно порядке выполняются действия элементов диаграммы состояний. Для этого мы предлагаем вам изучить приведенный ниже алгоритм.

При срабатывании перехода выполняются следующие действия (в указанном порядке):

  1. Действия при выходе из состояния, начиная с текущего простого состояния, и  дальше вверх по иерархии состояний, заканчивая тем сложным состоянием, на урове иерархии которого и передается управление.
  2. Действие перехода.
  3. Действия при входе в состояние, начиная со сложного состояния, которое получает управление, и дальше, вниз по иерархии состояний, вплоть до простого состояния или псевдосостояния, в которое передается управление.
  4. Если управление передается в псевдосостояние, то выполняется код действия псевдосостояния, а затем управление немедленно передается другому состоянию, и описанный выше алгоритм выполняется сначала.

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

Пример

  

Пример порядка выполнения действий

Давайте рассмотрим пример, приведенный на рисунке. Предположим, что состояние N является текущим простым состоянием, и срабатывает переход T1. Тогда действия выполняются в следующем порядке:

  1. Действие при выходе из состояния N
  2. Действие при выходе из состояния M
  3. Действие перехода T1
  4. Действие состояния ветвления
Затем, в зависимости от дополнительных условий переходов, будет выбран переход T2 или T3. Если будет выбран переход T2, то выполнятся следующие действия:
  1. Действие перехода T2
  2. Действие указателя начального состояния I1 (действия при входе и выходе из состояния L не выполняются, поскольку управление остается в этом состоянии)
  3. Действие при входе в состояние M
  4. Действие указателя начального состояния I2
  5. Действие при входе в состояние N

Если выбирается переход T3, то выполняются следующие действия:

  1. Действие при выходе из состояния L
  2. Действие при выходе из состояния K (действия состояния V не выполняются)
  3. Действие перехода T3
  4. Действие при входе в состояние S
  5. Действие при входе в состояние P
  6. Действие состояния-ветвления
  7. Действие при выходе из состояния P
  8. Действие перехода T4 (дополнительное условие перехода должно быть равно true, поскольку это единственный выход из ветвления)
  9. Действие при входе в состояние Q 
  10. Действие указателя начального состояния I3 
  11. Действие при входе в состояние R