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

OpenU.Ru

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

send (отправить)

Объект-отправитель создает экземпляр сигнала и затем отправляет его объекту-получателю с целью передачи ему определенной информации.
Зависимость отправки связывает операцию или метод, отправляющий сигнал (или же класс, в котором содержатся такая операция или метод) с классом, который этот сигнал получает.
См. signal.

Семантика

Отправить - это особая операция, которую может осуществить объект. Она определяет сигнал, который нужно отправить, список аргументов этого сигнала и множество целевых объектов, которые его получат.
Объект отправляет сигнал множеству других объектов - нередко, впрочем, это "множество" содержит всего один объект. С помощью "вещания" можно отправить сообщение вообще всем объектам, однако на практике для большей эффективности это лучше реализовать в виде особого случая. Если множество целевых объектов содержит более одного объекта, то сигнал отправляется одновременно каждому из них. Если целевых объектов нет вообще (пустое множество), то сигнал не отправляется, причем такая ситуация не считается ошибкой.
Создание нового объекта можно рассматривать как отправку сообщения объекту-фабрике, например классу, который создает этот новый экземпляр, а затем передает вновь созданному экземпляру это сообщение в качестве события создания. Таким образом, осуществляется коммуникация между создающим объектом и его "творением" - можно считать, что событие, которое оправляется при создании объекта, идет от создающего объекта к новому, при этом создание этого нового объекта является побочным эффектом такой коммуникации. На рис. 159 с помощью как текстового, так и графического синтаксиса изображено создание нового объекта.
Такую модель можно использовать, даже если в целевом языке программирования (например, C++) не допускается, чтобы классы были представлены как объекты времени выполнения. В этом случае действие создания компилируется (что подразумевает некоторое огpaничение его универсальности, - например, имя класса должно быть только литеральным значением), однако лежащая в основе этого идея остается без изменений.
Зависимость отправки представляет собой стереотип зависимости использования, идущей от отправителя сигнала к классу, который ею получает.

Текстовая нотация

При переходе отправка сигнала имеет свой собственный синтаксис (хотя на самом деле представляет собой всего лишь действие особого рода). В последовательности действий этот синтаксис выглядит следующим образом;
send выражение-для-пункта-назначения.имя-сообщения ( аргументсписок )
Ключевое слово send употреблять необязательно. Вызов и отправка отличаются друг от друга объявлениями имени сообщения. Впрочем, иногда явное указание на их различие может оказаться полезным.
выражение-для-пункта-назначения должно описывать множество объектов (которое может состоять из одного объекта). Сообщение отправляется каждому объекту этого множества.
имя-сообщения представляет собой имя сигнала или операции, которое принимает целевой объект. Его аргументами являются выражения, результирующие значения которых должны быть совместимы с объявленными параметрами события или операции. Различие между сигналом и операцией основывается на том, что объявления сигналов происходят в пакете, а операций - в целевом классе. Таким образом, во внутренней модели насчет этого неясностей быть не должно.

Пример

При помощи курсора этот внутренний переход выбирает объект в окне, а затем отправляет ему сигнал highlight.
right-mouse-dawn (location) [location in window]
/ object := pick-object (location) : send object . Highlight ( )

Нотация диаграммы

Отправку сообщения можно также изобразить при помощи символов диаграммы.
Отправку сообщения от одного конечного автомата другому можно также изобразить в виде пунктирной стрелки, идущей от отправителя к получателю. У стрелки стоит пометка с именем сигнала и выражениями, описывающими аргументы сообщения. Диаграмма состояний должна находиться внутри прямоугольника - символа объекта или класса. При этом изображение диаграмм состояний может явно находиться внутри символа или где-либо еще. Диаграммы состояний служат для описания управления взаимодействующих объектов. При этом взаимодействовать могут различные роли в кооперации или же классы, указывающие в общих чертах, каким образом осуществляется коммуникация между объектами этих классов. На рис. 160 вы видите диаграмму состояний, которая изображает пересылку сигналов между тремя объектами.

Рис. 160. Пересыпка сигналов между объектами
Обратите внимание, что эту нотацию можно также использовать для изображения отправки событий между классами или объектами и на других видах диаграмм.
Символ отправителя (ставится у хвоста стрелки) может представлять собой:
класс
Сообщение отправляется объектом класса и какой-то момент его существования, однако никакие подробности при этом не указываются.
переход
Сообщение отправляется в качестве составляющей действия по запуску перехода (см. рис. 159 и 13.160). Этот вариант презентации является альтернативой текстовому синтаксису обозначения отправки сообщений.
Символ получателя (ставится у наконечника стрелки) может представлять собой:
класс
Сообщение получает объект, при этом внутри него может запуститься переход. В символе класса может находиться диаграмма состояний (см. рис. 160). У объекта-получателя может быть несколько переходов, для которых одно и то же событие будет являться переключающим. Такой вид нотации нельзя использовать, если целевой объект вычисляется динамически. В этом случае нужно употреблять текстовое выражение.
метакласс
Эта нотация используется при моделировании вызова операций с областью действия в масштабе класса, например операции создания нового экземпляра. Получение такого сообщения приведет к созданию экземпляра нового объекта в его исходном (по умолчанию) состоянии. Событие, которое видит получатель, можно использовать для запуска перехода из исходного состояния. Следовательно, оно представляет собой еще один способ передачи информации от создающего объекта к новому объекту.
переход
В этом случае переход должен быть единственным переходом в данном классе, использующим данное событие, или, по крайней мере, единственным переходом, который может быть запущен данной конкретной отправкой сообщения (см. рис. 159). Такую нотацию нельзя использовать, если запускаемый переход зависит от состояния объекта-получателя. В этом случае стрелка должна нести к классу.
Зависимость отправки. Зависимость отправки изображается в виде пунктирной стрелки, идущей от операции или класса, отправляющего сигнал, к классу, который его получает. К стрелке крепится стереотип "send".

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