На этом шаге рассмотрим диаграммы коммуникации.
Диаграммы коммуникации описывают организацию объектов, участвующих во взаимодействии. Как показывает рис. 1, диаграмма коммуникации формируется начиная с размещения объектов, участвующих во взаимодействии, в вершинах графов.
Рис.1. Диаграмма коммуникации
Далее в виде дуг графа изображаются ссылки, которые соединяют эти объекты. Связям могут быть присвоены имена ролей, идентифицирующие их. И наконец, связи дополняются сообщениями, которыми обмениваются объекты. Все это дает читателю четкое визуальное представление потока управления в контексте структурной организации взаимодействующих объектов.
В отличие от диаграммы последовательности, на диаграмме коммуникации не продемонстрированы явно линии жизни объектов, хотя можно показать сообщения create и destroy. К тому же явно не отображается фокус управления, хотя последовательный номер каждого сообщения может указывать уровень вложенности.
Диаграммы коммуникации обладают двумя признаками, которые отличают их от диаграмм последовательности. Во-первых, здесь отмечен путь (path), который отображается соответственно ассоциации. Впрочем, можно также показать его в соответствии с локальными переменными, параметрами, глобальными переменными и обращениями к самому себе. Путь представляет источник информации для объекта.
Во-вторых, здесь имеется порядковый номер. Чтобы указать порядок сообщения во времени, вы предваряете его номером начиная с 1 и далее – в арифметической прогрессии для каждого нового сообщения в потоке управления (2, 3, ...). Чтобы показать вложенность, применяется десятичная система классификации Дьюи (1 – первое сообщение, которое содержит в себе сообщения 1.1, 1.2 и т.д.). Количество уровней вложения не ограничивается. Кроме того, следует отметить, что на линии одной и той же ссылки можно показать множество сообщений (возможно, пересылаемых в разных направлениях), и каждое будет иметь уникальный порядковый номер.
Большую часть времени вам придется моделировать прямые последовательные потоки управления. Но существует и возможность моделирования более сложных потоков, включающих в себя итерации и ветвление. Итерация (iteration) представляет собой повторяющуюся последовательность сообщений. Чтобы смоделировать ее, надо снабдить порядковый номер выражением итерации в формате *[i := 1..n] (или просто *, если нужно показать наличие итерации, не вдаваясь в детали). Итерация говорит о том, что сообщение и все его вложения должны повториться в соответствии с заданным выражением. Аналогичным образом условие представляет сообщение, исполнение которого участвует в вычислении булева выражения. Чтобы смоделировать условие, порядковый номер предваряют условным выражением, таким как, например, [x > 0]. Альтернативный путь ветвления (branching) имеет тот же порядковый номер, но каждый путь должен уникально отделяться неперекрывающимися условиями.
Как для итераций, так и для ветвления UML не регламентирует формат выражения внутри скобок; вы можете использовать псевдокод либо синтаксис определенного языка программирования.
На диаграммах последовательности связи между объектами не показываются явно. Также на них не отображаются порядковые номера сообщений; они заданы неявно физическим упорядочением сообщений на диаграмме сверху вниз. Однако допускается отображение итераций и ветвления с использованием управляющих структур диаграмм последовательности.
Поскольку и диаграммы последовательности, и диаграммы коммуникации наследуют одну и ту же информацию метамодели UML, они семантически эквивалентны. В результате вы можете взять одну диаграмму и преобразовать ее в другую без каких бы то ни было потерь информации, как можно заметить по рис. 1 и 1 (шаг 137), которые семантически эквивалентны. Однако это не значит, что обе диаграммы явно визуализируют одну и ту же информацию. Например, диаграмма коммуникации на рис. 1 показывает, как связаны объекты (обратите внимание на аннотации {local} и {global}), а соответствующая диаграмма последовательности (рис. 1 шаг 137) – нет. Зато диаграмма последовательности показывает возврат сообщения (отметим возвращаемое значение committed), а соответствующая диаграмма коммуникации – нет. В основе обеих диаграмм лежит одна и та же модель, но представлена она несколько по-разному. Поскольку модель, описанная в одном формате, не содержит информацию, которая присутствует в другом, можно сказать, что диаграммы последовательности и коммуникации все же создают две принципиально разные модели, хотя и используют одну общую в качестве базовой.
На следующем шаге рассмотрим общее применение диаграмм взаимодействия.