Диаграмма последовательности в UML¶
Диаграмма последовательности — это разновидность диаграмм взаимодействия в языке моделирования UML, отображающая обмен сообщениями между объектами во времени. Она относится к поведенческим (динамическим) диаграммам и описывает сценарий работы системы как упорядоченную последовательность действий: кто, кому и в каком порядке отправляет сообщения. Основное назначение — визуализация логики взаимодействия компонентов при выполнении отдельного варианта использования.
¶Место в языке UML
Диаграмма последовательности входит в группу диаграмм взаимодействия наряду с диаграммой коммуникации, диаграммой обзора взаимодействия и диаграммой синхронизации. В отличие от диаграммы классов, которая фиксирует статическую структуру, диаграмма последовательности показывает динамику: временной порядок вызовов, возвратов и передачи данных. В спецификации UML она обозначается как Sequence Diagram и применяется как на этапе анализа требований, так и при детальном проектировании.
¶Основные элементы
Графически диаграмма строится из нескольких стандартных нотаций.
- Линия жизни (lifeline) — вертикальная пунктирная линия, обозначающая отдельного участника взаимодействия. Верхний прямоугольник содержит имя объекта и, при необходимости, имя класса в формате «имя: Класс».
- Актор — внешний пользователь или система, инициирующая сценарий; изображается стилизованной фигуркой.
- Сообщение — горизонтальная стрелка между линиями жизни. Различают синхронные вызовы (сплошная стрелка с закрашенным наконечником), асинхронные (открытый наконечник), ответные (пунктирная стрелка) и потерянные/найденные сообщения.
- Активация (полоса активности) — узкий прямоугольник на линии жизни, показывающий период, когда объект выполняет операцию.
- Фрагменты (combined fragments) — рамки с операторами alt, opt, loop, par, критическая секция и другими, задающие ветвления, циклы и параллелизм.
- Ворота и временные ограничения — элементы для указания длительности операций и условий.
¶Чтение диаграммы
Чтение выполняется сверху вниз: время на диаграмме течёт по вертикали. Каждое сообщение имеет порядковый номер, отражающий очерёдность. Совокупность сообщений образует сценарий — один из возможных путей выполнения варианта использования. Ветвления через фрагмент alt описывают альтернативные потоки, а loop — повторяющиеся действия. Возврат управления показывается пунктирной стрелкой от активированного объекта к инициатору.
¶Применение
Диаграммы последовательности используются в следующих областях:
- проектирование программного обеспечения — детализация взаимодействия классов и сервисов;
- документирование API — описание порядка вызовов методов и протоколов обмена;
- анализ бизнес-процессов — моделирование обмена документами между подразделениями;
- телекоммуникации — описание сигнальных протоколов и последовательностей обмена сообщениями;
- встраиваемые системы — фиксация временных диаграмм работы устройств.
В российской практике диаграммы последовательности применяются при разработке автоматизированных систем по ГОСТ 19.701 и в проектах, где требуется согласование технического задания с заказчиком. Их включают в пояснительные записки к эскизному и техническому проекту.
¶Инструменты
Построение диаграмм поддерживают как проприетарные, так и свободные средства: IBM Rational Rose, Enterprise Architect, Visual Paradigm, а также PlantUML, Mermaid и draw.io. В текстовых форматах PlantUML и Mermaid диаграмма описывается кодом, что упрощает хранение и версионирование моделей вместе с исходным кодом проекта. Это делает диаграммы последовательности удобными для интеграции в системы непрерывной интеграции и документацию.
¶Связь с другими диаграммами
Диаграмма последовательности тесно связана с диаграммой классов: линии жизни соответствуют экземплярам классов, а сообщения — их операциям. Она дополняет диаграмму вариантов использования, раскрывая внутреннюю реализацию отдельного сценария. Совместно с диаграммой деятельности она позволяет описать как поток управления, так и распределение ответственности между объектами.
¶Преимущества и ограничения
К достоинствам относят наглядность временного порядка, точное отображение синхронных и асинхронных вызовов, поддержку ветвлений и циклов. Ограничения связаны с масштабируемостью: при большом числе участников диаграмма становится громоздкой, а сложные условия и параллельные потоки трудно читаются без дополнительных пояснений. Поэтому на практике крупные сценарии разбивают на несколько диаграмм, каждая из которых описывает отдельный фрагмент взаимодействия.
¶Пример
Типичный пример — сценарий оформления заказа в интернет-магазине. Актор «Покупатель» отправляет сообщение «оформить заказ» объекту «Корзина», тот обращается к «Складу» для проверки наличия товара, затем к «Платёжной системе» для списания средств и к «Службе доставки» для регистрации отправления. Ответные сообщения возвращают подтверждение или ошибку. Фрагмент alt описывает случаи успешной оплаты и отказа банка, а фрагмент loop — повторную проверку наличия позиций.
¶Обозначения в нотации
| Элемент | Изображение | Назначение |
|---|---|---|
| Линия жизни | Пунктирная вертикаль | Участник взаимодействия |
| Синхронное сообщение | Сплошная стрелка | Вызов с ожиданием ответа |
| Асинхронное сообщение | Открытая стрелка | Вызов без ожидания |
| Ответ | Пунктирная стрелка | Возврат результата |
| Активация | Прямоугольник на линии | Период выполнения |
| alt / opt | Рамка с оператором | Ветвление и условие |
| loop | Рамка с оператором | Цикл |
Источники: спецификация OMG UML, ГОСТ 19.701-90, учебные пособия по объектно-ориентированному анализу и проектированию, документация PlantUML и Mermaid.