Рис. 14. Пример диаграммы вариантов использования для программы продаж по каталогу с использованием телефона
Представление вариантов использования
Структурные представления модели
Представление вариантов использования описывает поведение классов, подсистем или всей системы в целом с точки зрения пользователя. При этом вся деятельность в рамках системы делится на транзакции, называемые вариантами использования (use cases). Вариант использования описывает взаимодействие системы с одним или несколькими действующими лицами (актантами) в виде последовательности сообщений.
Актант (actor) – это идеализированная внешняя сущность (процесс, компьютер или человек), вступающая во взаимодействие с системой, подсистемой или классом. С его помощью определяются те взаимодействия, которые могут осуществляться между системой и ее пользователями. В реальном мире один физический пользователь может выполнять функции нескольких актантов системы, и наоборот – несколько пользователей могут соответствовать одному актанту.
Каждый актант вступает во взаимодействие с одним или несколькими вариантами использования. Это взаимодействие производится путем обмена сообщениями с системой или классом, к которому относится вариант использования. На диаграммах актант изображается в виде схематического человечка, под которым указано его имя.
Вариантом использования называется блок внешне наблюдаемой деятельности системы (т.е. последовательность сообщений между системой и одним или несколькими актантами). Вариант использования описывает некоторую часть поведения системы, не вдаваясь при этом в особенности ее внутренней структуры. Он не представляет собой четкую конструкцию, которую можно напрямую реализовать в программном коде. Напротив, каждый вариант использования отображается на классы, служащие для реализации системы. Каждый класс может играть несколько ролей в реализации системы и участвовать в реализации нескольких вариантов использования. Одна из задач проектирования – найти для реализации вариантов использования те классы, которые играют нужные роли и не создают при этом излишних сложностей.
Таблица № 5
Отношение
Функция
Нотация
Ассоциация (Association)
Отношение, указывающее на связь между актантом и вариантом использования.
Расширить (Extend)
Включение добавочного поведения в исходный вариант использования без изменения последнего.
“extend”
Обобщение вариантов использования (Use case generalization)
Отношения между общим и более специфическим вариантами использования (второй наследует черты общего и добавляет к ним свои).
Включить (Include)
Включение добавочного поведения в исходный вариант использования, который явно описывает включение.
“include”
В процессе проектирования каждый вариант использования моделируется независимо от остальных. Однако для реализации ему могут понадобиться объекты, которые задействуются другими вариантами использования. Так между вариантами использования возникают неявные зависимости. В действительности, каждый из них представляет собой неотъемлемую часть деятельности системы, выполнение которой тесно связано с другими вариантами использования.
На диаграммах вариант использования изображается в виде эллипса. Внутри эллипса или под ним указывается имя варианта использования. Сплошные линии соединяют варианты использования с актантами. Вариант использования может включать в себя черты поведения других вариантов использования. Такое отношение носит название отношения включения (include). Полученный в этом случае вариант использования не является вариацией исходного и не может его заменить. Кроме того, один вариант использования может рассматриваться как расширение и дополнение исходного варианта использования (extend). У исходного варианта использования может быть несколько расширяющих вариантов, которые вносят дополнения в его семантику. Все эти варианты могут применяться вместе. Вариант использования может иметь несколько вариантов-потомков, причем любой из них можно подставлять вместо варианта-родителя. Этот механизм называется обобщением вариантов использования (use case generalization).
В структурной области не менее важным, чем моделирование логических аспектов проектируемой системы, является деление модели на пакеты и конечная реализация в программном коде. От этого напрямую зависит производительность системы и возможность ее повторного использования. В языке UML вопросы реализации рассматриваются в двух представлениях - представлении реализации и представлении развертывания.
Представление реализации описывает физическое разбиение частей системы на заменяемые блоки, которые называются компонентами. В этом представлении отображается реализация элементов проектирования (например, классов) в виде компонентов, а также интерфейсы этих компонентов и зависимости между ними. Компоненты, таким образом, являются пригодными для повторного использования высокоуровневыми блоками, из которых конструируется система.
Представление развертывания показывает физическое размещение работающих вычислительных ресурсов (например, компьютеров) и внутренние коммуникации между ними. Вычислительные ресурсы называются узлами (nodes) и содержат компоненты и объекты системы. Компоненты и объекты могут постоянно находиться на одном узле или мигрировать между несколькими узлами в процессе работы системы. Представление развертывания помогает заранее определить возможные «узкие места» при размещении зависимых компонентов на разных узлах.
Компонент (component) — это физический элемент реализации с четко определенным интерфейсом, предназначенный для использования в качестве заменяемой части системы. Каждый компонент представляет собой реализацию некоторых классов системы. Тщательно спроектированные компоненты не зависят от других компонентов системы, а зависят только от интерфейсов, которые те поддерживают. Любой компонент системы может быть заменен другим компонентом, который поддерживает те же интерфейсы.
Для компонента определены интерфейсы, которые он предоставляет (реализует), и интерфейсы, которые он использует в своей работе и которые предоставляются другими компонентами. Интерфейс (interface) — это список операций, обеспечиваемый программным или аппаратным обеспечением. При использовании именованных интерфейсов можно избежать прямой зависимости между компонентами и упростить процесс замещения старого компонента новым.
Графически компоненты изображаются в виде прямоугольника, у которого в одну из боковых сторон врезаны два прямоугольника поменьше. Прямоугольник-компонент может соединяться сплошной линией с интерфейсами, которые он поддерживает. Интерфейсы изображаются в виде полых кружков (рис. 15).