Создание диаграммы классов
Объекты из диаграмм последовательности группируются в классы. Основываясь на нашей диаграмме последовательности, мы можем идентифицировать следующие объекты и классы:
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) классов и добавим в нее классы.
Рис. 17.17.Логическое Рис. 17.18.Окно документации —
представление — Logical View Documentation Window
Рис. 17.19.Главная диаграмма классов
1. Для открытия диаграммы выполним двойной щелчок по значку Main в окне браузера.
2. В главном меню выберем команду Query:Add Classes.
3. Для добавления всех классов нажмем кнопку АИ» (выбрать все).
4. Для закрытия окна и добавления классов в диаграмму нажмем кнопку ОК.
5. Переупорядочим классы в диаграмме (выделяя конкретный класс и перетаскивая, его на новое место).
ПРИМЕЧАНИЕ
Классы можно добавлять в диаграмму перетаскиванием их из окна браузера (по одному классу в единицу времени).
Для создания новых типов моделирующих элементов в UML используется понятие стереотипа. С помощью стереотипа можно «нагрузить» элемент новым смыслом. Используем предопределенный стереотип Interface для класса BillingSystem (рис. 17.20), так как этот класс определяет только интерфейс к внешней учетной системе (billing system).
Рис. 17.20.Класс Billing System
1. В главной диаграмме классов выполним двойной щелчок по значку класса BillingSystem. В результате появляется окно спецификации класса (Class Specification).
2. Щелкнем по стрелке раскрывающегося списка Stereotype.
3. Наберем на клавиатуре слово-стереотип Interface.
4. Закроем окно спецификации, нажав кнопку ОК.
Для определения взаимодействия объектов нужно указать отношения между классами. Для того чтобы увидеть, как объекты должны разговаривать друг с другом, исследуются диаграммы последовательности. Если объекты должны разговаривать, то должен быть путь для коммуникации между их классами. Двумя типами структурных отношений являются ассоциации и агрегации.
Ассоциация определяет соединение между классами. Исследуя диаграмму последовательности Add a Course, мы можем определить существование следующих ассоциаций: от RegForm к Manager, от Manager к Course и от Manager к BHHngSystem (рис. 17.21).
Рис. 17.21. Ассоциации между классами
1. На панели инструментов щелкните по значку однонаправленной ассоциации (стрелке).
2. Щелкните по классу RegForm и перетащите линию ассоциации на класс Manager.
3. Повторите предыдущие шаги для ввода следующих отношений:
q от Manager к Course;
q от Manager к BillingSystem.
Ассоциации задают пути между объектами-партнерами одинакового уровня.
Агрегация фиксирует неравноправные связи. Она показывает отношение между целым и его частями. Создадим отношение агрегации между классом Course и классом CourseOffering (рис. 11.22),так как предложение Курса CourseOfferings является частью агрегата — класса Course.
1. На панели инструментов щелкните по значку агрегации (линии с ромбиком).
2. Щелкните по классу, представляющему целое — Course.
3. Перетащите линию агрегации на класс, представляющий часть — CourseOffering.
Рис. 17.22.Отношение агрегации
Рис. 17.23.Индикаторы мощности
Для отображения того, «как много» объектов участвует в отношении, к ассоциациям и агрегациям диаграммы могут добавляться индикаторы мощности (рис. 17.23).
1. Щелкните правой кнопкой по линии агрегации возле класса CourseOffering.
2. Из контекстного меню выберите команду Multipticity:0ne or More.
3. Щелкните правой кнопкой по линии агрегации возле класса Course.
4. Из контекстного меню выберите команду Multiplicity:1.
Вспомним, что задание имени — это первый из трех шагов определения класса. Любой класс должен инкапсулировать в себе структуру данных и поведение, которое определяет возможности обработки этой структуры. Примем, что на фиксацию структуры ориентируется второй шаг, а на фиксацию поведения — третий шаг.
Структура класса представляется набором его свойств. Структура находится путем исследования проблемных требований и соглашений между разработчиками и заказчиками. В нашей модели каждое предложение курса (CourseOffering) является свойством (attribute) класса-агрегата Course.
Конечно, класс CourseOffering тоже имеет свойства (рис. 17.24). Определим одно из них — количество студентов.
Рис. 17.24.Свойства
1. В диаграмме классов щелкните правой кнопкой по классу CourseOffering.
2. Из контекстного меню выберите команду Insert New Attribute. Это приведет к добавлению в класс свойства.
3. Пока новое свойство остается выделенным, введите его имя — numberStudents.
Итак, два шага формирования класса сделаны. Перейдем к третьему шагу — заданию поведения класса.
Поведение класса представляется набором его операций. Исходная информация об операциях класса находится в диаграммах последовательности. В операции отображаются сообщения из диаграмм последовательности.
Первое действие этого шага заключается в привязке объектов (из диаграмм последовательности) к конкретным классам. Выполним такую привязку для нашей модели (рис. 17.25).
Рис. 17.25.Привязка объектов к классам
1. Для открытия диаграммы последовательности Add a Course выполним двукратный щелчок по ее значку в окне браузера.
2. В окне браузера щелкнем по значку класса CourseOffering.
3. Перетащим класс CourseOffering на объект section 1.
Вот и все. Видим, что имя объекта удлинилось, в нем появились две части, разделенные двоеточием. Слева от двоеточия записывается имя объекта, а справа — имя класса.
После назначения объекта классу выполняется второе действие — наполнение класса операциями. Как правило, в операции класса превращаются сообщения, получаемые его объектом. При этом обычно сообщения переименовываются — производится согласование имени сообщения и имени операции (рис. 17.26). Причины переименования просты и понятны. Во-первых, имя операции должно отражать ее принадлежность к классу (а не к источнику соответствующего сообщения). Во-вторых, имя операции должно указывать на ее обязанность, а не на способ ее реализации. В-третьих, имя должно быть допустимым с точки зрения синтаксиса языка программирования, который будет использоваться для кодирования класса.
Рис. 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() —сообщение переименовывается (на него отображается операция класса).
Рис. 17.27.Отображение операции на сообщение
Следующий шаг разработки состоит в настройке описаний классов на конкретный язык программирования. Сам язык выбирается по команде Tools:0ptions. В появившемся диалоговом окне переходят на вкладку Notation. Название языка выбирается из раскрывающегося списка Default Language. Для нашего примера используем язык Ada 95.
Итак, в ходе анализа и проектирования в визуальную модель добавляются проектные решения (рис. 17.28). После выбора языка программирования для свойств определяют типы данных, а для операций конкретизируют сигнатуры — имена и типы параметров, типы возвращаемых значений.
1. Выполним двукратный щелчок по значку класса CourseOffering в окне браузера или диаграмме классов. В результате станет видимым окно спецификации класса.
2. Выберите страницу Attributes (свойства).
3. Щелкните по полю Туре. В результате станет видимым раскрывающийся список.
4. Введите требуемый тип данных (Integer).
5. Закройте окно спецификации, нажав кнопку ОК.
Рис. 17.28.Добавление проектных решений
Дата добавления: 2015-03-07; просмотров: 898;