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. Главная диаграмма классов