ЛР №6 - Построение моделей проектирования и реализации в инструментальной среде и автоматическая генерация кода, страница 4
Описание файла
Документ из архива "ЛР №6 - Построение моделей проектирования и реализации в инструментальной среде и автоматическая генерация кода", который расположен в категории "". Всё это находится в предмете "технологии разработки программного обеспечения (по)" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "технологии разработки программного обеспечения" в общих файлах.
Онлайн просмотр документа "ЛР №6 - Построение моделей проектирования и реализации в инструментальной среде и автоматическая генерация кода"
Текст 4 страницы из документа "ЛР №6 - Построение моделей проектирования и реализации в инструментальной среде и автоматическая генерация кода"
Листинг 2. Route.cpp
#include "Route.h" //Начало секции для класса Route.cpp //TODO: Добавьте определения, которые должны быть сохранены //Завершение секции для файла Route.cpp float Route::getFare() const { //TODO Автоматически сгенеренный метод заглушек return 0; } |
Изменение конфигурации преобразования
-
В проводнике проекта выберите созданное преобразование, двойным щелчком откройте его свойства. На вкладке Main – можно запустить прямое и обратное преобразования (Run), на других вкладках – изменить свойства преобразования (например, источник и приемник).
-
Для просмотра кода откройте в проводнике проекта новый проект и просмотрите его состав:
Изменение кода
Вы должны были заметить, что тело по умолчанию вряд ли используется часто, потому что тариф всегда равен 0 (нулю). Вряд ли это сделает предприятие выгодным! Поэтому нам придется заменить тело метода getFare кодом, представленным в листинге 3.
Листинг 3. Route.cpp
float Route::getFare() const { // Расчет тарифа return runningCost * expectedProfit; } |
Разработка модели и повторное применение преобразования
Далее, добавим еще один метод с именем print_disclaimer() в класс Route UML-модели.
-
Укажите тип возврата для метода - String;
-
Обратите внимание на то, что мы изменили также файл Route.cpp, добавив тело для метода getFare;
-
Выполните преобразование, воспользовавшись той же конфигурацией преобразования (tc1.tc > Transformation > UML to C++);
-
Согласитесь с настройками по умолчанию, которые вы увидите в диалоговом окне; они предупреждают о том, что будут обновлены файлы назначения.
После этого изучите обновленный код (Листинг 4).
Листинг 4. Обновленный файл Route.cpp
#include "Route.h" //Начало секции для файла Route.cpp //TODO: Добавьте определения, которые должны быть сохранены //Завершение секции для файла Route.cpp float Route::getFare() const { // Расчет тарифа return runningCost * expectedProfit; } //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" const char * Route::print_disclaimer() { //TODO Автоматически сгенеренный метод заглушек return 0; } Обратное преобразование |
После изменения исходных файлов классов вернитесь к вкладке конфигурации преобразования и запустите обратное преобразование (Run):
В результате будет открыто окно, где можно просмотреть и утвердить (флажками) выполняемые изменения
Все утвержденные изменения будут внесены в UML модель, что можно проверить в свойствах классов (в проводнике проекта или на диаграммах).
Тэг @generated
В комментариях к методу вы наверняка обратили внимание на тэг <<@generated>>. Тело метода сохраняется автоматически. Однако если вы удалите метод из модели и снова выполните преобразование С++, то метод будет удален вместе с телом кода. Это гарантирует, что ваш код не будет засоряться всевозможными методами, которые вы когда-либо разработали в модели и которые иначе пришлось бы удалять из него вручную.
Если вы не хотите, чтобы это случилось, и, наоборот, хотите сохранить данный метод в коде, то вам придется удалить тэг <<@generated>> из комментария к методу. Таким образом, вы сохраните контроль над этим методом, и он останется в коде после повторного выполнения преобразования.
Обратите внимание, что измененное тело для метода getFare() сохранено. В то же время новый метод print_disclaimer, добавленный в модель, вызвал генерацию нового кода в файлах Route.h и Route.cpp files. Так вы можете продолжать реализовать свои методы в коде и, одновременно, вносить поэтапные изменения в модель. Благодаря этому у вас появляется возможность вести управляемую моделями итеративную разработку.
Добавление пользовательских предложений include в секцию сохраняемого кода
В листинге 5 мы написали код для метода print_disclaimer. Обратите внимание на использование оператора cout. Преобразованию С++ об этом ничего не известно. Однако, чтобы повторное выполнение прошло корректно, важно, чтобы код можно было подвергнуть синтаксическому разбору для сохранения структуры кода и тела методов при повторном выполнении преобразования. Чтобы сделать код компилируемым, необходимо добавить в файл с расширением cpp предложения #include <iostream> и using namespace std. Эти предложения обязательно будут сохранены при повторных выполнениях преобразования UML - C++. Для этого необходимо вставить указанные предложения между комментариями:
//Начало секции для файла Route.cpp //Завершение секции для файла Route.cpp |
Все, что вы добавите в эту секцию, будет сохранено дословно и не будет интерпретироваться преобразованием С++.
Листинг 5. Route.cpp
#include "Route.h" //Начало секции для файла Route.cpp #include <iostream> using namespace std; //Завершение секции для файла Route.cpp float Route::getFare() const { // Расчет тарифа return runningCost * expectedProfit; } //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)" const char * Route::print_disclaimer() { const char *s = "No Refund once the ticket is purchased\n"; cout << s; return s; } Построение схемы базы данных в IBM Rational Systems Developer и Rational Software Architect(По материалам Энсон Коккат - IBM) Создать проект типа Data Design Project: В окне мастера ввести название проекта, нажать Finish. Будет создан проект и переключится перспектива (на Data). В контекстном меню Data Model выбрать создание новой физической модели данных:
В окне мастера указать СУБД и ее версию, например, MS SQL Server 2008: И нажать Next, Finish. Далее открыть диаграмму и перенести на нее из панели инструментов таблицы и другие элементы БД. Построить схему БД (таблицы, атрибуты, связи, первичные и внешние ключи), например,
После создания схемы преобразовать ее в DDL сценарий:
Сохранить полученный сценарий в файле и выполнить на сервере БД. Проверить полученную структуру данных. Документирование UML-моделей в IBM Rational Systems Developer и Rational Software ArchitectВыбрать в обозревателе проекта нужную модель (например, модель анализа). Выбрать в меню пункт
Указать путь к папке И нажать ОК. После чего перейти в указанную папку и открыть файл index.html в интернет-браузере.
|
Задание
-
Открыть в среде Software Architect проект, созданный ранее.
-
Добавить к нему пустую модель Design - Deployment.
-
Создать в ней диаграмму размещения (узлы и связи между ними).
-
Указать стереотипы узлов.
-
Добавить на диаграмму актеров и указать их ассоциации с узлами.
-
Добавить к проекту пустую модель Design - Design.
-
Создать диаграмму классов или общего вида (трассировка пакетов в подсистемы). Перенести на нее созданные ранее пакеты анализа. Добавить новые подсистемы и связать трассировкой с пакетами (один к одному) по аналогии с трассировкой между прецедентами и кооперациями. Использовать связи зависимостей (со стереотипом trace).
-
Создать диаграмму классов или общего вида (уровни подсистем). Поместить на нее созданные подсистемы и добавить новые подсистемы среднего и системного уровня. Указать зависимости подсистем.
-
Создать диаграмму развертывания, поместить на нее узлы (созданные ранее) и подсистемы прикладного уровня. Указать зависимостью размещение пакетов по узлам.
Добавление профиля
-
Добавить в модель (вкладка ее свойств) профиль — С++ или Java и набор соответствующих типов.
-
Создать диаграмму классов (трассировка). Перенести на нее управляющие классы из модели анализа. Добавить новые классы проектирования и связать их трассировкой с классами анализа (один к одному).
-
Уточнить классы проектирования, их атрибуты, операции и их параметры. Названия на английском, сигнатуры в соответствии с синтаксисом языка разработки.
-
Проставить для классов и прикладных подсистем проектирования стереотипы и типы данных Java (C++). Важно: изменить названия классов, их методов и свойств (английский без пробелов).
Создать ДВУНАПРАВЛЕННОЕ преобразование из UML в С++ или Java.
-
Выполнить преобразование.
-
Просмотреть полученные классы.
-
Внести изменения в классы.
-
Провести обратное преобразование и просмотреть полученный результат.
-
Создать проект типа Data Design Project. Добавить к нему физическую модель.
-
Определить схему БД. Сгенерировать DDL сценарий.
-
Выполнить сценарий на сервере СУБД.
-
(к защите) Завершить реализацию прецедента (во внешней среде).
-
Наполнить таблицы БД.
-
Довести приложение до работающего состояния (одну функцию) .
-
Провести обратное проектирование, по итогам которого скорректировать диаграмму классов, подсистем.
-
Построить диаграмму последовательностей для прецедента.
-
Контрольные вопросы
-
Что такое прямое проектирование?
-
Что такое обратное проектирование?
-
Что входит в модель проектирования и как она строится?
-
Что входит в модель реализации и как она строится?
-
Как настроить автоматическую генерацию кода?
-
Каково назначение рабочего процесса проектирования?
-
Из каких действий он состоит? Что содержит модель проектирования?
-
Что такое архитектура системы? Что входит в ее описание?
-
Как выполняют проектирование архитектуры?
-
Что содержит и как составляется модель развертывания?
-
Как определяют подсистемы проектирования и сервисные подсистемы? Назовите уровни подсистем и охарактеризуйте назначение подсистем каждого уровня.
-
Что такое интерфейс? Как формируют интерфейс подсистемы? Кто реализует интерфейс подсистемы?
-
Что такое активный класс? Каковы правила его выявления?
-
Что такое обобщенные механизмы проектирования? Как их определяют?
-
Для чего применяют паттерны и шаблоны проектирования?
-
Как выполняют проектирование класса? Что будет его результатом?
-
Каково назначение рабочего процесса реализации?
-
Из каких действий он состоит? Что содержит модель реализации?
-
Что такое подсистема? Как ее реализуют и какие проверки при этом выполняют?
-
Из каких действий состоит реализация классов? Какие из них выполняются автоматически?
Литература
-
Орлов С.А., Цилькер Б.Я. Технологии разработки программного обеспечения. - СПб.: Питер. - 2012 г.
-
Мацяшек Л.А., Лионг Б.Л. Практическая программная инженерия. - М.: Бином. - 2009 г.
-
Использование IBM Rational Data Architect для моделирования баз данных Oracle http://www.ibm.com/developerworks/ru/library/dm-0801kokkat/index.html
-
Разработка и реализация простого приложения телефонной книги (обновление) http://www.ibm.com/developerworks/ru/edu/r-hellorsav7/index.html
-
Создание Java-приложений, Web-сервисов и приложений, работающих с базами данных http://www.ibm.com/developerworks/ru/edu/r-helloradv7/index.html
36