Рекомендация: Отношение расширения
Отношение расширения связывает расширяемый вариант использования с базовым вариантом использования. В этой рекомендации описываются способы работы с этим отношением.
Взаимосвязи
Основное описание

Объяснение

Отношение расширения связывает расширяемый вариант использования с базовым вариантом использования. Определите, в какую область базы будет добавлено расширение, с помощью ссылок на точки расширения в базовом варианте использования (см. описание точек расширения в разделе Рекомендация по рабочему продукту: Вариант использования). Обычно (но не всегда) расширяемый вариант использования носит абстрактный характер.

Расширения можно использовать для следующих целей:

  • Для того чтобы показать, что часть варианта использования является или может являться дополнительным сегментом поведения системы. Таким образом можно отделить дополнительные функции модели от обязательных.
  • Для того чтобы показать, что поток операций выполняется только при определенных (иногда исключительных) условиях, например, при возникновении исключительной ситуации.
  • Для того чтобы показать, что возможно существуют сегменты поведения, которые (один или несколько) можно добавить в точку расширения базового варианта использования. Выбор сегментов и последовательность их добавления зависят от взаимодействия с субъектами в процессе выполнения базового варианта использования.

Расширение носит условный характер. Это означает, что его выполнение зависит от того, какие операции были проведены в процессе выполнения базового варианта использования. Базовый вариант использования не контролирует наличие условий для выполнения расширения. Эти условия описаны в рамках отношения расширения. Расширяемый вариант использования имеет доступ к атрибутам базового варианта использования и может их изменять. Однако базовый вариант использования не имеет доступа к расширениям и их атрибутам.

Расширения подспудно изменяют базовый вариант использования. Можно сказать, что базовый вариант использования предоставляет модульную среду, куда можно добавлять расширения. Однако он не обладает никакой информацией об этих расширениях.

Базовый вариант использования должен быть полными и завершенным. Это значит, что он должен иметь смысл и без ссылок на расширения. Однако базовый вариант использования зависит от расширений, потому что он не может выполняться без возможности следовать расширениям.

Пример:

Диаграмма, описанная в тексте.

Варианты использования Начать конференц-звонок и Показать профайл абонента - расширения базового варианта использования Позвонить.

Основная услуга телефонной связи представлена вариантом использования Позвонить. Примеры дополнительных услуг:

  • Добавление в разговор третьего лица (Начать конференц-звонок).

  • Просмотр принимающим абонентов личных данных вызывающего абонента (Показать профайл абонента).

Сегменты поведения, необходимые для этих дополнительных услуг, можно представить как расширяемые варианты использования для базового варианта использования Позвонить. Вот правильный способ применения отношения расширения: поскольку вариант использования Позвонить имеет смысл сам по себе, то для понимания первичной цели базового варианта использования не нужно считывать описания расширяемых вариантов использования, и расширяемые варианты использования носят необязательный характер.

Если для базового варианта использования и варианта использования "база плюс расширение" нужно намеренно создавать экземпляры или если дополнение должно изменять базовый вариант использования, следует применить обобщение вариантов использования (см. раздел Рекомендация по рабочему продукту: Обобщение вариантов использования).

Расширяемый вариант использования может состоять из одного или нескольких расширяемых сегментов, каждый из которых может иметь альтернативные пути. Эти сегменты поэтапно изменяют поведение базового варианта использования. Каждый такой сегмент расширяемого варианта использования можно добавить в отдельную точку базового варианта использования. Это значит, что отношение расширения содержит список ссылок на точки расширения, число которых равно числу расширяемых сегментов расширяемого варианта использования. Каждая точка расширения должна быть описана в базовом варианте использования.

Один базовый вариант использования состоит их нескольких отношений расширения. Это значит, что экземпляр варианта использования за время жизненного цикла может следовать более чем одному расширению. Расширяемый вариант использования можно распространить на несколько базовых вариантов использования, но это не влечет возникновения зависимости между этими базовыми вариантами использования. Между одними и теми же расширяемым и базовым вариантами использования может возникнуть несколько отношений расширения при условии, что расширение добавлено в разные точки базового варианта использования. Это значит, что разные отношения расширения должны ссылаться на разные точки расширения в базовом варианте использования. Расширяемый вариант использования сам может выступать как базовый вариант использования для создания отношений расширения, включения или обобщения. Например, расширяемый вариант использования может расширять другой расширяемый вариант использования, в результате чего они будут вложены друг в друга.

Выполнение расширения

Когда в процессе выполнения базового варианта использования экземпляр варианта использования достигает точки расширения, производится оценка условия выполнения отношения расширения. Если условие верно или отсутствует, экземпляр варианта использования будет следовать расширению (или расширяемому сегменту, который соответствует этой точке расширения). Если условие неверно, расширение не выполняется.

Расширяемый вариант использования может, как и другие варианты использования, иметь основной и дополнительные потоки операций (см. раздел Рекомендация по рабочему продукту: Вариант использования, где приведено описание структуры потока операций). Выбор пути, которому будет следовать экземпляр варианта использования при выполнении расширения, зависит от того, какие операции были выполнены до расширения (состояние экземпляра варианта использования) и какие операции выполняются при взаимодействии с субъектами при выполнении расширения. После выполнения расширения экземпляр варианта использования возвращается к выполнению базового варианта использования с того этапа, на котором он остановился.

Диаграмма, описанная в тексте.

Экземпляр варианта использования, выполняющий базовый вариант использования и его расширения.

В расширяемом варианте использования может быть один или несколько расширяемых сегментов, каждый из которых связан со своей точкой расширения в базовом варианте использования. В этом случае экземпляр варианта использования возвращается к базовому варианту использования и продолжает его выполнение до следующей точки расширения, указанной в отношении расширения. По достижении точки расширения он выполняет следующий сегмент расширяемого варианта использования. Эта процедура повторяется, пока не будет выполнен последний расширяемый сегмент. Обратите внимание, что условие выполнения расширения проверяется только на первой точке расширения. Если условие верно, экземпляр варианта использования должен выполнить все последующие расширяемые сегменты.

Диаграмма, описанная в тексте.

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

Множественность отношения расширения позволяет ограничить число потенциальных повторений всего расширения. Обратите внимание, что повторяется (и ограничивается множественностью) полностью все расширение, а не отдельный расширяемый сегмент.

Документальное оформление отношения расширения Начало страницы

Составьте описание условия расширения на основе атрибутов базового варианта использования. Это условие можно опустить, и тогда расширение будет выполняться всегда.

В каждом отношении расширения есть список ссылок на одну или несколько точек расширения в базовом варианте использования. Каждая ссылка указывает на имя точки расширения. Если в расширяемом варианте использования существует несколько расширяемых сегментов, нужно указать, какой сегмент соответствует какой точке расширения. Также нужно указать, какие шаги или потоки операций расширяемого варианта использования составляют каждый из расширяемых сегментов.

Пример:

В системе телефонной связи вариант использования Позвонить может иметь абстрактное расширение Показать профайл абонента. Это дополнительная услуга, часто называемая "ИД абонента". Принимающий абонент может заказать ее по желанию. Ниже приведено описание отношения расширения между вариантами использования Показать профайл абонента и Позвонить:

Условие: Принимающий абонент должен заранее заказать услугу "ИД абонента".

Точки расширения (одна или несколько): Показать профайл - добавить полностью вариант использования Показать профайл абонента.

Можно создать несколько экземпляров отношения расширения (создать множественность). Если множественность не задана, она считается равной единице.

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

Рассмотрим следующую простую систему телефонной связи:

Диаграмма, описанная в тексте.

Абстрактный вариант использования Начать конференц-звонок - это расширение варианта использования Позвонить.

В этой модели простое описание обычной телефонной связи и основных телефонных услуг представлено в варианте использования Позвонить. Обычно события развиваются в следующем порядке:

  1. Вызывающий абонент поднимает трубку.
  2. Система активирует звуковой сигнал (непрерывный гудок).
  3. Вызывающий абонент набирает первую цифру телефонного номера.
  4. Система выключает непрерывный гудок.
  5. Вызывающий абонент вводит остальные цифры номера.
  6. Система анализирует введенный телефонный номер, определяет в сети адрес принимающего абонента.
  7. Система анализирует номер и определяет расположение принимающего абонента в сети.
  8. Система определяет, можно ли установить виртуальную цепь с принимающим абонентом.
  9. Если цепь можно установить, система звонит принимающему абоненту и активирует звонок его телефонного аппарата.
  10. После того как принимающий абонент ответил, система отключает звонок его телефонного аппарата, прекращает звонить и замыкает цепь.
  11. Система начинает запись данных: времени начала и конца разговора, а также сведений о звонившем абоненте.
  12. Разговор длится какое-то время. Когда звонивший или принимающий абонент кладет трубку, система записывает время окончания разговора и снимает блокировку с ресурсов, необходимых для установления виртуальной цепи. На этом вариант использования заканчивается.

Для того чтобы вызывающий или принимающий абонент могли добавлять к разговору третье лицо (начинать конференц-звонок), необходимо добавить дополнительные действия в поток операций. Один из способов (рекомендуемый) - внести изменения напрямую в вариант использования Позвонить. Это можно сделать с помощью альтернативного потока операций, как описано в разделе Рекомендация по рабочему продукту: Вариант использования. Этот способ хорош для большинства простых дополнений, когда добавленные функции не искажают начальное значение варианта использования. Второй способ - выделить различия в абстрактный расширяемый вариант использования Начать конференц-звонок, который расширяет базовый вариант использования.

Вариант использования Позвонить получит следующее дополнение:

Точки расширения:
Конференц-звонок
выполняется после шага 11.

Ниже приведено описание расширяемого варианта использования Начать конференц-звонок:

Вариант использования Начать конференц-звонок
Этот вариант использования расширяет вариант использования Позвонить Он добавляется в точку расширения Конференц-звонок.
Основной поток операций:
1. Вызывающий абонент поднимает трубку.
2. В качестве подтверждения система дает три коротких сигнала.
3...12<Эти шаги совпадают с шагами 3-12 базового варианта использования>
13. Вызывающий абонент вновь подключается к принимающему абоненту с помощью варианта использования Позвонить.

Совпадение шагов с 3 по 12 с базовым вариантом использования нежелательно.  Для избежания этого можно выделить общее поведение во включаемый вариант использования (см. раздел Рекомендация по рабочему продукту: Отношение включения).