Пример выполнения работы.

1. Создание диаграммы классов для сценария "Добавить новый заказ" прецедента "Работа с заказом"
Диаграммы классов будем рассматривать с концептуальной точки зрения. Для упрощения задачи и чтобы не загромождать диаграммы несущественными деталями методы setX, getX для каждого атрибута Х классов задавать не будем.
Создадим в Логическом представлении браузера новую диаграмму классов и назовем ее "Add New Order". В поле документации запишем для нее следующий текст: "Диаграмма классов для сценария "Добавить новый заказ" прецедента "Работа с заказом"".
Заполнение диаграммы начнем с определения классов-сущностей. Рассматриваемый сценарий состоит из:

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

Создадим классы-сущности Order (Заказ), Client (Клиент) и ComponentPart (Комплектующее изделие). Поскольку в один заказ может входить много разных комплектующих изделий, и одно комплектующее изделие может входить во много заказов, то введем еще один класс-сущность OrderItem (Состав заказа). Опишем каждый класс.

Класс Client:

Параметр Значение
Комментарий Класс, представляющий собой клиента фирмы
Атрибуты name : String - наименование клиента address : String - адрес клиента phone : String - телефон клиента Все атрибуты имеют модификатор доступа - private
Операции AddClient() - добавление нового клиента RemoveClient() - удаление существующего клиента GetInfo() - получить информацию о клиенте Все операции имеют модификатор доступа - public


Класс Order:

Параметр Значение
Комментарий Класс, представляющий собой заказ, который делает клиент
Атрибуты orderNumber : Integer - номер заказа orderDate : Date - дата оформления заказа orderComplete : Date - дата выполнения заказа Все атрибуты имеют модификатор доступа - private
Операции Create() - создание нового заказа SetInfo() - занести информацию о заказе GetInfo() - получить информацию о заказе Все операции имеют модификатор доступа - public


Класс OrderItem:

Параметр Значение
Комментарий Класс, представляющий собой пункт заказа, который делает клиент
Атрибуты itemNumber : Integer - номер пункта заказа quantity : Integer - количество комплектующих изделий price : Double - цена за единицу Все атрибуты имеют модификатор доступа - private
Операции Create() - создание новой строки заказа SetInfo() - занести информацию о строке заказа GetInfo() - получить информацию о строке заказа Все операции имеют модификатор доступа - public


Класс ComponentPart:

Параметр Значение
Комментарий Класс, представляющий собой комплектующие изделия
Атрибуты name : String - наименование manufacturer : String - производитель price : Double - цена за единицу description - описание Все атрибуты имеют модификатор доступа - private
Операции AddComponent() - добавление нового комплектующего изделия RemoveComponent() - удаление комплектующего изделия GetInfo() - получить информацию о комплектующем изделии Все операции имеют модификатор доступа - public


Результат создания классов-сущностей показан на рис. 1:


Рисунок 1. Созданные классы-сущности


Добавим отношения между классами (рис. 2):

  • класс Client и Order - отношение ассоциации, поскольку данные два класса просто связаны друг с другом и никакие другие типы связей здесь применить нельзя. Один клиент может сделать несколько заказов, каждый заказ поступает только от одного клиента, поэтому кратность связи со стороны класса Client - 1, со стороны Order - 1..n;
  • класс Order и OrderItem - отношение композиции, поскольку строка заказа является частью заказа, и без него существовать не может. В один заказ может входить несколько строк заказа, строка заказа относится только к одному заказу, поэтому кратность связи со стороны Order - 1, со стороны OrderItem - 1..n;
  • класс OrderItem и ComponentPart - отношение агрегации, поскольку комплектующие изделия являются частями строки заказа, но и те, и другие, явлюятся самостоятельными классами. Одно комплектующее изделие может входить во много строк заказа, в одну строку заказа входит только одно комплектующее изделие, поэтому кратность связи со стороны ComponentPart - 1, со стороны OrderItem - 1..n.


Рисунок 2. Классы-сущности и отношения между ними


Добавим теперь на диаграмму граничные и управляющие классы (рис. 3). Рассматриваемый сценарий - это только одно из действий, которые обеспечивает прецедент "Работа с заказом". Прецедент также позволяет просмотреть, отредактировать или удалить заказ. Это означает, что необходимо предусмотреть механизм, который позволяет выбирать необходимое действие. Создадим для этого граничный класс OrderOptions (Параметры работы с заказом) с комментарием "Класс, обеспечивающий механизм работы с заказами". Также создадим граничный класс AddNewOrder (Добавление нового заказа), который будет служить для добавления новых заказов (комментарий - "Класс служит для добавления новых заказов". Отношение между этими классами - агрегация, поскольку в данном случае класс AddNewOrder рассматривается как часть класса OrderOptions, частями которого также будут классы для просмотра, редактирования и удаления заказов. Кратность связи 1 к 1, поскольку в состав класса OrderOptions входит только один класс AddNewOrder.

Перейдем теперь к управляющим классам. Добавим управляющий класс OrderManager (Менеджер по работе с заказами) с комментарием "Управляющий класс для обработки потока событий прецедента "Работа с заказами"", который будет обеспечивать обработку потока событий для рассматриваемого прецедента. Данный класс будет связан с классами AddNewOrder и Order. Отношение между классами AddNewOrder и OrderManager - однонаправленная ассоциация с кратностью связи 1 к 1, поскольку один экземпляр класса AddNewOrder взаимодействует только с одним экземпляром класса OrderManager. Отношение между классами OrderManager и Order - однонаправленная ассоциация с кратностью связи 1 к 1..n, поскольку один класс OrderManager может взаимодействовать с несколькими классами Order.

Окончательный вариант диаграммы классов показан на рис. 3:


Рисунок 3. Итоговая диаграмма классов


2. Создание пакетов
Пакеты предназначены для группировки элементов в группы по определенным критериям. В простейшем случае классы можно группировать по их стереотипам. Создадим три пакета: Entities (классы-сущности), Boundaries (граничные классы) и Control (управляющие классы). Для этого необходимо щелкнуть правой кнопкой мыши на Логическом представлении браузера (Logical View), в появившемся контекстном меню выбрать пункт New > Package (Создать > Пакет), и ввести имя пакета. Результат создания пакетов показан на рис.4:


Рисунок 4. Созданные пакеты

В поле документации (Documentation) для каждого пакета зададим комментарий:

  • для пакета Entities комментарий: пакет содержит классы-сущности;
  • для пакета Boundaries комментарий: пакет содержит граничные классы;
  • для пакета Control комментарий: пакет содержит управляющие классы.

3. Группировка классов в пакеты

Группировка классов в пакеты осуществляется путем перетаскивания в Логическои представлении брауера соответствующего класса в соответствующий пакет. Группировать созданные классы будем следующим образом:

  • классы Client, Order, OrderItem и ComponentPart перенесем в пакет Entities;
  • классы OrderOptions и AddNewOrder перенесем в пакет Boundary;
  • класс OrderManager перенесем в пакет Control.

Итоговой результат приведен на рис. 5.


Рисунок 5. Классы и пакеты для сценария "Добавление нового заказа"

4. Добавление диаграммы классов для каждого пакета
Для добавления диаграммы к пакету следует щелкнуть правой кнопкой мыши по пакету, в появившемся контекстном меню выбрать пункт New > Class Diagram (Создать > Диаграмма Классов), ввести имя класса Main (Главная), далее открыть диаграмму, дважды щелкнув по ней, и перенести на нее нужные классы. Отношения между классами, принадлежащие одному пакету, будут перенесены автоматически. Результат создания диаграммы класов для пакета Boundaries показан на рис.6, для пакета Control - на рис.7, для пакета Entities - на рис. 8.


Рисунок 6. Диаграмма классов пакета Boundaries


Рисунок 7. Диаграмма классов пакета Control


Рисунок 8. Диаграмма классов пакета Entities


5. Создание главной диаграммы классов
Главная диаграмма в логическом представлении модели обычно отображает пакеты системы. По умолчанию в Логическом представлении браузера уже существует главная диаграмма классов (Main). Для ее заполнения необходимо открыть ее, дважды щелкнув по ней в Логическом представлении браузера, и перетащить на нее три созданные нами пакеты (рис.9):


Рисунок 9. Главная диаграмма классов