Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лаб. по методам прогр1 / Лабораторная работа 5.doc
Скачиваний:
25
Добавлен:
10.05.2014
Размер:
161.79 Кб
Скачать

Лабораторная работа №5. Диаграммы классов (Class diagram) и генерация кода на C++

Цель работы – изучение возможностей диаграммы классов, а также приобретение навыков создания диаграмм классов и применения этих диаграмм для создания кода на языке C++.

Основные сведения

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

Диаграмма классов является основной диаграммой при создании кода приложения. При помощи этой диаграммы определяются классы, их свойства и методы, описывается наследование и взаимное положение классов друг относительно друга; т. е., диаграмма классов описывает логическую структуру программной системы. Именно логическую структуру, так как классы – это лишь заготовки для создания объектов, на основе которых затем будут определены физические объекты.

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

Диаграмма классов используется не только для создания логического представления системы. Пакет Rational Rose позволяет на основе диаграммы классов создавать исходный код приложения. А так как описание классов создается на языке UML, то по диаграммам, созданным в едином стиле, возможна генерация исходного кода на любом языке программирования, который поддерживается генератором кода пакета Rational Rose.

В отличие от диаграмм состояний объектов, которые обычно создаются для отдельных объектов со сложным поведением, диаграмма классов создается для всех классов системы. Диаграмма классов содержит значки, представляющие классы, их интерфейсы и связи между классами. Классы могут представлять собой любые допустимые в языке C++ классы: простые, параметризированные или абстрактные классы. Интерфейсы – это некоторые наборы действий или операций, которые реализуют взаимодействие классов. Возможно создание одной или нескольких диаграмм классов, описывающих в текущей модели классы верхнего уровня. Возможно также создание одной или более диаграмм классов, которые описывают классы, содержащиеся в контейнерах. Диаграмма классов сама по себе является контейнером для классов модели, но можно выделить дополнительные контейнеры для логической группировки классов. Посредством диаграммы классов возможно изменение в произвольный момент времени свойств любого класса или любых его связей. При этом связанные с изменяемым классом диаграммы или спецификации будут автоматически обновлены. Диаграмма классов может быть использована как при анализе уже существующей программной системы, так и при разработке новой системы .

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

При создании новой модели автоматически (по умолчанию) создаётся главная диаграмма классов Main. Кроме этого возможно создание дополнительных диаграмм классов при помощи уже знакомых способов: посредством контекстного меню Logical View в в области просмотра модели, при помощи пункта Browse в главном (горизонтальном) меню или при помощи кнопки “Brows Class Diagram”, расположенной на панели команд.

3. Инструменты, предназначенные для построения диаграмм классов

Так же как и для предыдущих диаграмм не будем останавливаться на уже рассмотренных нами инструментах Selection Tool, Text Box, Note, Anchor Note to Item, которые выполняют стандартные функции.

Инструмент класс (Class) позволяет создать новый класс в диаграмме и одновременно в модели. Понятие класса в Rational Rose аналогично понятию класса в C++. Класс – это установки структуры и шаблона поведения для некоторого множества реальных объектов, которые в дальнейшем будут определены в программе на основе данного шаблона. Класс – это некоторая абстракция реального мира. Когда эта абстракция принимает конкретное воплощение, она называется объектом. Для детализации модели поведения классов создаются диаграммы состояний и действий, рассмотренные ранее.

В нотации языка UML класс изображается как прямоугольник, разделенный на 3 части. В верхней части записывается название класса, в середине размещаются атрибуты, в нижней части – операции.

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

Инструмент интерфейс (Interface) позволяет создать объект интерфейс, который указывает на видимые извне операции класса или компонента. Обычно интерфейс создается только для некоторых строго определенных классов или компонентов и предназначается скорее для логического отображения системы, но может присутствовать как на диаграмме классов, так и на диаграмме компонентов. В диаграмме классов интерфейс обычно отображается как знак класса со стереотипом интерфейс.

Инструмент однонаправленная ассоциативная связь (Unidirectional Association) позволяет создать однонаправленную связь класса с другим классом или класса с интерфейсом. Это общий и самый слабый вид связи.

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

Инструмент пакет (Package) позволяет создать пакет, который используется для группировки элементов. Этот инструмент может быть использован для физической или логической группировки. В нашем случае контейнер удобнее всего использовать для физической группировки кода. Но для небольшой системы, которой является тепличное хозяйство, мы не будем использовать контейнеры.

Инструмент параметрическая связь (Dependency of instantiates) позволяет создать связь, при которой генератор кода C++ Rational Rose создает код класса, включающий определения зависимого класса путем генерации директивы #include. Установка этого типа связей показывает, что класс использует другой класс как параметр в одном из методов.

Инструмент “наследование” (Generalization) позволяет создать связь, для которой Rational Rose создает код наследования, то есть создается подкласс для соединенного этой связью класса, наследуемого из родительского класса.

Инструмент связь по интерфейсу (Realize) позволяет создать связь между классом и интерфейсом или между компонентом и интерфейсом. Этот тип связи используется для того, чтобы показать, что класс выполняет операции, предоставляемые интерфейсом.