37972

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

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

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

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

Русский

2013-09-25

3.1 MB

4 чел.

Лабораторная работа №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. Конспект лекций.


 

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

3380. Элементы кинематики 359 KB
  Лекция 1. Элементы кинематики. Введение. Основные кинематические понятия и характеристики. Нормальное, тангенциальное и полное ускорения. Угловая скорость, угловое ускорение. 1. Введение. Физику можно назвать наукой о н...
3381. Обработка результатов измерений в физическом практикуме 303.5 KB
  Содержит изложение методики обработки результатов измерений, получаемых во время практических занятий в учебной лаборатории. Предназначен для оказания помощи студентам технических специальностей всех форм обучения при подготовке к лабораторным работ...
3382. Потенциал электростатического поля. Диэлектрики в электростатическом поле 350 KB
  Потенциал электростатического поля. Диэлектрики в электростатическом поле. Работа при перемещении заряда в электростатическом поле. Потенциал. Разность потенциалов. Связь между напряженностью и потенциалом электростатического поля. Эквип...
3383. Изучение свободных колебаний математического и пружинного маятников 398.5 KB
  Изучение свободных колебаний математического и пружинного маятников Цель работы: изучение физических основ свободных незатухающих колебаний, определение ускорения свободного падения с помощью математического маятника и коэффициента упругости пружины...
3384. Книжные социальные сети как канал распространения издательской и книготорговой библиографической информации 104 KB
  Книжные социальные сети как канал распространения издательской и книготорговой библиографической информации На сегодняшний день в мире существует более 130 миллионов компьютеров и более 80 % из них объединены в различные информационные сети от малых...
3385. Проектирование фундаментов производственных зданий 606.5 KB
  ИСХОДНЫЕ ДАННЫЕ - тип объекта – производственное здание с подвалом и гибкой конструктивной схемой    - район строительства – г. Магнитогорск; -величины нагрузок на фундаменты представлены в табл. 1. Таблица 1 Величины нагрузок...
3386. Рассчитать и спроектировать резец для обработки наружной поверхности детали 8.03 MB
  Оправки в шпинделе закрепляют штоком, проходящим через шпиндель станка. Шток имеет на конце захватное устройство. Инструментальные оправки имеют соответствующие этому устройству наружные, внутренние или резьбовые поверхности захвата...
3387. Реконструкция многоквартирного крупноблочного дома серии 1-439А 888.5 KB
  При модернизации и реконструкции жилых зданий массовой застройки предусматривается решение следующих задач: приведение планировочной структуры здания в соответствие с требованиями к потребительским и эксплуатационным качествам современного ...
3388. Проект разработки роторного снегоочистителя 857.5 KB
  В процессе подготовки будущего инженера к самостоятельному решению технических и производственных задач одно из ведущих мест принадлежит курсовому проектированию. Цель данного курсового проекта – закрепить и обобщить теоретический мате...