15.6. Отправка сигналов и прием событий 345
его контекстомвладельцем, и предлагает их на своем единственном
выходном ребре. Семантика его следующая.
• Действие приема события запускается входящим ребром управле
ния; если входящих ребер нет, оно запускается при вызове деятель
ностивладельца.
• Действие ожидает получения события определенного типа. Это со
бытие называют триггером (trigger).
• Когда действие получает триггер события соответствующего типа,
оно выдает маркер, описывающий событие. Если событие было сиг
налом, маркер является сигналом.
• Действие продолжает принимать события до тех пор, пока выпол
няется деятельность.
На рис. 15.8 показана деятельность Проверить кредитную карту, отправ
ляющая события AuthorizationRequestEvents и принимающая события
AuthorizationEvents.
Ниже приведен поэтапный анализ деятельности Проверить кредитную
карту.
1. Деятельность Проверить кредитную карту начинается, когда получает
входной параметр CardDetails. Затем она предлагает пользователю
ввести PINкод.
2. Действие AuthorizationRequestEvent начинает выполняться, как толь
ко на его входные ребра поступают объекты PIN и CardDetails (инфор
мация карты). Используя эти входные параметры, оно создает сиг
нал AuthorizationRequestEvent и посылает его. Действия отправки сиг
налов изображаются в виде выпуклых пятиугольников, как пока
зано на рисунке.
3. Сигналы отправляются асинхронно, и поток управления незамед
лительно переходит к действию приема события AuthorizationEvent,
которое изображено в виде вогнутого пятиугольника. Это действие
ожидает получения сигнала AuthorizationEvent.
4. Получив этот сигнал, поток переходит в узел принятия решения.
Если AuthorizationEvent.isAuthorized истинно, вызывается действие Ав
торизован, в противном случае выполняется действие Не авторизован.
Рассмотрим другой пример действий, принимающих события. На
рис. 15.9 моделируется деятельность Показать новости, имеющая два
принимающих события действия, которые инициируются автомати
чески при запуске деятельности. Когда действие приема события News
Event получает событие NewsEvent (событие новостей), оно передается
действию Отобразить новости. После этого поток управления переходит
в конечный узел потока, и этот конкретный поток завершается. Одна
ко выполнение деятельности продолжается, и оба действия приема со
бытий продолжают ожидать события. Когда деятельность получает со
бытие TerminateEvent (событие завершения), управление переходит в ко