Шаг 150.
Унифицированный язык моделирования UML.
Организация вариантов использования

    На этом шаге рассмотрим организацию вариантов использования.

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

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

    Например, в банковской системе может существовать вариант использования Validate User (Проверка пользователя), который отвечает за идентификацию клиента. У него могут быть два специализированных дочерних варианта использования – Check password (Проверка пароля) и Retinal scan (Сканирование сетчатки), каждый из которых ведет себя так же, как Validate User, и может быть применен в любом месте, где появляется последний. При этом оба потомка добавляют свое собственное поведение: первый проверяет текстовый пароль, а второй – уникальный рисунок сетчатки глаза пользователя. Как показано на рис. 1, обобщение между вариантами использования изображается сплошной линией с большой треугольной стрелкой, то есть так же, как обобщение между классами.


Рис.1. Обобщение, включение и расширение

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

    Благодаря наличию связей включения удается избежать многократного описания одного и того же потока событий, поскольку общее поведение можно представить в виде отдельного варианта использования, включаемого в базовые. Связь включения являет собой пример делегирования, когда ряд обязанностей системы описывается в одном месте (во включаемом варианте использования), а остальные варианты использования при необходимости вводят эти обязанности в свой набор.

    Связь включения изображается как зависимость со стереотипом include. Чтобы показать то место в потоке событий базового варианта использования, куда включается поведение другого варианта использования, просто напишите include с последующим именем включаемого варианта использования, как это сделано, например, в потоке Track order (Отследить заказ):

Track order:
   Получить и проверить номер заказа;
   include ‘Validate user’;
   для каждой части заказа
      запросить состояние;
   сообщить общее итоговое состояние пользователю. 

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

    Связь расширения между вариантами использования означает, что базовый неявно включает поведение некоторого другого в косвенно указанном месте. Базовый вариант использования способен существовать отдельно, но при некоторых условиях его поведение может быть расширено поведением другого варианта использования. Базовый вариант использования можно расширить только вызовом из определенной точки, – так называемой точки расширения (extension point).

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

    Связь расширения изображается как зависимость со стереотипом extend. В дополнительной секции можно перечислить точки расширения базового варианта использования. Эти точки расширения – простые метки, которые могут появляться в потоке базового варианта использования. В качестве примера рассмотрим поток Place order (Разместить заказ):

Place order:
  include Validate user ;
  собрать компоненты пользовательского заказа;
  установить приоритет: точка расширения;
  подтвердить заказ для обработки.

    В этом примере установить приоритет – точка расширения. Вариант использования может иметь несколько точек расширения, каждая из которых может встречаться не один раз, с обязательным указанием их имени. В обычных условиях этот базовый вариант использования будет исполняться без учета приоритетности заказа. С другой стороны, если это экземпляр приоритетного заказа, то поток идет, как описано выше, но в точке расширения установить приоритет вставлен расширяющий вариант использования Place rush order (Разместить срочный заказ), после которого поток продолжает исполнение. Если есть множество точек расширения, то в каждую просто вставляется расширяющий вариант использования.

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

    Варианты использования – это классификаторы, поэтому они могут иметь атрибуты и операции, которые можно изображать так же, как в классах. Можно представить атрибуты в виде объектов, находящихся внутри варианта использования и необходимых для описания его внешнего поведения, а операции – как действия системы, которые нужны для описания потока событий. Эти объекты и операции могут использоваться в диаграммах взаимодействия для спецификации поведения варианта использования.

    Будучи классификаторами, варианты использования допускают присоединение к ним автоматов. Вы можете применять автоматы в качестве дополнительного средства описания поведения, представленного вариантом использования.

    На следующем шаге рассмотрим типичные приемы моделирования поведения элемента в UML.




Предыдущий шаг Содержание Следующий шаг