Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Состояния

Состояние - это ситуация в жизни объекта, на протяжении которой он удовле­творяет некоторому условию, выполняет определенную деятельность или ожида­ет какого-то события. Объект остается в некотором состоянии в течение конечно­го отрезка времени. Например, Обогреватель в доме может находиться в одном из четырех состояний: Ожидание (ждет команды «начать обогревать дом»)

активация (газ подается, но не достигнута нужная температура), Активен (газ ц вентилятор включены), Выключается (газ не подается, но вентилятор еще вклю­чен и удаляет остаточное тепло из системы).

Когда автомат объекта находится в данном состоянии, говорят, что и объект находится в этом состоянии. Например, экземпляр класса Обогреватель может находиться в состоянии Ожидание или Выключается. (Состояние объекта мож­но визуализировать во взаимодействии, см. главу 13.)

Состояние определяют следующие элементы:

  • имя - текстовая строка, которая отличает одно состояние от всех остальных. Имя состояния должно быть уникальным внутри объемлющего пакета;

  • действия при входе/выходе - действия, выполняемые при входе в состояние и выходе из него;

  • внутренние переходы - переходы, обрабатываемые без выхода из состояния;

  • подсостояния - внутри состояния могут существовать подсостояния, как непересекающиеся (активизируемые последовательно), так и параллельные (активные одновременно);

  • отложенные события - список событий, которые не обработаны в этом со­стоянии, а отложены и поставлены в очередь для обработки объектом в неко­тором другом состоянии.

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

Как показано на рис. 21.2, состояние изображается прямоугольником с закруг­ленными углами.

Начальное и конечное состояния. Как видно из рисунка, в автомате объекта могут быть определены два специальных состояния. Во-первых, есть начальное состояние, в котором автомат или подсостояние находятся по умолчанию в исход­ный момент времени. Изображается оно в виде закрашенного кружка. Во-вторых есть конечное состояние, в котором завершается выполнение автомата или объ­емлющего состояния. Оно представлено закрашенным кружком, заключенным в окружность.

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

Переходы

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

Переход определяют пять элементов:

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

  • событие-триггер - событие (см. главу 20), при получении которого объектом, находящимся в исходном состоянии, может сработать переход (при этом долж­но быть выполнено сторожевое условие);

  • сторожевое условие - булевское выражение, которое вычисляется при по­лучении события-триггера. Если значение истинно, то переходу разрешено сработать, если ложно - переход не срабатывает. Если при этом не задано ни­какого другого перехода, инициируемого тем же самым событием, то собы­тие теряется;

  • действие - атомарное вычисление, которое может непосредственно воздей­ствовать на объект, владеющий автоматом, или оказать косвенное воздейст­вие на другие объекты, находящиеся в области видимости;

  • целевое состояние - состояние, которое становится активным после заверше­ния перехода.

Как показано на рис. 20.3, переходы изображаются в виде линии со стрелкой, направленной от исходного к целевому состоянию. Исходное и целевое состояния перехода в себя совпадают.

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

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

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

Примечание Событие-триггер может быть полиморфным. Например, если спе­цифицировано семейство сигналов (см. главу 20), то переход, ини­циируемый событием S, может быть инициирован также и любым потомком S,

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

Сторожевое условие вычисляется ровно один раз для каждого перехода в мо­мент наступления события, но может быть вычислено снова, если переход иници­ируется повторно, В булевское выражение можно включать условия, в которых фигурирует состояние объекта (например, выражение Обогреватель in Ожида­ние истинно, если объект Обогреватель находится в состоянии Ожидание).

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

Действие (см. главу 15) - это атомарное вычисление. К действиям относятся вызовы операций (объекта, который владеет автоматом, а также любых других видимых объектов), создание и уничтожение другого объекта или посылка объек­ту сигнала. Как видно из рис. 21.3, для обозначения посылки сигнала определена специальная нотация - имени сигнала предшествует ключевое слово send.

Действие (Action) всегда атомарно, то есть не может быть прервано другим событием и, следовательно, выполняется до полного завершения. Этим оно отли­чается от деятельности (Activity, см. следующие главы данной части), выполне­ние которой может быть прервано другими событиями.

Примечание Объект, которому посылается сигнал, можно показать явно, если вос­пользоваться зависимостью (см. главы 5 и 10) со стереотипом send, для которой источником является состояние, а целью - объект.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]