Порядок выполнения действий элементов диаграммы состояний
Очень важно точно знать, в каком именно порядке выполняются действия
элементов диаграммы состояний. Для этого мы предлагаем Вам изучить
приведенный ниже алгоритм.
При срабатывании перехода выполняются следующие действия (в указанном порядке):
- Действия при выходе из состояния, начиная с текущего простого
состояния, и дальше вверх по иерархии состояний, заканчивая тем
сложным состоянием, на урове иерархии которого и передается управление.
- Действие перехода.
- Действия при входе в состояние, начиная со сложного состояния,
которое получает управление, и дальше, вниз по иерархии состояний,
вплоть до простого состояния или псевдосостояния, в
которое передается управление.
- Если управление передается в псевдосостояние, то выполняется код
действия псевдосостояния, а затем управление немедленно передается
другому состоянию, и описанный выше алгоритм выполняется сначала.
Действия
состояний и переходов выполняются за нулевое модельное время. Поэтому
они не могут содержать синхронизационных операций и операций задержки и
не могут вызывать методы, явно или неявно содержащие такие операции.
Пример
Пример порядка выполнения действий
Давайте рассмотрим пример, приведенный на рисунке. Предположим, что состояние N является текущим простым состоянием, и срабатывает переход T1. Тогда действия выполняются в следующем порядке:
- Действие при выходе из состояния N
- Действие при выходе из состояния M
- Действие перехода T1
- Действие состояния ветвления
Затем, в зависимости от дополнительных условий переходов, будет выбран
переход T2 или T3. Если будет выбран переход T2, то выполнятся
следующие действия:
- Действие перехода T2
- Действие указателя начального состояния I1 (действия при входе и выходе из состояния L не выполняются, поскольку управление остается в этом состоянии)
- Действие при входе в состояние M
- Действие указателя начального состояния I2
- Действие при входе в состояние N
Если выбирается переход T3, то выполняются следующие действия:
- Действие при выходе из состояния L
- Действие при выходе из состояния K (действия состояния V не выполняются)
- Действие перехода T3
- Действие при входе в состояние S
- Действие при входе в состояние P
- Действие состояния-ветвления
- Действие при выходе из состояния P
- Действие перехода T4 (дополнительное условие перехода должно быть равно true, поскольку это единственный выход из ветвления)
- Действие при входе в состояние Q
- Действие указателя начального состояния I3
- Действие при входе в состояние R