37972

Генерация кода С++

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

Информатика, кибернетика и программирование

Изучение фаз процесса генерации кода: создания наборов свойств определения спецификаций компонентов выбора языка С для компонентов отнесения классов к компонентам связывания наборов свойств с элементами модели генерации кода анализа ошибок. Создание наборов свойств. Связывание наборов свойств с элементами модели. Генерация кода Создание наборов свойств При генерации кода учитываются свойства проекта в целом а также свойства уровней классов ролей атрибутов и операций.

Русский

2013-09-25

3.1 MB

5 чел.

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

Генерация кода С++

Цель работы. Изучение фаз процесса генерации кода: создания наборов свойств, определения спецификаций компонентов, выбора языка С++ для компонентов, отнесения классов к компонентам, связывания наборов свойств с элементами модели, генерации кода, анализа ошибок. Приобретение практических навыков генерации кода в среде Rational Rose.

Краткие теоретические сведения

Руководство по генерации кода на языке программирования С++ средствами Racional Rose.

Соответствующий генератор кода не включается по умолчанию, – следует выбрать элемент меню Add-Ins         Add In Manager, в одноименном диалоговом окне установить флажок Rose C++ и закрыть окно щелчком на кнопке ОК.

Ниже перечислены фазы процессов генерации кода .

  1.  Создание наборов свойств.
  2.  Определение спецификаций компонентов.
  3.  Выбор языка С++ для компонентов.
  4.  Отнесение классов к компонентам.
  5.  Связывание наборов свойств с элементами модели.
  6.  Генерация кода.
  7.  Анализ ошибок.

Генерация кода

  1.  Создание наборов свойств

При генерации кода учитываются свойства проекта в целом, а также свойства уровней классов, ролей, атрибутов и операций. К свойствам, регламентирующим характеристики проекта как такового, относятся имя файла проекта, названия контейнерных классов, используемых по умолчанию, и местоположение генерируемого кода. Свойства уровня класса обусловливают необходимость и способы создания конструкторов, деструкторов, конструкторов копии, операторов сравнения и методов get/set. Набор свойств роли определяет потребность в использовании методов get/set, признаки видимости методов и варианты применения того или иного контейнерного класса. Свойства операции позволяют отнести последнюю к одной из разновидностей (common – общая, virtual -  виртуальная, abstract – абстрактная, static – статическая, frient – «дружественная») и /или придать ей статус «постоянной» (constant). Ratinal Rose предоставляет возможность создания любого количества наборов свойств, отвечающих существу проекта, и их редактирования. Для каждого класса генерируются два файла – файл заголовка(.h) и файл спецификации (.cpp).

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

Как создать набор свойств

1. Выбрать элемент меню Tool          Options.

2. Перейти на вкладку С++ диалогового окна Options.

3. В раскрывающемся списке Type установить требуемый тип набора свойств.

4. Щелкнуть на кнопке Clone, чтобы открыть диалоговое окно Clone Property Set.

5. Ввести наименование нового набора свойств и закрыть окно щелчком на кнопке ОК.

6. В списке Model Properties выбрать свойство, подлежащее модификации, и щелкнуть в пределах столбца Value.

7. Ввести новое значение свойства, либо выбрать таковое с помощью раскрывающе-гося списка.

  1.  Повторить действия, перечисленные в п.п. 6, 7, для каждого свойства, которое должно быть изменено.
  2.  Щелкнуть на кнопке Apply, чтобы сохранить информацию.
  3.  Повторить действия, перечисленные в п.п. 3-9, с целью создания остальных наборов свойств.
  4.  Закрыть диалоговое окно Options щелчком на кнопке ОК.

Процесс создания набора свойств «виртуальный деструктор» проиллюстрирован на рис. А.1.

Рис. А.1. Создание набора свойств

  1.  Определение спецификаций компонентов

Rational Rose генерирует код, принимая во внимание номенклатуру созданных компонентов в совокупности с их стереотипами. Для каждого компонента без стереотипа система генерирует файл .h, содержащий информацию объявления и определения соответствующего класса. Если компонент снабжен стереотипом Package Specification, генерируется файл .h с объявлением класса. Если же при этом существует надлежащий компонент со стереотипом Package Body, генерируется и файл .cpp с определением класса.

Как определить или  создать  стереотип компонента

  1.  Двойным щелчком на элементе дерева в окне Browser, представляющем диаграмму компонентов, открыть окно диаграммы.
  2.  Расположить курсор мыши над элементом диаграммы, отвечающим требуемому компоненту, и щелкнуть правой кнопкой, чтобы активизировать контекстное меню.
  3.  Выбрать элемент меню Open Specification.
  4.  Перейти на вкладку General диалогового окна Component Specification.
  5.  В поле Stereotype ввести значение стереотипа, либо выбрать таковое с помощью раскрывающегося списка.
  6.  Закрыть диалоговое окно щелчком на кнопке ОК.

Диалоговое окно Component Specification изображено на рис. А.2.

Рис. А.2. Спецификация компонента

Как создать заголовок и тело компонента

  1.  Двойным щелчком на элементе дерева в окне Browser, представляющем диаграмму компонентов, открыть окно диаграммы.
  2.  Расположить курсор мыши над элементом диаграммы, отвечающим требуемому компоненту, и щелкнуть правой кнопкой, чтобы активизировать контекстное меню.
  3.  Выбрать элемент меню Open Specification.
  4.  Перейти на вкладку General диалогового окна Component Specification.
  5.  В раскрывающемся списке Stereotype выбрать значение стереотипа Package Specification для файла заголовка компонента, либо значение Package Body – для файла, содержащего тело кода компонента.
  6.  Закрыть диалоговое окно щелчком на кнопке ОК.

Пример диаграммы компонентов, элементы которой отвечают файлам .h и .cpp, приведен на рисунке А.3.

Рис. А.3. Уточненная диаграмма компонентов

  1.  Выбор языка С++ для компонентов

Как только компоненты, представляющие файлы .h и .cpp, созданы, им должен быть поставлен в соответствие язык программирования (С++). (Если языком, предлагаемым по умолчанию, является С++, - обратитесь к раскрывающемуся списку Default Language на вкладке Notation диалогового окна Options, активизируемого командой меню Tools      Options,  -  система автоматически выбирает опцию С++ для каждого компонента модели.)

Как выбрать язык программирования для компонента

  1.  Щелчком правой кнопки мыши указать компонент в дереве окна Browser либо на диаграмме компонентов и активизировать контекстное меню.
  2.  Выбрать элемент меню Open Specification.
  3.  Перейти на вкладку General диалогового окна Component Specification.
  4.  В раскрывающемся списке Language выбрать требуемую опцию (в данном случае – С++).
  5.  Закрыть диалоговое окно щелчком на кнопке ОК.

Окно спецификации компонента «курс» показано на рис. А.4.

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

4. Отнесение классов к компонентам

После создания компонентов, представляющих файлы .h, с ними следует сопоставить те или иные классы модели.

Как отнести класс к компоненту

  1.  Двойным щелчком на элементе дерева в окне Browser, представляющем диаграмму с компонентами файлов .h и .срр, открыть окно диаграммы.
  2.  Выбрать класс в дереве окна Browser, перетащить в окно диаграммы и опустить на компонент, соответствующий требуемому файлу .h.
  3.  Связывание наборов свойств с элементами модели

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

Как связать набор свойств с элементом модели

  1.  Щелчком правой кнопки мыши указать элемент модели в дереве окна Browser либо на диаграмме и активизировать контекстное меню.
  2.  Выбрать элемент меню Open Specification.
  3.  Перейти на вкладку С++ диалогового окна спецификации элемента.
  4.  В раскрывающемся списке Set выбрать требуемый набор свойств.
  5.  Закрыть диалоговое окно щелчком на кнопке ОК.

Окно спецификации класса «пользователь» изображено на рис. А.5.

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

Как переопределить свойство элемента модели

  1.  Щелчком правой кнопки мыши указать элемент модели в дереве окна Browser либо на диаграмме и активизировать контекстное меню.
  2.  Выбрать элемент меню Open Specification.
  3.  Перейти на вкладку С++ диалогового окна спецификации элемента.
  4.  В раскрывающемся списке Set  выбрать требуемый набор свойств.
  5.  В списке Model Properties указать свойство, подлежащее модификации, и щелкнуть в пределах столбца Value.
  6.  Ввести новое значение свойства либо выбрать таковое с помощью раскрывающегося списка.
  7.  Повторить действия, перечисленные в пп. 5, 6, для каждого свойства, которое должно быть изменено.
  8.  Щелкнуть на кнопке Override.
  9.  Закрыть диалоговое окно щелчком на кнопке ОК.
  10.  Генерация кода

Код может быть сгенерирован для пакета в целом, для отдельного компонента либо группы компонентов. В качестве имени файла, в который помещается код, выбирается наименование пакета или компонента. Файл располагается в структуре каталогов, соответствующей поддереву Component View дерева Browser.

Как сгенерировать код

  1.  Щелчком выбрать пакет, компонент или группу компонентов в дереве окна Browser либо на диаграмме.
  2.  Выбрать элемент меню Tools  C++  Code Generation.
  3.  Система осуществит генерацию кода и воспроизведет информацию о результатах в диалоговом окне Code Generation Status.

Окно Code Generation Status с данными об итогах генерации приведено на рис. А.6 (символы кириллицы в названиях элементов модели отображаются посредством восьмеричных кодов.).

Порядок выполнения работы.

  1.  Загрузить Rational Rose  и объектную модель (диаграммы) системы учета университетских курсов (см. лабораторные работы #1-7).
  2.  Создать набор свойств (стр. 156-157, рис.А.11).
  3.  Определить или создать стереотип компонента Курс (стр.157-158, рис.А.2).
  4.  Создать заголовок и тело компонентов (уточненную диаграмму компонентов) (стр. 158-159, рис. А.3).
  5.  Выбрать язык программирования для компонента Курс (стр. 158-159, рис.А.4).
  6.  Отнести классы к компонентам (стрю159-160).
  7.  Связать набор свойств с элементом модели (160-161, рис. А.5).
  8.  Сгенерировать код для пакета, для отдельного компонента либо группы компонентов (стр. 161). В качестве имени файла, в который помещается код, выбирается наименование пакета или компонента. Файл располагается в структуре каталогов, соответствующей поддереву Component View дерева Browser.

Список используемой литературы

1. Кватрани Е. Rational Rose 2000 и UML. Визуальное моделирование. 2001. 176с.

2. Г. Буч Объектно-ориентированный анализ и проектирование с примерами приложений на С++. 1998/2000, 560с.

3. Конспект лекций.


 

А также другие работы, которые могут Вас заинтересовать

19835. Русская правда 16.61 KB
  Русская правда Русская Правда сохранилась в большом количестве свыше 110 списков XIIIXVIII вв. Все тексты Правды находятся в составе какихлибо сборников или летописей. По своим особенностям списки Правды могут быть разделены на три основных памятника: 1 Краткую 2 Прост
19836. Уголовное право по Русской правде 17.84 KB
  Уголовное право по Русской правде Уголовное право это основная часть судебника. Преступление Субъектами преступления были все физические лица включая холопов без возрастного ценза при наличии у них ясного сознания. Субъективная сторона преступления включала
19837. Суд и судопроизводство по Русской правде 21.69 KB
  Суд и судопроизводство по Русской правде Самостоятельных судебных органов нет суд производился представителями администрации. Высшей судебной инстанцией был великий князь. Князь поручал правосудие тиунам и своим отрокам. Чиновники которым надлежало решить у...
19838. Причины и предпосылки политической раздробленности 18.34 KB
  Причины и предпосылки политической раздробленности XII XIII вв. После смерти князя Ярослава 1054 вся территория Киевской Руси была разделена между его сыновьями. Постоянный рост членов княжеских династий и дробление земельных наделов между ними сопровождались пост...
19839. Правовое положение населения по Русской правде 20.98 KB
  Правовое положение населения по Русской правде В Киевской Руси можно выделить 3 основных социальных класса. 1. Представители привилегированного слоя: Бояре советники старшие дружинники князя; Княжьи мужи лица исполняющие важнейшие поручения князя близкие к н...
19840. Гражданское право по Русской Правде 19.3 KB
  Гражданское право по Русской Правде Гражданское право это вещное и семейное право. Разделов нет. Упоминается о праве собственности по отношению движимых вещей. Понятие недвижимости ещё нет земля принадлежит общине или всему роду боярскому родовая традиция.
19841. Регулирование вещного права по Псковской судной грамоте 24.49 KB
  Регулирование вещного права по Псковской судной грамоте Вещное право разделяло имущество на недвижимые отчина и движимые живот; различало наследственное вотчина и условное кормля землевладение. Большое внимание уделялось земле как объекту права собствен...
19842. Понятие компьютинга и дискретной математики 214.5 KB
  Лекция 1 Понятие компьютинга и дискретной математики Компьютинг computing это широкая область знаний которая не может быть сведена к рамкам какойлибо из составляющих ее дисциплин. Основы компьютинга включают в себя основы информатики и математики необходимые для п
19843. Исследование статической характеристики измерительной системы 169 KB
  Лабораторная работа №1 Исследование статической характеристики измерительной системы 1. Цель работы Цель работы закрепить теоретический материал по статическим характеристикам измерительных систем и научиться производить анализ статических характерис...