← Назад к вопросам

Из чего состоит диаграмма последовательности?

2.0 Middle🔥 61 комментариев
#Нотации и диаграммы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Диаграмма последовательности (Sequence Diagram)

Диаграмма последовательности — это один из ключевых UML диаграмм, который показывает взаимодействие между объектами системы во времени. Она отображает, в каком порядке объекты обмениваются сообщениями.

Основные компоненты диаграммы последовательности

1. Объекты (Actors/Objects)

  • Представлены в виде прямоугольников в верхней части диаграммы
  • Содержат название объекта/роли: "ИмяОбъекта : ТипОбъекта"
  • Примеры:
    • User : Пользователь
    • PaymentService : Сервис оплаты
    • Database : База данных
    • ExternalAPI : Внешний API
  • Два типа: Actor (внешние пользователи, изображаются фигуркой) и Object (объекты системы, прямоугольники)

2. Линии жизни (Lifelines)

  • Вертикальные пунктирные линии, спускающиеся вниз от каждого объекта
  • Показывают временную продолжительность существования объекта на диаграмме
  • Если линия жизни заканчивается крестиком (X), объект уничтожен
  • Помогает понять, как долго объект активен в процессе

3. Сообщения (Messages)

  • Стрелки между линиями жизни, которые показывают вызовы методов и взаимодействие
  • Типы сообщений:
    • Синхронное сообщение (полная стрелка →): отправитель ждёт ответ
    - Пример: User → PaymentService.processPayment()
  • Асинхронное сообщение (открытая стрелка →): отправитель не ждёт ответа
    - Пример: PaymentService → NotificationService.sendEmail()
  • Возвращаемое сообщение (пунктирная стрелка ←): возврат значения
    - Пример: PaymentService ← Database.checkBalance() [success]
  • Самовызов (стрелка, начинающаяся и заканчивающаяся на одной объекте): рекурсивный вызов

4. Активационные ящики (Activation Boxes)

  • Тонкие белые прямоугольники на линии жизни
  • Показывают, когда объект активен (выполняет операцию)
  • Начинаются, когда объект получает сообщение
  • Заканчиваются, когда операция завершена
  • Помогает визуализировать параллелизм и длительность операций

5. Фрагменты взаимодействия (Interaction Fragments)

  • Прямоугольники с операторами для управления логикой:
    • alt (alternative): условный выбор, как if-else
    - Пример: [баланс >= сумма] выполнить платёж, [иначе] отклонить
  • opt (optional): опциональное выполнение, как if
    - Пример: [если пользователь согласен] отправить СМС
  • loop: повторение, как цикл
    - Пример: [для каждой транзакции] обновить статус
  • par (parallel): параллельные операции
    - Пример: одновременно отправить email и уведомление
  • seq (strict sequence): строгая последовательность
  • neg (negative): неправильное поведение

6. Примечания и ограничения (Notes & Constraints)

  • Текстовые комментарии в скобках { }
  • Уточняют сообщения, добавляют контекст
  • Пример: {должна быть < 1 сек}
  • Условия могут быть записаны в скобках [ ]: "[статус = активный]"

7. Метки сообщений (Message Labels)

  • Текст на стрелке сообщения
  • Формат: "имя_метода(параметры) [условие] [номер последовательности] / возвращаемое_значение"
  • Примеры:
    • "1: authenticate(username, password)"
    • "2: validateCard(cardNumber) [encrypted]"
    • "3: processTransaction(amount) / transactionId"

Пример диаграммы последовательности: Процесс оплаты

User          PaymentService    PaymentGateway    Database      EmailService
 |                 |                  |               |               |
 |--- 1: initiatePayment() --→        |               |               |
 |                 |                  |               |               |
 |              {activation}          |               |               |
 |                 |--- 2: validateCard() --→        |               |
 |                 |                  |               |               |
 |                 |          {activation}           |               |
 |                 |← 3: cardValid ←←←               |               |
 |                 |                  |               |               |
 |                 |--- 4: checkBalance() --------→  |               |
 |                 |                  |               {activation}   |
 |                 |← 5: balance ←←←←←←←←←←←←←←   |               |
 |                 |                  |               |               |
 |         [balance >= amount]        |               |               |
 |                 |--- 6: charge(cardNumber, amount) →|               |
 |                 |                  |               |               |
 |                 |          {waiting}              |               |
 |                 |← 7: chargeSuccess ←            |               |
 |                 |                  |               |               |
 |← 8: paymentSuccess ←                |               |               |
 |                 |                  |               |               |
 |                 |--- 9: sendReceipt(email) -----────────→        |
 |                 |                  |               |               {activation}
 |                 |                  |               |               |

Лучшие практики создания диаграмм последовательности

  • Одна сценарий = одна диаграмма: не смешивай разные пути выполнения
  • Нумеруй сообщения: помогает следить за порядком
  • Используй фрагменты для условной логики: alt, opt, loop делают диаграмму понятнее
  • Правильная вертикальная ориентация: время течёт сверху вниз
  • Сокращай сложность: если диаграмма более 20 сообщений, разбей на несколько
  • Согласованность: используй единообразные названия методов
  • Документирование: добавляй примечания для нестандартных ситуаций