Практическая работа №15

Лабораторная работа №15

Практическая работа 15.

Особенности генерации программного кода в среде IBM Rational Rose

Подготовка модели для генерации программного кода

Одним из наиболее важных свойств программы IBM Rational Rose является возможность генерации программного кода на нескольких языках программирования, которая может быть использована разработчиком после построения модели. Для этой цели в среде IBM Rational Rose присутствует достаточно большой выбор языков программирования и схем баз данных. Однако возможность генерации текста программы на том или ином языке программирования зависит от установленной версии IBM Rational Rose .

Общая последовательность действий, которые необходимо выполнить для генерации программного кода в среде IBM Rational Rose, состоит из следующих этапов:

1. Проверка модели на отсутствие ошибок.

2. Создание компонентов для реализации классов.

3. Отображение классов на компоненты.

4. Выбор языка программирования для генерации текста программного кода.

5. Установка свойств генерации программного кода.

6. Выбор класса, компонента или пакета.

7. Генерация программного кода.

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

В среде IBM Rational Rose предусмотрено задание достаточно большого числа свойств, характеризующих как отдельные классы, так и проект в целом. Для определенности в качестве языка реализации проекта целесообразно выбрать язык программирования ANSI C++, который не требует инсталляции дополнительных программ и поставляется практически во всех конфигурациях IBM Rational Rose . Рассмотрим особенности выполнения каждого из указанных выше этапов для языка реализации модели ANSI C++.

Поскольку язык ANSI С++ не допускает использование символов кириллицы в качестве имен классов, атрибутов и операций, необходимо соответствующим образом модифицировать диаграмму классов. После изменения имен классов, атрибутов и операций диаграмма классов модели банкомата будет иметь следующий вид (рис. 1).

Рис. 1. Диаграмма классов модели банкомата после преобразования имен классов, их атрибутов и операций

Проверка модели независимо от выбора языка генерации кода

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

Для проверки модели следует выполнить операцию главного меню: Tools Check Model (Инструменты Проверить модель). Результаты проверки разработанной модели на наличие ошибок отображаются в окне журнала. Прежде чем приступить к генерации текста программного кода разработчику следует добиться устранения всех ошибок и предупреждений, о чем должно свидетельствовать чистое окно журнала (рис. 2).

Рис. 2. Вид журнала при отсутствии ошибок по результатам проверки модели

Создание компонентов для реализации классов и отображение классов на компоненты

По существу данные этапы выполняются в ходе разработки диаграммы компонентов. Хотя программа IBM Rational Rose позволяет генерировать программный код на языке ANSI C++ для каждого класса модели без предварительного построения диаграммы компонентов, имеет смысл воспользоваться разработанной ранее диаграммой компонентов. Применительно к разрабатываемому проекту желательно переименовать компоненты, задав им англоязычные имена. В этом случае соответствующая диаграмма компонентов модели банкомата будет иметь вид, представленный на рис. 3.

Рис. 3. Диаграмма компонентов модели банкомата после преобразования имен компонентов

Для отображения классов на компоненты можно воспользоваться окном спецификации свойств компонента, открытого на вкладке Realizes (Реализует). Для включения реализации класса в данный компонент следует выделить требуемый класс на этой вкладке и выполнить для него операцию контекстного меню Assign (Назначить). В результате перед именем класса на этой вкладке появится специальная отметка.

Применительно к модели банкомата для компонента MainATM.exe выберем для генерации программного кода классы ATMTransaction и ATMController (рис. 4).

Рис. 4. Диалоговое окно настройки свойств реализации классов в компоненте MainATM.exe

Подобная операция должна быть выполнена для всех классов модели, которые предполагается реализовывать на выбранном языке программирования. Имеется и другой способ установления реализации классов на компоненте. А именно, можно просто выделить класс в браузере проекта и перетащить его на нужный компонент диаграммы компонентов.

Выбор языка программирования и редактирование свойств генерации программного кода

Для выбора языка ANSI C++ в качестве языка реализации модели следует выполнить операцию главного меню: Tools Options (Инструменты Параметры), в результате чего будет вызвано диалоговое окно настройки параметров модели. Далее на вкладке Notation (Нотация) в строке Default Language (Язык по умолчанию) из вложенного списка следует выбрать язык - ANSI C++.

Если по какой-то причине языка ANSI C++ не оказалось во вложенном списке, то следует убедиться в том, что этот язык программирования установлен в качестве расширения IBM Rational Rose . Для этого следует открыть окно установленных расширений, выполнив операцию главного меню: Add-Ins Add-In Manager (Расширения Менеджер расширений), и убедиться в том, что выставлена отметка в строке с именем языка ANSI C++. Если ее нет, то ее следует добавить, после чего появится группа доступных операций ANSI C++ в главном меню Tools.

После выбора языка программирования по умолчанию следует изменить язык реализации каждого из компонентов модели. С этой целью следует изменить язык в строке Language (Язык) на вкладке General (Общие) окна спецификации свойств компонента, для чего из вложенного списка следует выбрать язык - ANSI C++ (рис. 5).

Рис. 5. Окно спецификации свойств компонента MainATM.exe при выборе языка его реализации

Следует заметить, что после выбора языка программирования следует привести в соответствие типы атрибутов, типы аргументов и возвращаемых значений операций. С этой целью нужно просмотреть все классы диаграммы классов и изменить те типы данных, которые не являются синтаксически допустимыми в выбранном языке программирования. Применительно к языку ANSI C++ следует заменить тип Integer на int, Boolean на bool, Currency на float. В противном случае соответствующие исправления придется выполнять вручную после генерации программного кода.

Редактирование общих свойств генерации программного кода возможно в специальном диалоговом окне, которое может быть открыто в результате выполнения операции главного меню: Tools ANSI C++ Open ANSI C++ Specification (Инструменты Язык ANSI C++ Открыть спецификацию языка ANSI C++ ). Дополнительные свойства генерации программного кода отдельного класса можно специфицировать в диалоговом окне, которое может быть открыто в результате выполнения операции контекстного меню: ANSI C++ Class Customization (Язык ANSI C++ Настройка свойств класса ). При этом соответствующий класс должен быть выделен в браузере проекта.

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

Выбор класса или компонента и генерация для него программного кода

Выбор класса или компонента для генерации программного кода означает выделение соответствующего элемента модели в браузере проекта. Применительно к рассматриваемой модели системы управления банкоматом для генерации программного кода на языке ANSI C++ выберем компонент с именем MainATM.exe.

Генерация программного кода в среде IBM Rational Rose возможна для отдельного класса или компонента. Для этого нужный элемент модели предварительно следует выделить в браузере проекта и выполнить операцию контекстного меню: ANSI C++ Generate Code_ (Язык ANSI C++ Генерировать код). В результате этого будет открыто диалоговое окно с предложением выбора классов для генерации программного кода на выбранном языке программирования (рис. 6). После выбора соответствующих классов и нажатия кнопки OK программа IBM Rational Rose выполняет кодогенерацию.

Рис. 6. Окно выбора классов для генерации программного кода

Для просмотра и редактирования созданных файлов с текстом программного кода на языке ANSI C++ предназначен встроенный текстовый редактор, который можно открыть с помощью операции контекстного меню: ANSI C++ Browse Header_ (Язык ANSI C++ Просмотреть заголовочный файл ) или ANSI C++ Browse Body_ (Язык ANSI C++ Просмотреть файл реализации ) для выбранного класса в браузере проекта.

После генерации программного кода для компонента MainATM.exe каждому классу, реализованному в данном компоненте, будет соответствовать 2 файла с текстом кода на языке ANSI C++. Так, например, для класса ATMTransaction будет сгенерирован заголовочный файл с расширением "h" (рис. 7) и файл реализации с расширением "cpp" (рис. 8).

Рис. 7. Вид встроенного текстового редактора с загруженным в него заголовочным файлом ATMTransaction.h

Рис. 8. Вид встроенного текстового редактора с загруженным в него заголовочным файлом ATMTransaction.cpp

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

В файле реализации содержится заготовка для реализации всех операций класса ATMTransaction в соответствии с правилами синтаксиса языка ANSI C++. При этом каждая из операций имеет пустое тело реализации, которое следует написать дополнительно, исходя из функциональных требований модели и синтаксиса языка программирования ANSI C++. Данную работу удобнее выполнять в выбранной интегрированной среде программирования, например, MS Visual C++ или Borland C++. При использовании интегрированной среды кроме компиляции, отладки и тестирования исходных модулей программы разработчик получает возможность дополнить приложение графическим интерфейсом, необходимым для взаимодействия с пользователем.

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

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

В заключение следует отметить, что эффект от использования средства IBM Rational Rose проявляется при разработке масштабных проектов в составе команды или проектной группы. Действительно, при рассмотрении модели системы управления банкоматом может сложиться впечатление того, что написать и отладить соответствующую программу гораздо проще непосредственно в той или иной интегрированной среде программирования.

Однако ситуация покажется не столь тривиальной, когда станет необходимо выполнить проект с несколькими десятками вариантов использования и сотней классов. Именно для подобных проектов явно выявляется преимущество использования средства IBM Rational Rose и нотации языка UML для документирования и реализации соответствующих моделей.

Лабораторная работа 15

Моделирование программных систем средствами Rational Rose

Система Rational Rose – признанный лидер среди средств визуального моделирования, используя ее можно интерактивно разрабатывать архитектуру создаваемого приложения, генерировать его исходные тексты и параллельно работать над документированием разрабатываемой системы.

Преимущества применения Rational Rose:

· сокращение цикла разработки приложения;

· увеличение продуктивности работы программистов;

· улучшение потребительских качеств создаваемых программ за счет ориентации на пользователей и бизнес;

· способность вести большие проекты и группы проектов;

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

·

Диаграммы, использующиеся в работе

Class diagram (диаграммы классов). Этот вид диаграмм позволяет создавать логическое представление системы, на основе которого создается исходный код описанных классов. Диаграмма классов служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования и содержит детальную информацию об архитектуре программной системы.

Рисунок 1 – Пример диаграммы классов

Activity diagram (диаграммы деятельности или активности). Каждый объект системы, обладающий определенным поведением, может находиться в определенных состояниях, переходить из состояния в состояние, совершая определенные действия в процессе реализации сценария поведения объекта. Поведение большинства объектов реальных систем можно представить с точки зрения теории конечных автоматов, то есть поведение объекта отражается в его состояниях. Для графического отображения состояния объекта используется два вида диаграмм: Statechart diagram (диаграмма состояний) и Activity diagram (диаграмма активности).

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

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

Рисунок 2 – Пример диаграммы деятельности

Component diagram (диаграммы компонентов). Этот тип диаграмм предназначен для распределения классов и объектов по компонентам при физическом проектировании системы. Часто данный тип диаграмм называют диаграммами модулей. Диаграмма компонентов служит частью физического представления модели и является необходимой для генерации программного кода.

Рисунок 3 – Пример диаграммы компонентов

Отношения на диаграммах

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

Ассоциация – это структурное двунаправленное отношение, описывающее совокупность взаимоотношений между объектами. Ассоциация может иметь имя и кратность. Кратность (multiplicity) ассоциации указывается рядом с обозначением компонента диаграммы, который является участником данной ассоциации. Кратность характеризует общее количество конкретных экземпляров данного компонента, которые могут выступать в качестве элементов данной ассоциации. Наиболее распространенными являются следующие формы записи кратности отношения ассоциации:

1. Целое неотрицательное число (включая цифру 0). Предназначено для указания кратности, которая является строго фиксированной для элемента соответствующей ассоциации.

2. Два целых неотрицательных числа, разделенные двумя точками и записанные в виде: "первое число .. второе число", например, 1.. Очевидно, что первое число должно быть строго меньше второго числа в арифметическом смысле, при этом первое число может быть равно 0.

3. Два символа, разделенные двумя точками. При этом первый из них является целым неотрицательным числом или 0, а второй – символом "*" или "n". Здесь символ "*" или "n" обозначает произвольное конечное целое неотрицательное число, значение которого неизвестно на момент задания соответствующего отношения ассоциации.

4. Единственный символ "*" или "n". Является сокращением записи интервала формы записи 3.

Если кратность отношения ассоциации не указана, то по умолчанию принимается ее значение, равное 1.

Частным случаем ассоциации является отношение типа "часть/целое". Отношение такого типа называется агрегированием. Агрегирование изображается в виде ассоциации с незакрашенным ромбом со стороны целого.

Обобщение – это однонаправленное отношение, называемое "потомок/прародитель", в котором объект "потомок" может быть подставлен вместо объекта прародителя (родителя или предка). Потомок наследует структуру и поведение своего родителя. Графически обозначается сплошной линией со стрелкой в форме незакрашенного треугольника. Стрелка всегда указывает на родителя.

РАБОЧИЕ ЗАДАНИЯ

Задание 1. Построить диаграмму, изображающую логическую схему базы данных, на примере базы данных автоматизированной информационной системы регистрации учебных курсов. Порядок выполнения:

1.1. В новом окне самостоятельно создать диаграмму классов, которая состоит из следующих классов:

· Вуз;

· Факультет;

· Студент;

· Курс;

· Преподаватель.

1.2. Для созданных классов установить атрибуты как показано на рис. 4.

Рисунок 4 – Диаграмма классов с атрибутами

1.3. Установить взаимосвязи между классами в соответствии с рис. Если кнопка агрегации отсутствует на специальной панели инструментов, ее следует добавить с помощью операции контекстного меню Customize.

Рисунок 5 – Диаграмма классов, моделирующая объекты системы регистрации курсов и отношения между ними

Задание 2. Построить диаграмму деятельности, изображающую процесс "Открытие регистрации" в автоматизированной информационной системе регистрации учебных курсов. Порядок выполнения:

2.1. Открыть рабочее окно для построения диаграммы деятельности Activity Diagram с помощью контекстного меню представления Use Case View в браузере проекта.

Рисунок 6 – Вид контекстного меню создания диаграммы деятельности

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

2.2. Создать деятельности в окне браузера проекта в соответствии с рисунком 7.

Рисунок 7 – Окно браузера проекта

2.3. Созданные деятельности перетащить в окно диаграммы деятельности и расположить как на рисунке 8.

Рисунок 8 – Окно диаграммы деятельности

2.4. С помощью специальной панели инструментов добавить на диаграмму элемент принятия решения (ветвления) для альтернативных переходов и расположить его как на рис. 9.

Рисунок 9 – Фрагмент окна диаграммы деятельности

2. С помощью команды Open Specification … контекстного меню элемента ветвления задать вопрос условия перехода: "Все ли преподаватели назначены?" (рис. 10).

Рисунок 10 – Диалоговое окно свойств объекта ветвления диаграммы

2.6. С помощью специальной панели инструментов добавить на диаграмму синхронизационную черту для отображения условия, соответствующего логическому оператору "и", а также переходы между деятельностями как на рис. 11.

Рисунок 11 – Диаграмма деятельности, которая моделирует действия, выполняемые в процессе создания системы регистрации учебных курсов

Задание 3. Построить диаграмму классов, изображающую простой графический редактор. В графическом редакторе использовать следующие основные классы:

1. Figure (фигура);

2. Figure Element (элемент фигуры);

3. Point (точка);

4. Line (линия).

Порядок выполнения:

3.1. Создать и расположить все описанные выше классы в соответствии с рис. 12.

Рисунок 12 – Окно диаграммы классов графического редактора

3.2. Созданной диаграмме дать имя Display. Для этого воспользоваться инструментом TextBox на специальной панели инструментов.

3.3. Изменить стиль форматирования надписи с помощью команд Format... → Font... из контекстного меню надписи. Установить шрифт полужирный, подчеркнутый, размер – 12 пт.

3.4. Для класса Figure добавить операции как на рис. 13.

Рисунок 13 – Операции класса Figure

3. Для класса Figure Element добавить операцию с аргументами move By(int , int) . Операция move By перемещает объект в точку экрана с координатами (X : integer; Y : integer). Чтобы задать аргументы операции необходимо в диалоговом окне Class Specification for Figure Elemen щелкнуть правой кнопкой на имени операции и в контекстном меню выбрать пункт Specification…

Рисунок 14 – Диалоговое окно для задания дополнительных свойств операции move By

В этом диалоговом окне на вкладке Detail с помощью команды Insert контекстного меню задать аргументы Х типа Integer и Y типа Integer.

Рисунок 15 – Диалоговое окно аргументов операции move By

Если все сделано правильно, то после щелчка на операции move By в окне диаграммы классов появятся аргументы этой операции как на рис. 16.

Рисунок 16 – Отображение аргументов операции move By класса Figure Element

3.6. Для класса Point задать следующие операции:

· get X();

· get Y();

· set X(int);

· set Y(int);

· move By(int;int).

3.7. Для класса Line задать следующие операции:

· get P1();

· get P2();

· set P1(Point);

· set P2(Point);

· move By(int;int).

Рисунок 17 – Окно диаграммы классов с заданными отношениями

3.8. Установить взаимосвязи между классами как на рис. 18.

Рисунок 18 – Диаграмма классов графического редактора

Задание 4. Сгенерировать программный код графического редактора на языке ANSI C++. Порядок выполнения:

4.1. Проверить модель на отсутствие ошибок. Для этого выполнить операцию главного меню: Tools → Check Model (Инструменты → Проверить модель). Результаты проверки разработанной модели на наличие ошибок отображаются в окне журнала. Прежде чем приступить к генерации текста программного кода разработчику следует добиться устранения всех ошибок и предупреждений, о чем должно свидетельствовать чистое окно журнала (рис. 19).

Рисунок 19 – Проверка модели на отсутствие ошибок

4.2. Создать компоненты для реализации классов. В браузере проекта предназначено отдельное представление компонентов Component View, в котором уже содержится диаграмма компонентов с пустым содержанием и именем по умолчанию Main (Главная). Для активизации диаграммы компонентов в браузере проекта раскрыть представление Component View и дважды щелкнуть на пиктограмме Main. В результате выполнения этих действий появляется новое окно с чистым рабочим листом диаграммы компонентов и специальная панель инструментов, содержащая кнопки для разработки диаграммы компонентов. Далее добавить в область диаграммы компонентов элемент Component и задать ему имя MainPaint.exe.

Рисунок 20 – Диаграмма компонентов

4.3. Отобразить классы на компоненты. Для этого воспользоваться окном спецификации свойств компонента, открытого на вкладке Realizes (Реализует). Для включения реализации класса в данный компонент следует выделить требуемый класс на этой вкладке и выполнить для него операцию контекстного меню Assign (Назначить). В результате перед именем класса на этой вкладке появится специальная отметка.

Рисунок 21 – Связывание классов с компонентом

4.4 . Выбрать языка программирования для генерации программного кода.

Для выбора языка ANSI C++ в качестве языка реализации модели следует выполнить операцию главного меню: Tools → Options (Инструменты → Параметры), в результате чего будет вызвано диалоговое окно настройки параметров модели. Далее на вкладке Notation (Нотация) в строке Default Language (Язык по умолчанию) из вложенного списка следует выбрать язык ANSI C++.

Рисунок 22 – Диалоговое окно выбора языка программирования

После выбора языка программирования по умолчанию следует изменить язык реализации каждого из компонентов модели. Для этого в окне диаграммы компонентов с помощью контекстного меню компонента открыть окно спецификации свойств компонента и на вкладке General (Общие) в строке Language (Язык) из вложенного списка выбрать язык ANSI C++.

Рисунок 23 – Диалоговое окно выбора языка реализации компонентов

4. Сгенерировать программный код.

Генерация программного кода в среде IBM Rational Rose возможна для отдельного класса или компонента . Для этого выполнить операцию контекстного меню компонента ANSI C++ → Generate Code… (Язык ANSI C++ → Генерировать код). В результате этого будет открыто диалоговое окно, в котором необходимо указать путь для сохранения сгенерированных файлов, а затем окно с предложением выбора классов для генерации программного кода на выбранном языке программирования.

Рисунок 24 – Окно выбора классов для генерации программного кода

После генерации программного кода для компонента MainPaint.exe каждому классу, реализованному в данном компоненте, будет соответствовать 2 файла с текстом кода на языке ANSI C++:

· заголовочный файл с расширением .h;

· файл реализации с расширением .cpp.

Рисунок 25 – Сгенерированные файлы

Контрольные вопросы

1. Какие преимущества предоставляет программа Rational Rose?

2. Как создать диаграмму классов в программе Rational Rose?

3. Какие атрибуты классов Вам известны?

4. Как задать аргументы операции на диаграмме классов?

Какие элементы содержит специальная панель инструментов для создания диаграммы классов?

6. Как добавить элемент на специальную панель инструментов?

7. Что называют агрегированием в UML?

8. Что представляет собой диаграмма деятельности?

9. Как создать диаграмму деятельности в программе Rational Rose?

10. Какие элементы содержит специальная панель инструментов для создания диаграммы деятельности?

11. Как задать вопрос условия перехода для элемента ветвления?

12. Зачем на диаграмме деятельности используется синхронизационная черта?

13. Какое назначение диаграммы компонентов?

14. Как создать диаграмму компонентов в программе Rational Rose?

1 Опишите последовательность генерации программного кода в Rational Rose.

16. Какие файлы создаются при генерации программного кода на языке ANSI C++?

17. Какие элементы содержит специальная панель инструментов для создания диаграммы компонентов?