Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uml Book (Rus).doc
Скачиваний:
15
Добавлен:
11.08.2019
Размер:
58.74 Mб
Скачать

Сообщения

Предположим, что есть множество объектов и множество соединяющих эти объекты связей. Если больше ничего не задано, то перед вами статическая модель, которая может быть представлена на диаграмме объектов (см. главу 14). Такие диа­граммы моделируют состояние сообщества объектов в данный момент времени и оказываются полезны для визуализации, специфицирования, конструирования и документирования статической объектной структуры.

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

и вызывают операции (см. главы 4 и 9). Кроме того, на каждом кадре вы можете явно визуализировать текущее состояние и роли отдельных экземпляров (см. главу 13).

Сообщением называется спецификация обмена данными между объектами, при котором передается некая информация в расчете на то, что в ответ последует определенное действие. Получение объектом экземпляра сообщения можно счи­тать экземпляром события.

Действие, являющееся результатом получения сообщения, - это исполняемое предложение, которое образует абстракцию вычислительной процедуры. Дей­ствие может привести к изменению состояния.

UML позволяет моделировать действия нескольких видов:

  • call (вызвать) - вызывает операцию, применяемую к объекту. Объект может послать сообщение самому себе, что приведет к локальному вызову операции;

  • return (возвратить) - возвращает значение вызывающему объекту;

  • send (послать) - посылает объекту сигнал (см. главу 20);

  • create (создать) - создает новый объект;

  • destroy (уничтожить) - удаляет объект. Объект может уничтожить самого ' себя.

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

. Перечисленные виды сообщений можно различить визуально, как показано на рис. 15.3. При этом действия create и destroy визуализируются как стереотипы (см. главу 6). Различие между синхронными и асинхронными действиями наиболее существенно в контексте одновременности (см. главу 22).

Чаще всего встречающийся в моделях вид сообщений - вызов одним объектом операции другого (или своей собственной). Объект не может вызвать произволь­ную операцию. Если, например, объект с из вышеприведенного примера вызывает операцию setltinerary экземпляра класса (см. главы 4 и 9) TicketAgent, то она Должна быть не только определена в классе TicketAgent (другими словами, объявлена либо непосредственно в нем, либо в одном из его предков), но и доступна для объекта с.

Примечание Такие языки программирования, как C++, статически типизированы (хотя и полиморфны), то есть законность вызова проверяется во время компиляции. Но, например, Smalltalk является динамически типизированным языком, то есть до момента выполнения нельзя определить, может ли объект получать сообщение данного типа. Хорошо оформленную модель UML в общем случае можно прове­рить статически с помощью инструментальных средств, так как на этапе моделирования разработчику обычно известно назначе­ние каждой операции.

Когда объект вызывает операцию или посылает сигнал другому объекту, вместе с сообщением можно передать его фактические параметры. Аналогичным образом, когда объект возвращает управление другому объекту, можно смоделировать воз­вращаемое значение.

Примечание Операции допустимо квалифицировать также по классу или интер­фейсу (см. главу 11), в котором они были объявлены. Так, выполнение операции register на экземпляре класса Student полиморфно вы­зывает ту операцию, которая соответствует имени в иерархии данного класса; обращение к Member: : register вызывает опера­цию, определенную в интерфейсе IMember (и реализованную каким-нибудь подходящим классом, также принадлежащим к иерархии класса Student,).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]