Шаг 175.
Унифицированный язык моделирования UML.
Переходы состояний автомата объекта

    На этом шаге рассмотрим понятие перехода между двумя состояниями автомата объекта в UML.

    Переход – это связь между двумя состояниями, означающая, что объект в первом состоянии должен выполнить определенные действия и перейти во второе состояние, когда произойдет определенное событие и будут удовлетворены заданные условия. До тех пор пока переход не произошел, об объекте говорят, что он находится в исходном состоянии; после перехода он пребывает в целевом состоянии. Например, как показано на рис. 1 Heater (Обогреватель) может перейти из состояния Idle (Простой) в состояние Active (Активация), когда произойдет событие tooCold (слишкомХолодно) с параметром desiredTemp (нужнаяТемпература).


Рис.1. Пример перехода

    Переход состоит из пяти частей:

    Как показано на рис. 2, переход изображается в виде сплошной линии со стрелкой, направленной от исходного состояния к целевому. Переход в себя (self-transition) – это переход, исходное и целевое состояния которого совпадают.


Рис.2. Диаграмма состояний

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

    Событие – это спецификация значимого происшествия, локализованного во времени и пространстве. В контексте автоматов событие – это воздействие, которое может вызвать переход из одного состояния в другое. Как показано на рис. 2, под событиями могут подразумеваться поступление сигнала, вызов, истечение определенного периода времени либо изменение состояния. Сигнал или вызов могут иметь параметры, которые доступны переходу, в том числе выражения защитного условия и действия.

    Допускается существование завершающего перехода (то есть такого, который не имеет инициирующего события). Завершающий переход инициируется неявно, когда исходное состояние завершает свою деятельность, если таковая наблюдается.

    Как показано на рис. 2, защитное условие представлено в виде булева выражение, заключенное в квадратные скобки и помещенное после триггера события. Таким образом, допускается наличие множества переходов из одного исходного состояния, с одним и тем же триггером события, – до тех пор пока условия не перекрываются.

    Защитное условие вычисляется лишь однажды для каждого перехода в момент возникновения события, но оно может вычисляться и повторно, если переход инициируется еще раз. Внутри булева выражения можно задать условия пребывания объекта в том или ином состоянии – например, выражение "Обогреватель в состоянии Простоя" принимает значение "истина", если объект Heater (Обогреватель) находится в состоянии Idle (Простой). Если условие оказывается не соблюденным при его проверке, то событие не повторяется позднее, когда условие станет истинным. Чтобы смоделировать такое поведение, следует использовать событие изменения.

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

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

    Чтобы отметить факт отправки сигнала, можно снабдить имя сигнала префиксом – ключевым словом send.

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

    Вы вправе явно показать объект, которому послан сигнал, используя зависимость со стереотипом send, источником которого является состояние, а целью – объект.

    На следующем шаге рассмотрим расширенные состояния и преходы в UML.




Предыдущий шаг Содержание Следующий шаг