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