Сигнал, как объект, может иметь атрибуты, т. е. параметры сигнала. Сигнал может
иметь операции. Одна из них считается определенной по умолчанию. Она имеет
стандартное имя send и параметр, являющейся множеством объектов, которым
отправляется сигнал. Объявлять эту операцию не нужно. Можно объявлять другие
операции, которые служат для доступа к значениям атрибутов (аргументам)
сигнала, но это не обязательно.
В сущности, концепция сигнала в UML принадлежит к числу наиболее
фундаментальных и имеет ясную и строго определенную семантику. Объект,
являющийся отправителем, обращается к классификатору сигнала (вызывает
операцию send), указывая аргументы сигнала (значения атрибутов) и целевое
множество объектов, которым должен быть отправлен сигнал. После этого объект-
отправитель продолжает свою работу — дальнейшее его не касается. Как правило,
целевое множество содержит один элемент, но может не содержать элементов (это
не считается ошибкой) или может содержать много элементов (это называется
широковещательным сигналом). Объекты, которым отправляется сигнал, обязаны
иметь операцию для получения и обработки сигнала. Такая операция имеет
стереотип «signal», ее имя совпадает с именем классификатора сигнала, а имена и
типы параметров совпадают с именами и типами атрибутов сигнала. Операция
получения сигнала не может возвращать результат. Классификатор сигнала создает
новый объект — экземпляр сигнала и отправляет его копии всем объектам
целевого множества, т. е. вызывает в объектах целевого множества операции
приема сигнала с указанными значениями аргументов.
Поскольку сигналы в UML являются классификаторами, они могут участвовать в
отношении обобщения. Сигнал, являющийся подклассом, наследует все атрибуты
(параметры) суперкласса и, может быть, имеет свои собственные. Суперклассом
сигнала не может быть не сигнал. Принцип подстановочности при обобщении
сигналов имеет следующий смысл: если на переходе указано событие сигнала, то
переход возбуждается
Сигналы подходят для описания всех видов взаимодействия объектов — как
синхронных, так и асинхронных, как в монолитных приложениях, так и в
распределенных. Авторы UML отмечают, что обычный вызов операции можно
рассматривать как частный случай посылки сигнала: вызывающий объект
отправляет сигнал вызова (с аргументами) и дожидается ответного сигнала о
завершении выполнения (с возвращаемым значением). Такой подход возможен, но,
на наш взгляд, понятие обычного вызова операции и так уже устоялось и можно
обойтись без его сведения к более общей концепции.
В UML имеется один важный частный случай сигналов — исключения, которые
определяются с помощью стереотипа «exception». Исключения во всем подобны
сигналам — их назначение состоит в том, чтобы подчеркнуть в модели то
обстоятельство, что для реализации должен использоваться встроенный механизм
обработки исключений, который имеется в большинстве современных объектно-
ориентированных систем программирования. В частности, для исключений (равно
как и для сигналов) действует правило "перехвата": исключение, посланное
объекту, обрабатывается
операцией обработки данного исключения, определенной
в ближайшем по иерархии обобщения суперклассе для класса данного объекта.