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

В чем разница между Optional и Alt в Sequence?

2.2 Middle🔥 181 комментариев
#Диаграммы и моделирование

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

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

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

Optional vs Alt: фрагменты в Sequence диаграммах

Это две разные конструкции в UML Sequence диаграммах, которые показывают условное поведение системы. Обе используются для описания ветвлений логики, но применяются в разных ситуациях.

Sequence диаграмма показывает, в каком порядке компоненты системы взаимодействуют друг с другом и какие сообщения они обмениваются.

OPTIONAL — условный блок (ноль или один раз)

Определение

Optional — это блок в sequence диаграмме, который может либо выполниться, либо не выполниться. Это как IF без ELSE.

Логика

"Optional блок" = "Если условие истинно, выполни действие. Если ложь — пропусти эту часть."

Это либо ВСЕ действия в блоке выполнятся, либо вообще ничего не произойдет.

Визуальное представление

┌──────────────────────────────┐
│ opt [условие]                │
│                              │
│ Клиент -> Сервер: запрос    │
│ Сервер -> БД: SELECT         │
│ БД -> Сервер: результаты     │
│ Сервер -> Клиент: ответ      │
│                              │
└──────────────────────────────┘

Если условие истинно — выполнится вся цепочка (4 операции)
Если условие ложь — ничего не произойдет

Практические примеры Optional

Пример 1: Проверка прав доступа

opt [user.is_admin]
  User -> System: Удалить пользователя
  System -> DB: DELETE FROM users
  DB -> System: Confirmed
  System -> User: Операция выполнена

Если пользователь админ — удаление выполнится. Если нет — ничего не произойдет (система просто не выполнит эту часть).

Пример 2: Отправка уведомления

opt [email_notification_enabled]
  System -> EmailService: Отправить письмо
  EmailService -> SMTP: Отправить через SMTP
  SMTP -> EmailService: OK
  EmailService -> System: Email sent

Если включены уведомления — письмо отправится. Если пользователь отключил уведомления — ничего не произойдет.

Когда использовать Optional

✓ Когда есть опция, которая может быть включена или отключена ✓ Когда действие выполняется только при определенном условии ✓ Когда отсутствие действия — это нормально

ALT — выбор между вариантами (один из нескольких)

Определение

Alt (альтернатива) — это блок, который содержит несколько возможных путей, и выполнится ровно один из них в зависимости от условия. Это как IF-ELSE-IF.

Логика

"Alt блок" = "Если условие1, выполни вариант1. Иначе, если условие2, выполни вариант2. Иначе выполни вариант3."

Одна и только одна ветка выполнится всегда. Ветка пропущена быть не может.

Визуальное представление

┌──────────────────────────────┐
│ alt                          │
├──────────────────────────────┤
│ [баланс >= сумма платежа]    │
│ Клиент -> Банк: Снять деньги │
│ Банк -> Клиент: Успешно      │
├──────────────────────────────┤
│ [else]                       │
│ Клиент -> Банк: Запрос       │
│ Банк -> Клиент: Недостаточно │
│ Клиент -> Система: Ошибка    │
└──────────────────────────────┘

Всегда произойдет ЧТО-ЛИБО:
Либо успешный платеж (вариант 1)
Либо ошибка (вариант 2)
Один из двух обязательно выполнится

Практические примеры Alt

Пример 1: Аутентификация пользователя

alt [пароль верный]
  User -> Auth: Login
  Auth -> DB: SELECT user
  DB -> Auth: User found
  Auth -> User: Успешная авторизация

alt [else]
  User -> Auth: Login
  Auth -> DB: SELECT user
  DB -> Auth: NOT found
  Auth -> User: Неверные креденшалы

Всегда произойдет что-либо: либо успешная авторизация, либо ошибка. Третьего не дано.

Пример 2: Обработка платежа

alt [status == "pending"]
  System -> PaymentGateway: Проверить статус
  PaymentGateway -> System: Processing
  System -> User: Платеж обрабатывается

alt [status == "completed"]
  System -> User: Платеж успешен
  System -> DB: Обновить заказ

alt [else]
  System -> User: Платеж отклонен
  System -> DB: Отметить как failed

Одно из трех состояний обязательно произойдет.

Когда использовать Alt

✓ Когда есть несколько взаимоисключающих вариантов ✓ Когда система ВСЕГДА должна выбрать один из путей ✓ Когда нужно показать разные сценарии (успех/ошибка) ✓ Когда отсутствие выполнения любого варианта невозможно

Таблица различий

ХарактеристикаOPTIONALALT
Что этоУсловное действиеВыбор между вариантами
Количество путейОдин путь + пропускДва и более путей
Всегда ли что-то происходитНЕТ (может быть пропуск)ДА (один из путей выполнится)
ЛогикаIF (условие) { ... }IF-ELSE / IF-ELSE-IF
Синтаксисopt [условие]alt [условие1] / alt [условие2]
Примерopt [есть скидка] применить скидкуalt [платеж одобрен] vs alt [платеж отклонен]
РезультатAction или NothingAction1 или Action2 или... ActionN

Практический пример: E-commerce checkout

Сценарий: Оформление заказа с опциями

┌────────────────────────────────────┐
│ opt [customer_has_promo_code]      │
│ Customer -> System: Применить код  │
│ System -> DB: Проверить код        │
│ DB -> System: Код верен, скидка X% │
│ System -> Customer: Скидка 15%     │
└────────────────────────────────────┘

┌────────────────────────────────────┐
│ alt [payment_method == "card"]     │
├────────────────────────────────────┤
│ Customer -> System: Card details    │
│ System -> PaymentGateway: Process   │
│ PaymentGateway -> System: OK        │
├────────────────────────────────────┤
│ alt [payment_method == "wallet"]   │
├────────────────────────────────────┤
│ Customer -> System: Wallet pay      │
│ System -> Wallet: Withdraw          │
│ Wallet -> System: OK                │
└────────────────────────────────────┘
  1. Optional: Применить скидку — либо произойдет, либо нет
  2. Alt: Способ оплаты — либо карта, либо кошелек (что-то обязательно выберется)

Почему это важно для BA

Точное описание логики — система понимает, какие сценарии возможны ✓ Предотвращение ошибок — разработчик видит все возможные пути выполнения ✓ Тестирование — QA знает, какие сценарии нужно тестировать ✓ Документирование — новый сотрудник быстро разберется, как работает система

Запомни просто

OPTIONAL = "Может быть или не быть" = IF (без ELSE) ALT = "Один из нескольких вариантов" = IF-ELSE / switch-case

Если сомневаешься: спроси себя

  • "Может ли система пропустить это действие совсем?" → OPTIONAL
  • "Всегда ли произойдет что-то, но может быть разные варианты?" → ALT