OpenU.Ru
Действие, осуществляемое при входе в состояние.
См. exit action; run
to complection; state machine; transition.
Семантика
К состоянию может прикрепляться действие при входе. Оно осуществляется при
любом входе в такое состояние - после выполнения действий, относящихся к внешним
состояниям, и до действий, относящимся к внутренним состояниям. Избежать действия
при входе невозможно. Оно выполняется всякий раз, когда активизируется состояние,
которому оно принадлежит, или же вложенное состояние.
Порядок выполнения. При переходе от одного состояния
к другому, у которого есть действие при выходе и при входе, а также действие
у перехода, соблюдается следующий порядок выполнения. Сначала выполняется все
действия при выходе для исходного состояния и всех состояний, в которые оно
вложено (к ним не относится состояние, которое является внешним как для исходного,
так и для целевого состояний). После этого происходит действие перехода, а уже
затем - действия при входе (сначала внешние и так далее, до входного действия
для самого целевого состояния).
На рис. 117 изображены переходы с несколькими действиями.
Нотация
Действие при входе реализуется в программном коде с использованием синтаксиса
для внутреннего перехода с фиктивным именем события entry (которое поэтому нельзя
использовать в качестве настоящего имени события).
entry / последовательность действий
К состоянию можно прикрепить только одно действие при входе. Однако это действие
может представлять собой последовательность действий, и, таким образом, не будет
утеряна.
Обсуждение
Действия при входе и выходе не являются важными с семантической точки зрения
(действие при входе можно прикрепить ко всем входящим переходам), однако с их
помощью можно облегчить процедуру инкапсуляции состояния, после чего его внешнее
устройство отделено от внешней структуры. Эти действия позволяют определять
действия инициализации и завершения состояния таким образом, чтобы не было возможности
их избежать. Действия при входе и выходе особенно удобно использовать для исключений,
которые должны выполняться, даже когда срабатывает исключение.
Действие при входе также можно использовать для инициализации, которую надо
проводить при первом входе в состояние. Например, это может быть инициализация
переменных, в которых содержится информация, накапливаемая за время пребывания
в этом состоянии. Например, в пользовательском интерфейсе, где номер телефона
вводится при помощи клавиатуры, после номера при входе будет очищаться. Другими
примерами могут быть повторная установка счетчика ошибок, таких как ошибки,
при вводе пароля, или же размещение в памяти временного хранилища, которое требуется
систем, когда она находится в данном состоянии.
Действие при входе и действие при выходе часто используются вместе. Первое выделяет
ресурсы, второе их освобождает. Ресурсы освобождаются даже в том случае, если
происходит внешний переход.
Это хороший способ для обработки ошибок пользователей и исключений. Ошибки на
уровне пользователя запускают переход на высоком уровне, который прерывает вложенные
состояния, однако при этом у них есть возможность освободить ресурсы перед
тем, как они потеряют управление.