Переход

Переход означает переключение управления диаграммы состояний, ее переход из одного состояния в другое. Переход означает, что если происходит заданное событие срабатывания перехода, и выполняется заданное дополнительное условие, то диаграмма состояний переключается из одного состояния в другое и выполняет заданные действия. Когда это происходит, мы говорим, что срабатывает переход.

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

Внутренние переходы

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

 Чтобы нарисовать переход

  1. Перетащите элемент Переход из палитры Диаграмма состояний в то место графического редактора, где вы хотите его нарисовать.
  2. Однако иногда (особенно в случае переходов сложной формы) удобнее создавать переходы в режиме рисования. Чтобы перейти в этот режим, сделайте двойной щелчок мышью по элементу Переход  в палитре (при этом его значок должен поменяться на этот: ). Теперь вы можете рисовать переход, последовательными щелчками мыши добавляя в нужных вам местах диаграммы начальную точку перехода, затем точки его изгиба и, наконец, двойным щелчком - конечную точку перехода.
Свойства

Имя – Имя перехода. Имя используется для идентификации перехода.

Отображать имя – Если опция выбрана, то имя перехода будет отображаться в графическом редакторе.

Исключить – Если опция выбрана, то переход будет исключен из модели.

ПроисходитВыберите здесь тип события, при происхождении которого переход сработает.

По таймауту – переход будет активирован, если истечет время заданного таймаута.

С заданной интенсивностьюпереход будет активироваться с заданной интенсивностью.

При выполнении условия - переход будет активирован, когда будет выполнено заданное логическое условие.

При получении сообщения - переход будет активирован по прибытии сообщения в соединенный с диаграммой состояний порт.

По прибытию агента - переход будет активирован, когда агент (чье поведение задается этой диаграммой состояний) достигнет точки назначения.

Таймаут –  [Только для перехода, происходящего по таймауту] Таймаут, по истечении которого сработает переход.

Интенсивность –  [Только для перехода, происходящего с заданной интенсивностью] Интенсивность, с которой будет срабатывать данный переход. Переход активируется по таймауту, вычисленному согласно экспоненциальному распределению с параметром, равном заданной Интенсивности (таймаут отсчитывается от момента входа управления в состояние, из которого выходит данный переход). То есть, если интенсивность равна 5, то переход будет срабатывать в среднем 5 раз в единицу модельного времени. 

Условие – [Только для перехода, происходящего при выполнении условия] Логическое условие, при выполнении которого будет активирован переход. 

Тип сообщения – [Только для перехода, происходящего по прибытии сообщения] Здесь вы выбираете тип сообщения, при получении которого сработает переход. Вы можете выбрать один из наиболее часто используемых типов (int, double, boolean, String), выбрав соответствующую опцию справа, либо же задать любой другой Java класс, выбрав опцию Другой и введя имя класса в поле справа.

Осуществлять переход –  [Только для перехода, происходящего  по прибытии сообщения] Здесь вы можете задать дополнительное условие, выполнение которого будет требоваться для срабатывания перехода.

Безусловно – Выберите эту опцию, если вы не хотите производить проверку типа сообщения.

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

Если выполняется условие - Здесь вы можете ввести код сложной проверки содержимого сообщения в поле Выражение (только что полученное сообщение доступно здесь как локальная переменная msg).

ДействиеПоследовательность выражений Java, выполняемых при срабатывании перехода.

Доп. условие –  Логическое выражение, разрешающее (если оно истинно, т.е. равно true) или запрещающее (если равно false) срабатавание перехода. Если условие не задано, то подразумевается true.

Свойства переходов, исходящих из ветвлений, отличаются от свойств обычных переходов:

Свойства переходов, ведущих из ветвления

При выполнении условияЕсли опция выбрана, то этот переход будет срабатывать, если заданное в поле Условие логическое условие будет истинно.

По умолчанию (выбирается, если все остальные условия не выполняются)
Если опция выбрана, то этот переход будет выбираться в том случае, если условия всех остальных переходов, ведущих из состояния ветвления, не выполняются.

 Если вы не зададите переход по умолчанию, и при переходе управления в ветвление все исходящие из ветвления переходы окажутся закрыты (не будет выполняться Условие ни одного перехода), то возникнет ошибка.

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

См. также

 Диаграммы состояний

 Переход, срабатывающий по таймауту

 Переход, срабатывающий с интенсивностью

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

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