Единый язык моделирования (UML)диаграммы вариантов использования являются мощными инструментами для моделирования функциональных требований системы. Они показывают, как участники (пользователи или внешние системы) взаимодействуют с системой через варианты использования, которые представляют конкретные функции. Два ключевых отношения в диаграммах вариантов использования—Включить и Расширить—помогают управлять сложностью за счёт структурирования и модульного построения поведения. Этот учебник предоставляет подробное объяснение этих отношений, их целей, особенностей и практических применений, с примерами для обеспечения ясности.
В диаграммах вариантов использования UML, Включить и Расширитьотношения включения и расширения позволяют разбивать сложные варианты использования на более мелкие, повторно используемые или опциональные компоненты. Эти отношения повышают модульность, уменьшают избыточность и улучшают читаемость диаграмм.

Отношение включения (<<включить>>): Представляет обязательное поведение, которое всегда выполняется как часть базового варианта использования. Оно извлекает общую функциональность, общую для нескольких вариантов использования, в повторно используемый компонент.
Отношение расширения (<<расширить>>): Представляет опциональное или условное поведение, которое расширяет базовый вариант использования при определённых условиях, сохраняя фокус базового варианта использования на его основной функциональности.
Оба отношения используют пунктирные стрелки для соединения вариантов использования, с метками, указывающими на<<включить>> или <<расширить>>. Направление стрелки имеет критическое значение, поскольку оно отражает зависимость между вариантами использования.
ИспользованиевключитьСвязь «включить» используется для извлечения общего, обязательного поведения из нескольких вариантов использования в один повторно используемый вариант использования. Это способствует повторному использованию и упрощает базовые варианты использования, избегая дублирования функциональности.
Обязательный: Включённый вариант использования всегда выполняется при выполнении базового варианта использования.
Повторно используемый: Включённый вариант использования представляет собой автономную, целостную функцию, которую могут использовать несколько базовых вариантов использования.
Упрощает диаграммы: Извлекая общие шаги, базовый вариант использования остаётся кратким и сфокусированным.
Направление: Стрелка указывает от базового варианта использования к включённому, что означает, что базовый вариант использования зависит от включённого.
Пунктирная стрелка, помеченная<<включить>> соединяет базовый вариант использования с включённым.
Рассмотрим систему онлайн-покупок, в которой клиент можетСделать заказ илиОтменить заказ. Оба варианта использования требуют от клиентаВойти в систему в систему.
Базовые варианты использования: Сделать заказ, Отмена заказа
Включаемый вариант использования: Войти
Пояснение: Вход в систему является обязательным шагом как при размещении, так и при отмене заказа. Вместо дублирования функциональности входа в оба варианта использования, она вынесена в отдельный Войти вариант использования, который включается в оба.
Представление диаграммы:
[Разместить заказ] ----<<включить>>----> [Войти]
[Отменить заказ] ----<<включить>>----> [Войти]
В системе библиотеки пользователь может Взять книгу или Сдать книгу. Оба процесса требуют Проверить пользователя.
Базовые варианты использования: Взять книгу, Сдать книгу
Включаемый вариант использования: Проверить пользователя
Пояснение: Проверка личности пользователя (например, проверка его библиотечного удостоверения) является обязательным шагом при взятии и возврате книги. В Проверить пользователя используемый случай включен, чтобы избежать избыточности.
Представление диаграммы:
[Взять книгу] ----<<включить>>----> [Проверить пользователя]
[Вернуть книгу] ----<<включить>>----> [Проверить пользователя]
Когда несколько используемых случаев делят общий обязательный шаг.
Когда вы хотите упростить описания используемых случаев, извлекая повторно используемую функциональность.
Когда включаемый используемый случай имеет смысл независимо (например, Вход в систему или Проверить пользователя может быть понят как независимые функции).
Отношение РасширениеОтношение расширения используется для моделирования необязательного или условного поведения, которое выполняется только при определенных обстоятельствах. Оно позволяет основному используемому случаю оставаться сосредоточенным на своей основной функциональности, добавляя при этом необязательное поведение модульным способом.
Необязательное/условное: Расширяющий используемый случай выполняется только при соблюдении определенных условий.
Зависимое: Расширяющий используемый случай не имеет смысла самостоятельно и зависит от основного используемого случая.
Точки расширения: Основной используемый случай может определять конкретные точки, в которые может быть вставлено расширяющее поведение.
Направление: Стрелка указывает от расширяющего используемого случая к основному используемому случаю, что означает, что расширяющий используемый случай добавляет поведение к основному.
Пунктирная стрелка, помеченная<<extend>> связывает расширяющийся вариант использования с базовым вариантом использования, часто с примечанием, указывающим условие или точку расширения.
В системе банкомата базовым вариантом использования являетсяСнять наличные. Дополнительное поведение,Выдать чек, может произойти, если пользователь запросит чек.
Базовый вариант использования: Снять наличные
Расширяющийся вариант использования: Выдать чек
Условие: Пользователь выбирает распечатать чек после снятия наличных.
Пояснение: Распечатка чека не является обязательной и происходит только в том случае, если пользователь явно запросит ее. Вариант использованияВыдать чек расширяетСнять наличные в точке расширения «Пользователь запрашивает чек».
Представление диаграммы:
[Выдать чек] ----<<extend>>----> [Снять наличные]rn(Примечание: Условие = Пользователь запрашивает чек)
На платформе онлайн-обучения пользователь можетПройти тест. Дополнительное поведение,Запрос подсказки, возникает, если пользователь испытывает трудности с вопросом.
Базовый случай использования: Пройти тест
Расширенный случай использования: Запрос подсказки
Условие: Пользователь запрашивает подсказку во время теста.
Объяснение: Запрос подсказки является необязательным и зависит от потребности пользователя. Случай Запрос подсказки расширяет Пройти тест в точке расширения «Пользователь нуждается в помощи».
Диаграмма представления:
[Запрос подсказки] ----<<extend>>----> [Пройти тест]
(Примечание: Условие = Пользователь нуждается в помощи)
Когда поведение является необязательным или зависит от конкретных условий.
Когда вы хотите, чтобы базовый случай использования был сосредоточен на своей основной функциональности.
Когда расширенный случай использования не имеет смысла без базового случая использования (например, Распечатать чек не имеет значения без Снять наличные).
В таблице ниже приведены различия между Include и Расширить отношения для управления их использованием:
|
Критерии |
Включить (<<включить>>) |
Расширить (<<расширить>>) |
|---|---|---|
|
Является ли поведение обязательным? |
Да, всегда выполняется как часть базового варианта использования |
Нет, выполняется только при определенных условиях |
|
Может ли поведение существовать самостоятельно? |
Да, это согласованная, повторно используемая функция |
Нет, зависит от базового варианта использования |
|
Встречается ли оно в нескольких вариантах использования? |
Да, используется в нескольких вариантах использования |
Обычно специфично для одного варианта использования |
|
Цель |
Способствовать повторному использованию и упрощению базового варианта использования |
Добавлять опциональное или исключительное поведение модульно |
|
Направление стрелки |
Базовый → Включенный вариант использования |
Расширяющий → Базовый вариант использования |
Применим оба отношения в системе управления рестораном, чтобы проиллюстрировать их использование в реальной жизненной ситуации.
Система ресторана позволяет клиентамЗаказать еду и Забронировать столик. Система также обрабатывает дополнительные поведения, такие какОплатить счет и Запрос на вынос.
Заказать еду: Клиент заказывает еду с меню.
Забронировать столик: Клиент бронирует столик для приема пищи.
Аутентификация клиента: Проверяет личность клиента (например, через учетную запись лояльности).
Оплатить счет: Клиент оплачивает свой заказ (обязательно дляЗаказать еду).
Запрос на вынос: Дополнительный запрос на упаковку заказа для выноса.
Включает: ОбаЗаказать еду и Забронировать столик требуютАутентификация клиента для проверки личности клиента.Заказать еду также включаетОплатить счет поскольку оплата обязательна после оформления заказа.
Расширить: Заказать еду может быть расширено за счет Запрос на вынос если клиент решит забрать еду с собой.
[Заказать еду] ----<<включить>>----> [Аутентифицировать клиента]
[Заказать еду] ----<<включить>>----> [Оплатить счет]
[Забронировать столик] ----<<включить>>----> [Аутентифицировать клиента]
[Запрос на вынос] ----<<расширить>>----> [Заказать еду]
(Примечание: условие = клиент запрашивает вынос)
Аутентифицировать клиента включается в оба Заказать еду и Забронировать столик поскольку это обязательный шаг для доступа к системе.
Оплатить счет включается в Заказать еду поскольку оплата требуется для завершения заказа.
Запрос на вынос расширяет Заказать еду поскольку это необязательное поведение, которое происходит только в случае, если клиент запрашивает вынос.
Используйте включение умеренно: Извлекайте поведение в включаемый сценарий только в том случае, если оно используется несколькими сценариями или значительно упрощает основной сценарий. Чрезмерное использование включений может привести к загромождению диаграмм.
Определяйте четкие точки расширения для расширения: Укажите условия или точки в основном сценарии, где применяется расширенное поведение, чтобы избежать неоднозначности.
Сохраняйте фокус на сценариях использования: Убедитесь, что основной сценарий использования остается простым и сосредоточенным на своей основной цели, используяВключить для обязательных шагов иРасширить для необязательных.
Проверка повторного использования для включения: Включенный сценарий использования должен быть значимым и пригодным для повторного использования в различных контекстах.
Избегайте избыточной сложности диаграмм: ИспользуйтеВключить иРасширить только тогда, когда они добавляют ясность. Сложные отношения могут запутать заинтересованные стороны.
Смешение включения с расширением:
Опасность: ИспользованиеВключить для необязательного поведения илиРасширить для обязательного поведения.
Решение: Всегда проверяйте, является ли поведение обязательным (используйтеВключить) или условным (используйтеРасширить).
Чрезмерное использование отношений:
Провал: Создание слишком большого количества Включить или Расширить отношений, что делает диаграмму трудной для чтения.
Решение: Используйте эти отношения только тогда, когда они уменьшают избыточность или улучшают ясность.
Неясные условия расширения:
Провал: Не указание условия для Расширить отношения, что приводит к путанице.
Решение: Всегда включайте примечание или описание условия или точки расширения.
Включение неповторяемого поведения:
Провал: Создание включаемого варианта использования, который используется только одним базовым вариантом использования.
Решение: Убедитесь, что включаемый вариант использования является повторно используемым или значительно упрощает базовый вариант использования.
В Включить и Расширить отношения в диаграммах вариантов использования UML являются важными для управления сложностью и обеспечения модульности. В Включить отношение способствует повторному использованию за счет извлечения обязательного общего поведения, в то время как Расширить отношение позволяет сохранять основные случаи использования сосредоточенными за счет моделирования необязательного или условного поведения. Осознавая их цели, особенности и лучшие практики, вы можете создавать четкие, поддерживаемые и эффективные диаграммы случаев использования, которые передают функциональность системы заинтересованным сторонам.