Открытая коллекция знаний

OpenU.Ru

Справочник UML. Объектно-ориентированное проектирование.

call event (событие вызова)

Получение события вызова операции, реализованное в виде переходов в конечном автомате.
См. call; signal.

Семантика

Событие вызова - это способ реализации операции, который является альтернативой выполнению процедуры. Если операция определяется классом как событие вызова, то вызов операции в данном случае будет представлять собой событие, которое запускает переход в конечном автомате этого класса. Это позволяет реализовывать операцию более распределенным образом, нежели в виде обычного метода, который всегда выполняет одно и то же. (Впрочем, процедура может иметь оператор выбора (switch/case) на основе состояния объекта, поэтому существенной разницы между двумя этими подходами нет.)
Если операции класса реализованы событиями вызова, то именно они должны запускать переходы в конечном автомате этого класса. Сигнатура у события вызова такая же, как у операции. Имя события вызова - это имя операции, параметры события вызова - параметры операции.
При вызове операции запрашивается конечный автомат целевого объекта, после чего запускается переход, разумеется, если событие вызова соответствует переключающему событию активного перехода (исходящего из активного состояния). После запуска перехода выполняется множество ассоциированных с ним действий. Эти действия могут включать в себя действие return (value), которое возвращает значение вызывающей процедуре.
По окончании перехода управление возвращается к вызывающей процедуре, которая может затем продолжать свою работу. Если же для продолжения деятельности вызывающей процедуре требуется возвращаемое значение, а она его не получила или получила в виде, который не соответствует типу, заявленному в операции, модель построена неверно.
Если вызов получает активный объект, то событие вызова обрабатывается тогда, когда конечный автомат этого объекта находится в покое, иными словами, после завершения его текущей деятельности.

Нотация

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

Пример

На рис. 39 изображен счет, который может быть Locked (Заблокирован) и Unlocked (Разблокирован). Операция deposit (вклад) всегда вносит деньги на счет, независимо от его состояния. Операция withdraw (снимать) снимает со счета все деньги, в том случае, если он разблокирован, и не снимает, если он заблокирован.
Операция withdraw реализуется как событие вызова, которое запускает внутренние переходы в каждом состоянии. При переходе выполняется та или иная последовательность действий, в зависимости от активного состояния. Если система заблокирована, возвращается нулевое значение. Если нет, то возвращается вся сумма денег, имеющаяся на этом счету; сам счет становится равным нулю.
Рис. 39. События вызова
Рис. 39. События вызова

Алфавитный указатель