|
|
|||||||||||||||||||||||||||||
|
Советы по использованию преобразований UML - C++ в Rational Systems Developer и Rational Software ArchitectИсточник: IBM developerWorks Россия
UML - это язык общего назначения. IBM Rational Software Architect и IBM Rational Systems Developer позволяют расширить функциональность UML-моделирования за счет поддержки конструкций, специфических для языка программирования C++. Преобразования UML - C++ в Rational Software Architect и Rational Systems Developer конвертируют UML-модели в код на языке C++. В этой статье рассматриваются различные советы по поводу того, как добиться более детализированного контроля над кодом C++, генерируемым при запуске преобразования UML - C++. Статья делится на несколько разделов, в каждом разделе рассматривается одна из методик. Вы можете просматривать эти разделы в любом порядке. Применение профиля преобразования C++ к моделированию конструкций C++ Обычно для того, чтобы перекинуть мост между унифицированным языком моделирования (Unified Modeling Language, UML) и конкретной предметной областью, используют профили UML . Профиль UML позволяет определить дополнительные семантические правила и характеристики для существующих UML -элементов - классов, операций и т. п.. Для моделирования элементов, специфичных для C++, то есть
Рисунок 1. Применение профиля преобразования UML - C++
Рисунок 2. Выбор Преобразования C++ UML предоставляет ограниченный набор встроенных типов. Это такие типы, как Рисунок 3. Импорт библиотеки типов C++ Выделите пункт C++ Types в списке Deployed Library, как показано на рисунке 4. Рисунок 4. Импорт библиотеки типов C++
Уровень сложности: средний Сандип Кохли, старший инженер-программист, IBM 18.12.2007 UML - это язык общего назначения. IBM Rational Software Architect и IBM Rational Systems Developer позволяют расширить функциональность UML-моделирования за счет поддержки конструкций, специфических для языка программирования C++. Преобразования UML - C++ в Rational Software Architect и Rational Systems Developer конвертируют UML-модели в код на языке C++. В этой статье рассматриваются различные советы по поводу того, как добиться более детализированного контроля над кодом C++, генерируемым при запуске преобразования UML - C++. Статья делится на несколько разделов, в каждом разделе рассматривается одна из методик. Вы можете просматривать эти разделы в любом порядке. Применение профиля преобразования C++ к моделированию конструкций C++
Обычно для того, чтобы перекинуть мост между унифицированным языком моделирования (Unified Modeling Language, UML) и конкретной предметной областью, используют профили UML . Профиль UML позволяет определить дополнительные семантические правила и характеристики для существующих UML -элементов - классов, операций и т. п.. Для моделирования элементов, специфичных для C++, то есть
Рисунок 1. Применение профиля преобразования UML - C++
Рисунок 2. Выбор Преобразования C++ UML предоставляет ограниченный набор встроенных типов. Это такие типы, как Рисунок 3. Импорт библиотеки типов C++ Выделите пункт C++ Types в списке Deployed Library, как показано на рисунке 4. Рисунок 4. Импорт библиотеки типов C++ Создание пространств имен C++ в модели В этом разделе рассказывается о том, как моделировать пространства имен C++ в UML-модели. Чтобы создать пространство имен в C++, необходимо применить стереотип Вам может быть интересно, почему это пространство имен не получает имя стереотипного пакета. Причина - поддержка моделирования анонимных пространств имен в C++. То есть, если вы оставите свойство NamespaceName незаполненным, то пространство имен будет считаться анонимным. Моделирование определяемых типов C++ Чтобы смоделировать определяемый тип C++(typedef), создайте UML-класс и примените к нему стереотип
Чтобы создать определяемый тип Рисунок 5. Создание определяемого типа C++ Чтобы понять зависимость определения определяемого типа от свойств, предоставляемых профилем, вы можете представить себе определяемый тип следующим образом: typedef Создание атрибутов многомерных массивов В этом разделе рассказывается о том, как создать атрибут-трехмерный массив размерностью [10][20][30]. Выберите в обозревателе проектов Project Explorer атрибут, который нужно реализовать в виде многомерного массива. В представлении Properties перейдите на вкладку Stereotypes. На вкладке Stereotypes нажмите кнопку Apply Stereotypes и выберите стереотип cpp_type. Этот стереотип предлагает следующие пары свойство/значение:
В поле arrayDimensions Value, изображенном на рисунке 6, укажите Определение формального параметра метода как константного Этот прием использует те же принципы, что и предыдущий (определение многомерного массива). Выделите в Project Explorer параметр, который должен быть константным . В представлении Properties перейдите на вкладку Stereotypes. На вкладке Stereotypes нажмите кнопку Apply Stereotypes и выберите стереотип cpp_type. Этот стереотип предоставляет следующие пары свойство/значение:
Все эти свойства могут быть полезными, но сейчас нас интересует только свойство qualifier. В поле Value для свойства qualifier введите значение Примечание: убедитесь, что значение, которое вы указываете в этом поле, является корректным. Некорректное значение вызовет ошибку компиляции, которую придется исправлять до выполнения преобразования UML - C++. Обратите внимание на то, что стереотип cpp_type применим также к атрибутам и классам. Однако для того, чтобы сгенерировать константный атрибут, проще просто пометить его как Read Only. Как сделать константным весь метод Предположим, что вы хотите объявить метод константным, чтобы он был сгенерирован с константным ключевым словом, как в Рисунок 7. Создание константного метода Исключения - это приоритетные элементы в UML, поэтому их можно моделировать без использования профилей. Для упрощения и обобщения практики моделирования преобразования UML - C++ везде, где это возможно, используют свойства UML, а не профили. Чтобы сгенерировать предложение Имя параметра не имеет значения, поскольку оно игнорируется в процессе преобразования, но лучше выбрать такое имя, которое позволит правильно идентифицировать исключение при его возникновении. На рисунке 8 показано, как установить для параметра Is Exception значение true. Рисунок 8. Установление типа вызова исключительной ситуации для метода Контроль над предложениями include в генерируемом коде Преобразование UML - C++ предназначено для автоматического выделения отношений из модели с последующим генерированием корректных предложений Вам придется явным образом смоделировать такие случаи, создав UML-отношение между этими двумя классами и применив к этому отношению стереотип cpp_dependency. Этот стереотип поставляется со свойством IsInclusionInHeader, значение которого по умолчанию равно false. Если вы хотите, чтобы предложения Использование секций сохранения кода при воспроизведении преобразования на уровне файла Если вам нужно использовать в исходном коде типы из стандартной библиотеки или из какой-либо другой библиотеки, то в модели такие строки необходимо определить как простые строки (plain string). Например, если нужно объявить атрибут как vector of integers, в модели вы определили бы его тип как Например, для типа vector необходимо вставить в исходный код явное предложение Листинг 1. Код, сгенерированный для класса
Удаление секции повторного применения преобразования на уровне класса Обратите внимание на то, что в коде предыдущего листинга имеется строка В этом случае удалите следующую секцию (см. листинг 2), после чего она не будет восстановлена автоматически. Если вам снова понадобится эта секция, то придется вставить ее вручную в этом же месте кода. Листинг 2. Код, сгенерированный для класса
Как изменить имя генерируемого пакета, не изменяя UML-модель Чтобы изменить имя пакета, выполните двойной щелчок на конфигурационном файле преобразования, чтобы открыть его в редакторе. Перейдите на вкладку Mapping и установите флажок Enable mapping, как показано на рисунке 9. Рисунок 9. Разрешение отображения модели Нажмите кнопку New, чтобы создать модель отображения по умолчанию и дать ей подходящее имя. Нажмите кнопку Edit Mapping, чтобы вывести на экран диалоговое окно, показанное на рисунке 10. Рисунок 10. Редактирование модели отображения Предположим, вы работаете с UML-моделью, показанной на рисунке 11. Если у вас нет модели отображения, то класс Рисунок 11. Рабочая UML-модель Как сгенерировать несколько классов в одном файле Когда мы отображаем класс UML в модели отображения на другое имя, мы изменяем имя файла, в котором он будет сгенерирован, но не имя класса, который будет сгенерирован в этом файле. По умолчанию высокоуровневый класс генерируется в файле, имя которого соответствует имени этого класса. Значит, для класса UML с именем MyClass преобразование UML - C++ сгенерирует файлы MyClass.h и MyClass.cpp. Однако вы можете выбрать другое имя для UML-класса при помощи модели отображения. Аналогично тому, как мы переименовали UML-пакет в модели отображения, чтобы сгенерировать другое имя для папки, можно отобразить UML-класс в файл с другим именем. Имя самого класса модель отображения не меняет. Следовательно, чтобы сгенерировать несколько классов в одном файле, достаточно дать им всем одно и то же целевое имя в модели отображения. Ссылки по теме
|
|