Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
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 выбирает "Оформить заказ":
- Система обязательно проверяет наличие товара
- Если товара нет → ошибка
- Система обязательно валидирует адрес доставки
- Если адрес некорректен → ошибка
- Система обязательно обрабатывает платёж
- Если платёж не прошёл → заказ отменяется
Эти три 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: отличие
| Аспект | Include | Extend |
|---|---|---|
| Обязательность | Обязательно | Опционально |
| Вызов | A всегда вызывает B | B может расширить 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
-
Используй для обязательных шагов
- Если use case ВСЕГДА требует другой → include
-
Для повторно используемого поведения
- Несколько use case вызывают один и тот же подпроцесс → extract в include
-
Не используй для опциональных
- Опциональные части → extend, а не include
-
Не создавай глубокую цепочку 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, которое опционально
Это мощный инструмент для моделирования систем, где один процесс зависит от других обязательных процессов.