Диаграмма кооперации прежде всего отображает структуру взаимодействия и содержит следующие элементы:
- экземпляры актеров и классов, участвующих в реализации варианта использования;
- ассоциации между экземплярами актеров и классов;
- сообщения, передаваемые между экземплярами актеров и классов.
На диаграмме эти элементы отображаются стандартно (экземпляр актера – человечком, экземпляр класса (объект) – прямоугольником или графическим стереотипом класса анализа). В то же время следует помнить, что экземпляр – это конкретная реализация соответствующей сущности (актера, класса, узла и т. д.). Чтобы учесть этот нюанс на диаграммах, имя экземпляра подчеркивается и может отображаться в следующих вариантах:
- Имя объекта : Имя класса (например, Вася : Программист);
- : Имя класса (например, : Программист) – анонимный объект;
- Имя объекта (например, Вася) – предполагается, что имя класса известно;
- Имя объекта : (например, Вася :) – объект-сирота. Считается, что имя класса неизвестно.
Для объектов, кроме имени, могут указываться также некоторые важные для данной кооперации атрибуты и их значения.
Взаимодействие между экземплярами актеров и объектами моделируется посредством сообщений, отображаемых над ассоциациями. Сообщение (англ. message) – это спецификация факта передачи информации между сущностями с ожиданием выполнения определенных действий со стороны принимающей сущности. Сущность, отправляющую сообщение, называют клиентом, а принимающую – сервером. Таким образом, сообщения не только передают некоторую информацию, но и требуют или предполагают выполнения сервером определенных действий или передачу (возврат) клиенту необходимой информации. Если принимающей сообщение сущностью является объект, то оно представляет собой операцию (метод) объекта-сервера. Прием сообщения обычно трактуется, как возникновение события на сервере.
Сообщения изображаются стрелкой с обязательным указанием направления (остриё стрелки указывает на сервер) и его спецификации.
Сообщения могут быть следующих видов:
- – синхронное сообщение (передача управления). Клиент посылает сообщение серверу и ждет, пока тот примет и обработает сообщение. Как правило, в кооперации один объект передает синхронное сообщение второму, второй – третьему и т. д., образуя вложенный поток сообщений. В любом случае клиент, инициирующий поток сообщений, должен дождаться завершения вложенного потока, т. е. возврата управления. Это самый распространенный тип сообщений;
- – асинхронное сообщение. Клиент посылает сообщение серверу и, не дожидаясь ответа, продолжает выполнять свою работу дальше;
- – возвращающее сообщение (возврат управления), обозначающее возврат значения или управления от сервера обратно клиенту. Стрелки этого вида зачастую отсутствуют на диаграммах кооперации, поскольку неявно предполагается их существование после окончания процесса выполнения операции.
В отдельных случаях объект может посылать сообщения самому себе (вызывать собственные методы и действия), инициируя так называемые рефлексивные сообщения.
Спецификация сообщения может указываться в двух форматах:
- предшествующие сообщения / [сторожевое условие] номер сообщения : стереотип;
- предшествующие сообщения / [сторожевое условие] номер сообщения : переменная := имя сообщения (список аргументов)
Предшествующие сообщения (их номера или идентификаторы) записываются через запятые и указывают, что данное сообщение не может быть передано, пока не будут посланы все предшествующие сообщения своим адресатам.
Сторожевое условие – обычное булевское выражение, означающее возможность посылки сообщения. Используется для ветвления потока сообщений.
Порядковый номер указывает на последовательность посылки сообщений. Например, {1, 2, 3, 3.1, 3.2, 3.3, 4, 5}. Сообщения с номерами {1, 2, 3, 4, 5} посылаются объектом, инициализирующим взаимодействие, а сообщения {3.1, 3.2, 3.3} – другим объектом, после получения им сообщения с номером 3.
В UML предусмотрены некоторые стандартные действия, выполняемые в ответ на получение соответствующего сообщения. Они могут быть явно указаны на диаграмме в виде стереотипа рядом с сообщением, к которому они относятся. Стандартными стереотипами, определенными в UML, являются следующие:
- «call» (англ. – вызвать) – синхронное сообщение, требующее выполнения операции принимающего объекта;
- «create» (англ. – создать) – синхронное сообщение, требующее создания объекта;
- «destroy» (англ. – уничтожить) – синхронное сообщение с требованием уничтожить соответствующий объект;
- «return» (англ. – возвратить) – возвращающее сообщение.
Переменная (атрибут), которая будет содержать значение, возвращаемое в результате обработки сообщения.
Имя сообщения (обязательный параметр) – имя вызываемой операции объекта-получателя.
Список аргументов – список аргументов, разделенных запятыми и передаваемых для выполнения операции.
Порядковый номер, а также стереотип или имя сообщения, являются обязательными параметрами спецификации.
Примеры сообщений:
- 1, 2, 3.2 / 5 : звук(частота) – сообщение с номером 5 должно посылаться при условии предшествующей посылки сообщений с номерами 1, 2, 3.2 и требует подачи звукового сигнала с заданной частотой;
- [x = 0] 5 : ошибка(‘деление на ноль’) – сообщение с номером 5 должно посылаться при условии x = 0 и требует обработки соответствующей ошибки;
- 5 : «create» – сообщение, предписывающее создание объекта;