Диаграмма коммуникации
Диаграмма коммуникации
Заголовок раздела «Диаграмма коммуникации»Диаграмма коммуникации (communication diagram) — это разновидность диаграммы взаимодействия (interaction diagram). Она описывает, какие участники взаимодействия обмениваются сообщениями и через какие связи это происходит.
По смыслу диаграмма коммуникации близка к диаграмме последовательности (sequence diagram): обе показывают одно взаимодействие. Разница в акценте. Диаграмма последовательности хорошо показывает порядок сообщений во времени, а диаграмма коммуникации лучше показывает сеть участников и связи, по которым эти сообщения передаются.
Если диаграмма последовательности отвечает на вопрос “в каком порядке участники обмениваются сообщениями?”, то диаграмма коммуникации отвечает на вопрос “кто с кем связан и какие сообщения проходят по этим связям?”.
Основные элементы
Заголовок раздела «Основные элементы»На диаграмме коммуникации обычно используются следующие элементы:
- линия жизни (lifeline);
- сообщение (message);
- соединитель или связь между линиями жизни (connector);
- номер последовательности сообщения (sequence number);
- сторожевое условие (guard);
- итерация сообщения (iteration);
- аргументы и возвращаемые значения сообщения.
Линия жизни (lifeline) представляет участника взаимодействия. Это может быть объект, экземпляр класса, компонент, актор или другая сущность, участвующая в сценарии. На диаграмме коммуникации линия жизни обычно показывается как прямоугольник с именем, например orderService: OrderService.
Сообщение (message) показывает передачу управления, вызов операции, отправку сигнала или другой акт взаимодействия между линиями жизни. Сообщение размещается рядом с соединителем и направляется стрелкой.
Соединитель (connector) показывает, что между участниками есть структурная возможность взаимодействия. В простой учебной модели его можно читать как “эти два участника могут обмениваться сообщениями в рамках данного сценария”.
Нумерация сообщений
Заголовок раздела «Нумерация сообщений»Поскольку на диаграмме коммуникации нет вертикальной оси времени, порядок сообщений задаётся нумерацией.
Пример:
1: createOrder(data)2: validate(order)3: save(order)4: notify(customer)Вложенные вызовы можно показывать составной нумерацией:
1: checkout()1.1: validateCart()1.2: reserveItems()1.3: createPayment()Такая запись показывает, что сообщения 1.1, 1.2 и 1.3 выполняются внутри более крупного шага 1.
Условия и повторения
Заголовок раздела «Условия и повторения»Как и на других диаграммах взаимодействия, сообщение может иметь условие. Условие записывается как сторожевое условие (guard), обычно в квадратных скобках:
2 [заказ корректен]: save(order)Повторение можно показать как итерацию (iteration). В учебной записи достаточно явно указать смысл повторения:
3 *[для каждой позиции]: reserve(item)Здесь важно не перегружать диаграмму алгоритмическими деталями. Если сценарий содержит сложные ветвления, циклы и параллельность, чаще удобнее использовать диаграмму последовательности или диаграмму деятельности.
Когда использовать
Заголовок раздела «Когда использовать»Диаграмма коммуникации полезна, когда важнее показать структуру взаимодействия, чем точную временную шкалу.
Хорошие случаи использования:
- нужно показать, какие объекты участвуют в реализации сценария;
- нужно подчеркнуть связи между участниками взаимодействия;
- нужно проверить, не появился ли лишний посредник или циклическая коммуникация;
- нужно компактно показать простой сценарий без сложных combined fragments;
- нужно связать сценарий с технической диаграммой классов.
Для сложных сценариев с альтернативами, циклами и параллельностью обычно лучше подходит диаграмма последовательности.
Связь с другими диаграммами
Заголовок раздела «Связь с другими диаграммами»Диаграмма коммуникации должна быть согласована с диаграммой классов. Если линия жизни представляет экземпляр класса, такой класс должен существовать в технической модели. Если сообщение выглядит как вызов операции, соответствующая операция должна быть описана у принимающего класса или хотя бы быть обоснована проектным решением.
С диаграммой последовательности связь ещё прямее: один и тот же сценарий можно показать обоими способами. В простых случаях диаграмму коммуникации можно рассматривать как альтернативное представление диаграммы последовательности.
Типичные ошибки
Заголовок раздела «Типичные ошибки»Частые ошибки при построении диаграммы коммуникации:
- использовать её как обычную схему компонентов без сообщений;
- не нумеровать сообщения, из-за чего теряется порядок взаимодействия;
- показывать сообщения между участниками, которые никак не связаны в модели;
- смешивать участников предметной области и технические классы без объяснения уровня модели;
- перегружать диаграмму сложными условиями, которые лучше вынести на диаграмму деятельности или последовательности;
- считать соединитель произвольной линией, хотя он должен отражать возможность взаимодействия между линиями жизни.