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

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

q registration form является объектом класса RegForm;

q manager является объектом класса Manager;

q math 101 является объектом класса Course;

q section 1 является объектом класса CourseOffering;

q bill является интерфейсом к внешней учетной системе, поэтому мы будем использовать имя BillingSystem как имя его класса.

Классы создаются в логическом представлении системы (рис. 17.17).

1. В окне браузера щелкните правой кнопкой по значку пакета Logical View.

2. В появившемся контекстном меню выберите команду New:Class. В результате в дерево окна браузера будет добавлен класс с именем NewClass.

3. Пока значок класса остается выделенным, введите имя RegForm.

4. Повторите предыдущие шаги для добавления других классов: Manager, Course, CourseOffering и BillingSystem.

После создания классов они описываются (документируются). Описания добавляются с помощью Documentation Window (рис. 17.18).

1. В окне браузера щелкните по значку класса CourseOffering.

2. Введите описание класса в Documentation Window.

Процесс построения сценариев и нахождения классов продолжается до тех пор, пока вы не скажете: «Больше находить нечего — нет ни новых классов, ни новых сообщений».

Следующий шаг — построение диаграммы классов. Откроем главную диаграмму (рис. 17.19) классов и добавим в нее классы.

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

Рис. 17.17.Логическое Рис. 17.18.Окно документации —

представление — Logical View Documentation Window

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

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

1. Для открытия диаграммы выполним двойной щелчок по значку Main в окне браузера.

2. В главном меню выберем команду Query:Add Classes.

3. Для добавления всех классов нажмем кнопку АИ» (выбрать все).

4. Для закрытия окна и добавления классов в диаграмму нажмем кнопку ОК.

5. Переупорядочим классы в диаграмме (выделяя конкретный класс и перетаскивая, его на новое место).

ПРИМЕЧАНИЕ

Классы можно добавлять в диаграмму перетаскиванием их из окна браузера (по одному классу в единицу времени).

Для создания новых типов моделирующих элементов в UML используется понятие стереотипа. С помощью стереотипа можно «нагрузить» элемент новым смыслом. Используем предопределенный стереотип Interface для класса BillingSystem (рис. 17.20), так как этот класс определяет только интерфейс к внешней учетной системе (billing system).

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

Рис. 17.20.Класс Billing System

1. В главной диаграмме классов выполним двойной щелчок по значку класса BillingSystem. В результате появляется окно спецификации класса (Class Specification).

2. Щелкнем по стрелке раскрывающегося списка Stereotype.

3. Наберем на клавиатуре слово-стереотип Interface.

4. Закроем окно спецификации, нажав кнопку ОК.

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

Ассоциация определяет соединение между классами. Исследуя диаграмму последовательности Add a Course, мы можем определить существование следующих ассоциаций: от RegForm к Manager, от Manager к Course и от Manager к BHHngSystem (рис. 17.21).

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

Рис. 17.21. Ассоциации между классами

1. На панели инструментов щелкните по значку однонаправленной ассоциации (стрелке).

2. Щелкните по классу RegForm и перетащите линию ассоциации на класс Manager.

3. Повторите предыдущие шаги для ввода следующих отношений:

q от Manager к Course;

q от Manager к BillingSystem.

Ассоциации задают пути между объектами-партнерами одинакового уровня.

Агрегация фиксирует неравноправные связи. Она показывает отношение между целым и его частями. Создадим отношение агрегации между классом Course и классом CourseOffering (рис. 11.22),так как предложение Курса CourseOfferings является частью агрегата — класса Course.

1. На панели инструментов щелкните по значку агрегации (линии с ромбиком).

2. Щелкните по классу, представляющему целое — Course.

3. Перетащите линию агрегации на класс, представляющий часть — CourseOffering.

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

Рис. 17.22.Отношение агрегации

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

Рис. 17.23.Индикаторы мощности

Для отображения того, «как много» объектов участвует в отношении, к ассоциациям и агрегациям диаграммы могут добавляться индикаторы мощности (рис. 17.23).

1. Щелкните правой кнопкой по линии агрегации возле класса CourseOffering.

2. Из контекстного меню выберите команду Multipticity:0ne or More.

3. Щелкните правой кнопкой по линии агрегации возле класса Course.

4. Из контекстного меню выберите команду Multiplicity:1.

Вспомним, что задание имени — это первый из трех шагов определения класса. Любой класс должен инкапсулировать в себе структуру данных и поведение, которое определяет возможности обработки этой структуры. Примем, что на фиксацию структуры ориентируется второй шаг, а на фиксацию поведения — третий шаг.

Структура класса представляется набором его свойств. Структура находится путем исследования проблемных требований и соглашений между разработчиками и заказчиками. В нашей модели каждое предложение курса (CourseOffering) является свойством (attribute) класса-агрегата Course.

Конечно, класс CourseOffering тоже имеет свойства (рис. 17.24). Определим одно из них — количество студентов.

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

Рис. 17.24.Свойства

1. В диаграмме классов щелкните правой кнопкой по классу CourseOffering.

2. Из контекстного меню выберите команду Insert New Attribute. Это приведет к добавлению в класс свойства.

3. Пока новое свойство остается выделенным, введите его имя — numberStudents.

Итак, два шага формирования класса сделаны. Перейдем к третьему шагу — заданию поведения класса.

Поведение класса представляется набором его операций. Исходная информация об операциях класса находится в диаграммах последовательности. В операции отображаются сообщения из диаграмм последовательности.

Первое действие этого шага заключается в привязке объектов (из диаграмм последовательности) к конкретным классам. Выполним такую привязку для нашей модели (рис. 17.25).

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

Рис. 17.25.Привязка объектов к классам

1. Для открытия диаграммы последовательности Add a Course выполним двукратный щелчок по ее значку в окне браузера.

2. В окне браузера щелкнем по значку класса CourseOffering.

3. Перетащим класс CourseOffering на объект section 1.

Вот и все. Видим, что имя объекта удлинилось, в нем появились две части, разделенные двоеточием. Слева от двоеточия записывается имя объекта, а справа — имя класса.

После назначения объекта классу выполняется второе действие — наполнение класса операциями. Как правило, в операции класса превращаются сообщения, получаемые его объектом. При этом обычно сообщения переименовываются — производится согласование имени сообщения и имени операции (рис. 17.26). Причины переименования просты и понятны. Во-первых, имя операции должно отражать ее принадлежность к классу (а не к источнику соответствующего сообщения). Во-вторых, имя операции должно указывать на ее обязанность, а не на способ ее реализации. В-третьих, имя должно быть допустимым с точки зрения синтаксиса языка программирования, который будет использоваться для кодирования класса.

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

Рис. 17.26.Новая операция

1. Щелкните правой кнопкой по сообщению «add Joe». В результате станет видимым контекстное меню.

2. Выберите команду new operation. В результате станет видимой спецификация операции Operation Specification.

3. Введите имя новой операции — add.

4. Перейдите на вкладку Detail.

5. Щелкните правой кнопкой мышки по полю Arguments.

6. Выберите в контекстном меню команду Insert. В появившейся рамке наберите имя аргумента — Joe. Щелкните вне рамки.

7. Закройте окно спецификации, нажав кнопку ОК.

Вы создали новую операцию класса и связали с ней сообщение — оно автоматически поменяло свое имя. Несмотря на переименование, это прямое действие — отталкиваясь от имени сообщения, получить имя операции.

Возможно и обратное действие — отталкиваясь от имени операции, получить имя сообщения. При этом реализуется такая последовательность: отдельно создается новая операция класса, а затем она отображается на существующее сообщение (рис. 17.27).

1. Щелкните правой кнопкой по классу в браузере.

2. В появившемся контекстном меню выберите команду New: Operation. Появляется рамка с надписью opname.

3. Вместо надписи opname наберите имя новой операции класса — offeringOpen.

4. На диаграмме последовательности щелкните правой кнопкой по сообщению «accepting students?». В результате станет видимым контекстное меню.

5. В меню выберите операцию offeringOpen() —сообщение переименовывается (на него отображается операция класса).

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

Рис. 17.27.Отображение операции на сообщение

Следующий шаг разработки состоит в настройке описаний классов на конкретный язык программирования. Сам язык выбирается по команде Tools:0ptions. В появившемся диалоговом окне переходят на вкладку Notation. Название языка выбирается из раскрывающегося списка Default Language. Для нашего примера используем язык Ada 95.

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

1. Выполним двукратный щелчок по значку класса CourseOffering в окне браузера или диаграмме классов. В результате станет видимым окно спецификации класса.

2. Выберите страницу Attributes (свойства).

3. Щелкните по полю Туре. В результате станет видимым раскрывающийся список.

4. Введите требуемый тип данных (Integer).

5. Закройте окно спецификации, нажав кнопку ОК.

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

Рис. 17.28.Добавление проектных решений

ПРИМЕЧАНИЕ

Типы данных для свойств можно устанавливать, используя спецификацию Attribute или вводя их в строчке отображения свойства на диаграмме классов (формат attribute:data type).

Теперь зададим тип возвращаемого результата для операции offeringOpen (рис. 17.29).

1. Выполним двукратный щелчок по значку класса CourseOffering в окне браузера или диаграмме классов. В результате станет видимым окно спецификации класса.

2. Выберите страницу Operations.

3. Щелкните по полю Return type. В результате станет видимым раскрывающийся список.

4. Введите требуемый возвращаемый тип (Integer).

5. Закройте окно спецификации, нажав кнопку ОК.

ПРИМЕЧАНИЕ

Аргументы операции устанавливают с помощью диалогового окна Operation Specification. Для перехода к этому окну нужно на вкладке (странице) Operations щелкнуть правой кнопкой по имени операции и в появившемся контекстном меню выбрать команду Specification. Далее в появившемся диалоговом окне следует перейти на вкладку Detail.

Аргументы операции и возвращаемый тип можно также установить, вводя их в строчке отображения операции на диаграмме классов (формат operation(argument name:data type):return type).

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

Рис. 17.29.Определение типа возвращаемого результата

Наши рекомендации