Каталог Индекс раздела
Назад Оглавление Вперед


Лабораторная работа № 2.

Создание диаграммы классов.

Цель работы: получить навыки построения диаграмм классов, создания пакетов и группировки классов в пакеты.

Задание: 

  1. создать диаграмму классов * для одного из сценарией диаграммы прецедентов, созданной в предыдущей лабораторной работе. Для каждого класса необходимо задать атрибуты и операции. Каждый класс должен быть подробно задокументирован - необходимо задать текстовое описание самого класса, описания его атрибутов и операций;
  2. создать пакеты для группировки классов, созданных в пункте 1;
  3. сгруппировать классы из пункта 1 в пакеты;
  4. для каждого пакета создать свою диаграмму классов.
  5. разработать главную диаграмму классов.
* Примечание: рассматривать диаграмму классов рекомендуется с концептуальной точки зрения, которая используется на начальных этапах моделирования и разработки.

Содержание отчета:
  1. созданные диаграммы классов (для диаграммы классов из пункта 2 задания должен быть указан сценарий, для которого данная диаграмма построена);
  2. краткое описание каждого созданного класса и отношений между классами.

Диаграммы классов (class diagram) используются для моделирования статического вида системы с точки зрения проектирования. Диаграмма классов - диаграмма, на которой показано множество классов, интерфейсов, коопераций и отношений между ними. Используется в следующих целях: Согласно Мартину Фаулеру существуют три различные точки зрения на построение диаграмм классов или любой другой модели:

Пример выполнения работы.
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):
Классы-сущности и отношения между ними
Рисунок 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) для каждого пакета зададим комментарий:
3. Группировка классов в пакеты
Группировка классов в пакеты осуществляется путем перетаскивания в Логическои представлении брауера соответствующего класса в соответствующий пакет. Группировать созданные классы будем следующим образом:
  • классы Client, Order, OrderItem и ComponentPart перенесем в пакет Entities;
  • классы OrderOptions и AddNewOrder перенесем в пакет Boundary;
  • класс OrderManager перенесем в пакет Control.
Итоговой результат приведен на рис. 5.
Классы и пакеты для сценария "Добавление нового заказа"
Рисунок 5. Классы и пакеты для сценария "Добавление нового заказа"

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

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

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

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

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

Назад Оглавление Вперед
Каталог Индекс раздела