экземпляры ассоциации, т. е. связи. Но если связь связывает роли классификаторов,
т. е. слоты объектов, то она сама является слотом — слотом связи, который
называется ролью ассоциации. На диаграмме роль ассоциации синтаксически
неотличима от связи (разве что имя ассоциации не подчеркнуто, если оно
отображается).
125
ЗАМЕЧАНИЕ
У связи, в отличии от объекта, нет личного имени. Ее индивидуальность
определяется набором объектов, которые она связывает.
Диаграмма кооперации (равно как и диаграммы последовательности) описывает
поведение как взаимодействие, т. е. как протокол обмена сообщений между
объектами. Один и тот же объект может участвовать в различных взаимодействиях,
играя в них различные роли. Таким образом, взаимодействие всегда происходит в
определенном контексте, который определяется множеством участвующих во
взаимодействии объектов и связей. Несколько утрируя, можно сказать, что
диаграмма кооперации, в которой не указаны сообщения (и которая, тем самым,
синтаксически неотличима от диаграммы объектов) является контекстом
взаимодействия.
Обычно контекст выбирается с расчетом на то, чтобы описать взаимодействие,
имеющее определенную цель, скажем, выполнить сценарий варианта
использования или операцию (это наиболее типичные примеры применения
диаграмм кооперации). Варьируя контекстом (добавляя и убирая роли
классификаторов и ассоциаций), можно скрывать или показывать детали
взаимодействия, описывая поведение на разных уровнях абстракции. Чтобы
пояснить данный тезис, нужно вернуться к понятию номера сообщения,
упомянутому в разд. 4.4.1 и объяснить его детально.
Номер сообщения определяется в соответствии с положением сообщения в
последовательности сообщений данного взаимодействия. Если во взаимодействии
используются только простые или асинхронные сообщения (см. табл. 4.5), то
сообщения просто нумеруются, обычно подряд: 1, 2, 3 и т. д. Сообщения с
меньшими номерами предшествуют сообщениям с большими номерами. Если же
используются вложенные потоки управления, т. е. сообщения типа вызова
операции (см. табл. 4.5), то сообщения нумеруются более сложным образом.
Допустим сообщение вызова операции имеет номер x. Тогда сообщения,
отправляемые при выполнении этой операции будут иметь номера x.1, x.2 x.3 и т. д.
Первое сообщение, отправляемое при выполнении вызова x.1 будет иметь номер
x.1.1 и т. д. Количество точек в номер соответствует уровню вложенности потока
управления, т. е. глубине стека вызовов
(см. разд. 4.4.2). Таким образом, например,
сообщение с номером 1.2 предшествует сообщению с номером 1.2.3, а сообщение
2.1, напротив, следует за сообщением 1.2.3. Если первым во взаимодействии
является сообщение вызова, то его номер часто не указывают (такое сообщение как
бы имеет неявный номер 0), чтобы не загромождать диаграмму повторяющимся
всюду номером первого сообщения и ненужной точкой.
Такая иерархическая десятичная нумерация удобна, поскольку задает
относительный порядок сообщений на данном уровне вложенности вызовов и
125
Беда в том, что инструменты забывают подчеркивать имя связи.