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

События вызова

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

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

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

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

операции в своем списке операций). Сигнал, как правило, обрабаты­вается на уровне автомата, а событие вызова - методом. Для пе­рехода от события к сигналу или операции можно воспользоваться инструментальной программой.

События времени и изменения

Событие времени представляет собой истечение промежутка времени. На рис. 20.4 показано, что в UML событие времени моделируется с помощью ключевого слова after (после), за которым следует выражение, вычисляющее некоторый проме­жуток времени. Выражение может быть простым (например, after 2 seconds) или сложным (например, after I ms с момента выхода из состояния Ожида­ние). Если явно не указано противное, то отсчет времени начинается с момента входа в текущее состояние.

С помощью события изменения описывается изменение состояния или выпол­нение некоторого условия. На рис. 20.4 показано, что в UML событие изменения моделируется посредством ключевого слова when, за которым следует булевское выражение. Такое выражение может использоваться для обозначения абсолютно­го момента времени (например, when time=ll: 59) или проверки условия (на­пример, when altitude < 1000).

примечание Хотя событие изменения моделирует условие, проверяемое непре­рывно, обычно, проанализировав ситуацию, можно выявить дис­кретные моменты времени, когда это условие нужно проверять.

Посылка и получение событий

В событиях сигнала и вызова участвуют по крайней мере два объекта: объект, Досылающий сигнал или инициирующий операцию, и объект, которому событие адресовано. Поскольку сигналы по своей природе асинхронны, а асинхронные вы­зовы сами по себе являются сигналами, то семантика событий перекликается с се­мантикой активных и пассивных объектов.

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

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

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

В UML события вызова, которые получает объект, моделируются как опера­ции (см. главу 4) над классом этого объекта. Именованные сигналы, получаемые объектом, моделируются путем перечисления в дополнительном разделе класса, как показано на рис. 20.5.

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

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