Доводка полученного кода




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

Замечание. Вы можете отличить созданные генератором строки по символам «##», вставляемым в комментарии.

# include "Location.h"

# include "Temperature.h"

// Датчик температуры, измеряет температуру в теплице в

// Цельсиях

class TemperatureSensor {

public:

//## Constructors (generated) TemperatureSensor();

TemperatureSensor(const TemperatureSensor &right);

//## Constructors (specified)

TemperatureSensor (Location Location);

//## Destructor (generated)

~TemperatureSensor();

//## Other Operations (specified)

void calibrate(Temperature actualTemperature);

Temperature currentTemperature ();

}

Здесь мы видим, что в код включились заголовочные файлы определения данных и комментарий (это было заполнено поле RClick=>Open Specification=>Documentation). Однако конструкторов в классе целых три: два автоматически созданных и один, который определили мы. И не хватает служебного слова const в операции currentTemperature.

Исправим это несоответствие. Сначала удалим автоматически создаваемые конструкторы класса: Wind: Class Diagram=> TemperatureSensor=> RClick =>OpenSpecification=>C++=> Generate Default Constructor=DoNotDeclare и там же Generate Copy Constructor == DoNotDeclare.

Поставим тип const: Wind:Browser + Logical View + TemperatureSensor=>current-Temperature=>C++=>Operation Is Const=True.

Совет. Для того чтобы быстро выделить нужный класс в окне Browser, находясь в окне Class Diagram, сделайте RCIick=>Select In Browser.

Проверьте полученный исходный код и убедитесь, что все сработало как нужно.

Настройка свойств C++

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

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

· ImplementationType позволяет использовать простые типы вместо определения класса, устанавливаемого Rational Rose по умолчанию, При задании этого параметра создается директива typedef.

· ClassKey используется для задания типа класса, такого как class, struct или union. Если тип не указан, то создается класс.

· GenerateEmptyRegion -- свойство указывает, как будет создаваться пустой раздел protected: None — пустой раздел не будут создан; Preserved — пустой раздел будет создан, если будет установлено свойство «preserve=yes»; Unpreserved — пустой раздел будет создан, если будет установлено свойство «preserve=no»; All — всегда будет создаваться.

· PutBodiesInSpec если установлено как True, то в заголовочный файл попадет и описание тела класса. Используется для компиляторов, которым необходимо определение шаблона класса в каждом компилируемом файле.

· GenerateDefaultConstructor позволяет установить, необходимо ли создавать конструктор для класса по умолчанию. Может принимать следующие значения: DeclareAndDefine - создается определение для конструктора и скелет конструктора в теле класса; Declare Only — создается только определение; DoNotDeclare — не создается ни определения, ни скелета конструктора.

· DefaultConstructorVisibility устанавливает раздел, в котором будет определен конструктор по умолчанию: public, protected, private, implementation.

· InlineDefaultConstructor устанавливает, будет ли конструктор по умолчанию создаваться как inline подстановка.

Замечание. Если конструктора по умолчанию нет, то данное свойство не оказывает на код никакого эффекта.

· ExplicitDefaultConstructor устанавливает конструктор по умолчанию как explicit (явно заданный).

· GenerateCopyConstructor устанавливает, будет ли создана копия конструктора.

· CopyConstructorVisibility устанавливает раздел, в котором будет создана копия конструктора.

· InlineCopyConstructor устанавливает, будет ли копия конструктора создаваться как inline подстановка..

· ExplicitCopyConstructor устанавливает, что копия конструктора будет создана explicit (явно задана).

· GenerateDestructor устанавливает, будет ли создаваться деструктор для класса.

· Destructor Visibility устанавливает раздел, где будет создаваться деструктор.

· DestructorKind устанавливает вид создаваемого деструктора: Common — обычный, Virtual — виртуальный, Abstract — абстрактный.

· InlineDestructor устанавливает, будет ли деструктор создаваться как inline подстановка.

· GenerateAssignmentOperation устанавливает, будет ли создаваться функция переопределения оператора присваивания (=).

· AssignmentVisibility определяет раздел, где будет создаваться функция оператора присваивания.

· The AssignmentKind определяет вид функции оператора присваивания: Common -- обычная, Virtual — виртуальная, Abstract - абстрактная, Friend — дружественная.

· InlineAssignmentOperation определяет, будет ли оператор присваивания создаваться как inline.

· GenerateEqualityOperations определяет, будут ли переопределяться операторы сравнения на равенство (= = и!=).

· Equality Visibility определяет раздел, в который будут помещены операторы сравнения на равенство.

· EqualityKind определяет вид функций операторов сравнения на равенство: Common — обычная, Virtual — виртуальная, Abstract — абстрактная, Friend — дружественная.

· InlineEqualityOperations определяют, будут ли функции операторов сравнения на равенство создаваться как inline.

· GenerateRelationalOperations определяет, будут ли переопределяться операторы сравнения (<, <=, >, >=).

· RelationalVisibility определяет раздел, в который будут помещены операторы сравнения.

· RelationalKind определяет вид функций операторов сравнения: Common - - обычная, Virtual — виртуальная, Abstract - - абстрактная, Friend — дружественная.

· InlineRelationalOperations определяет, будут ли функции операторов сравнения создаваться как inline подстановка.

· GenerateStorageMgmtOperations определяет, будут ли переопределяться операторы new и deшlete в классе.

· StorageMgmtVisibility определяет раздел, в который будут помещены операторы new и delete.

· InlineStorageMgmtOperations определяет, будут ли операторы new delete определены как inline подстановка.

· GenerateSubscriptOperation определяет, будет ли переопределен оператор [].

· Subscript Visibility определяет раздел, в который будет помещен оператор [].

· SubscriptKind определяет вид функций оператора []: Common — обычная, Virtual — виртуальная, Abstract — абстрактная.

· SubscriptResultType определяет тип возвращаемого выражения для оператора [].

· InlineSubscriptOperation определяет, будет ли оператор [] определен как inline подстановка.

· GenerateDereferenceOperation определяет, будет ли переопределен оператор *.

· DereferenceVisibility определяет раздел, в который будет помещен оператор *.

· DereferenceKind определяет вид функций оператора *: Common - обычная, Virtual — виртуальная, Abstract — абстрактная.

· DereferenceResultType определяет тип возвращаемого выражения для оператора *.

· InlineDereferenceOperation определяет, будет ли оператор * определен как inline подстановка.

· GeneratelndiшrectionOperation определяет, будет ли переопределен оператор ->.

· Indirection Visibility определяет раздел, в который будет помещен оператор ->.

· IndirectionKind определяет вид функций оператора ->: Common -обычная, Virtual — виртуальная, Abstract — абстрактная.

· IndirectionResultType определяет тип возвращаемого выражения для оператора ->.

· InlinelndirectionOperation определяет, будет ли оператор -> определен как inline подстановка.

· GenerateStreamOperations определяет, будут ли переопределены операторы потоков («и »).

· Stream Visibility определяет раздел, в который будут помещены операторы потоков.

· InlineStreamOperations определяет, будут ли операторы потоков определены как inline подстановка.


Примерные вопросы для самопроверки и защиты

1. Опишите возможности ассоциации класса с языком C++.

2. Возможности установки типа объекта.

3. Опишите порядок добавления операций.

4. Как устанавливаются зависимости классов?

5. Как просмотреть получаемый код, не выходя из Rational Rose.

6. Опишите настройки свойств C++.

Литература

1. Трофимов С.А. Case -технологии: практическая работа в Rational Rose — М.: ЗАО «Издательство БИНОМ», 2001 г. — 272 с.: ил.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: