Шаг 170.
Унифицированный язык моделирования UML.
Передача и получение событий

    На этом шаге рассмотрим передачу и получение событий в UML.

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

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

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

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

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

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

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


Рис.1. Сигналы и активные классы

    Точно так же можно присоединить именованные сигналы к интерфейсу. В любом случае имена сигналов, перечисленные в дополнительном разделе, являются не объявлениями, а лишь указаниями на то, что сигнал используется.

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




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