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

Приведи пример include в UML

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

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

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

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

Include в UML диаграммах: примеры и объяснение

Include — это один из ключевых способов представить повторно используемое поведение в Use Case диаграммах. Разберу с примерами.

Основное определение

Include — это отношение, которое показывает, что один use case обязательно включает другой use case как часть своего выполнения.

Это похоже на вызов функции:

Порядок выполнения:
  Use Case A
    → вызывает Use Case B (обязательно)
    → продолжает свою работу

Пример 1: Система интернет-магазина

Actors: Customer, System

Use Cases:
- Оформить заказ (main)
  ├── <<include>> Проверить наличие товара
  ├── <<include>> Валидировать адрес доставки
  └── <<include>> Обработать платёж

- Проверить наличие товара (included)
- Валидировать адрес доставки (included)
- Обработать платёж (included)

Диаграмма:

            ┌─────────────┐
            │  Customer   │
            └──────┬──────┘
                   │
          ┌────────▼────────┐
          │ Оформить заказ  │
          └────────┬────────┘
                   │
         ┌─────────┼─────────┐
         │         │         │
    <<include>>  <<include>> <<include>>
         │         │         │
    ┌────▼──┐ ┌────▼──────┐ ┌────▼──────┐
    │Проверка│ │Валидация  │ │Обработка  │
    │товара  │ │адреса     │ │платежа    │
    └────────┘ └───────────┘ └───────────┘

Описание сценария:

When Customer выбирает "Оформить заказ":

  1. Система обязательно проверяет наличие товара
    • Если товара нет → ошибка
  2. Система обязательно валидирует адрес доставки
    • Если адрес некорректен → ошибка
  3. Система обязательно обрабатывает платёж
    • Если платёж не прошёл → заказ отменяется

Эти три use case ВСЕГДА выполняются при оформлении заказа.

Пример 2: Система аутентификации

Use Cases:
- Вход в систему (main)
  ├── <<include>> Проверить email/пароль
  └── <<include>> Двухфакторная аутентификация (если включена)

- Регистрация (main)
  ├── <<include>> Валидировать данные
  ├── <<include>> Отправить email подтверждение
  └── <<include>> Проверить подтверждение

- Проверить email/пароль (included)
- Двухфакторная аутентификация (included)
- Валидировать данные (included)
- Отправить email подтверждение (included)
- Проверить подтверждение (included)

Важный момент: При входе двухфакторная аутентификация не всегда требуется. Это должно быть частью включённого use case, но сам «Вход в систему» может её пропустить.

Если 2FA опциональна, используй <<extend>> вместо <<include>>!

Пример 3: Система управления проектами

- Создать задачу (main)
  ├── <<include>> Выбрать проект
  ├── <<include>> Назначить исполнителя
  ├── <<include>> Установить приоритет
  └── <<include>> Отправить уведомление

- Отредактировать задачу (main)
  ├── <<include>> Валидировать изменения
  └── <<include>> Отправить уведомление об изменениях

- Закрыть задачу (main)
  ├── <<include>> Проверить все подзадачи закрыты
  ├── <<include>> Отправить отчёт
  └── <<include>> Обновить статистику проекта

Include vs Extend: отличие

АспектIncludeExtend
ОбязательностьОбязательноОпционально
ВызовA всегда вызывает BB может расширить A
ПримерПлатёж → Проверка 2FAВход → Восстановление пароля (если нужно)
Направление стрелки→ с меткой [condition]

Include: "У нас ВСЕГДА есть этот шаг" Extend: "Если выполнены условия, то добавляем этот шаг"

Пример с Extend: когда поддержка может быть нужна

- Оформить заказ (main)
  ├── <<include>> Оплатить
  └── <<extend>> Связаться с поддержкой [если сомнения]

- Связаться с поддержкой (included опционально)

Здесь контакт с поддержкой опционален (extend), а оплата обязательна (include).

Пример 4: Банковская система

Actors: Customer, Bank System

- Перевод денег (main)
  ├── <<include>> Проверить баланс
  ├── <<include>> Валидировать счёт получателя
  ├── <<include>> Выполнить транзакцию
  └── <<include>> Отправить квитанцию

- Проверить баланс: проверяет достаточность средств
- Валидировать счёт: проверяет существование счёта
- Выполнить транзакцию: переводит деньги
- Отправить квитанцию: отправляет подтверждение

Все четыре шага ОБЯЗАТЕЛЬНЫ. Без любого из них перевод не может быть выполнен.

Как читать диаграмму с Include

Стрелка с пометкой <<include>>:

  • Идёт от main use case к included use case
  • Означает: "Этот use case обязательно вызывает другой"
        Main Use Case
             │
      <<include>>
             │
             ▼
      Included Use Case

Правила использования Include

  1. Используй для обязательных шагов

    • Если use case ВСЕГДА требует другой → include
  2. Для повторно используемого поведения

    • Несколько use case вызывают один и тот же подпроцесс → extract в include
  3. Не используй для опциональных

    • Опциональные части → extend, а не include
  4. Не создавай глубокую цепочку include

    • Максимум 2-3 уровня, иначе диаграмма становится нечитаемой

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

Main: Checkout
  1. <<include>> Валидировать товары в корзине
  2. <<include>> Рассчитать стоимость (сумма + налог)
  3. <<include>> Получить адрес доставки
  4. <<include>> Обработать платёж
  5. <<extend>> Применить промокод [если есть]
  6. <<include>> Создать заказ
  7. <<include>> Отправить подтверждение по email

Здесь:

  • Include: валидация, расчёт, адрес, платёж, создание, email (обязательны)
  • Extend: промокод (опционален)

Вывод

Include в UML:

  • Показывает обязательное включение одного use case в другой
  • Используется для повторно используемого поведения
  • Всегда выполняется, если выполняется main use case
  • Отличается от extend, которое опционально

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

Приведи пример include в UML | PrepBro