Добавление новых операций




Эталонный код класса

Вернемся к нашей теплице и вспомним, что датчиков в теплице может быть несколько, и поэтому необходимо точное определение местоположения датчика. Используем для этого его номер. На самом деле для определения местоположения датчика могут использоваться координаты, которые помогут нам вывести показания конкретного датчика на дисплей, но пока используем только номер.

Для установки текущего местоположения будем использовать тип Location, а для температуры — тип Temperature.

Допустим, что мы хотим получить следующий код на C++:

// температура по Цельсию

typedef float Temperature;

// число, однозначно определяющее положение датчика

typedef unsigned int Location;

class TemperatureSensor {

public:

TemperatureSensor (Location);

~TemperatureSensor ();

void calibrate (Temperature actualTemperature);

Temperature currentTemperature() const;

};

Для объектов, создаваемых в программе, или как их еще называют — реализаций классов, удобно использовать псевдонимы простых типов, например, Temperature или Location вместо unsigned int. Таким образом мы можем описать получаемые абстракции на языке предметной области.

В конструктор передается местоположение датчика, имеется возможность калибровки и получения измеренной температуры.

Ассоциация класса с языком C++

В Rational Rose все типы по умолчанию определяются как классы. Поэтому создадим два новых класса: Location и Temperature. Для каждого из них проделаем следующее:

Выберем класс, затем Menu:Tools=>C++=>Code Generation. Появится диалоговое окно, показанное на рис. 13.1.

Рис. 13.1. Назначение классу языка программирования C++

Здесь необходимо выбрать класс, для которого назначается язык программирования, и нажать Assign (назначить).

Просмотр кода класса

После генерации кода в контекстном меню станет доступен дополнительный пункт — C++, в котором можно просмотреть заголовочный файл (Header).h и файл тела класса (Body).cpp, как показано на рис. 13.2.

Рис. 13.2. Доступное меню C++

Теперь можно просматривать файлы тела класса и заголовочный файл после каждого внесенного изменения, чтобы проверить, как эти изменения отразятся на получаемом коде.

Установка типа объекта

Теперь во вновь появившемся меню выбираем Open Specification=> C++=>Implementation Type=>Override, затем в графе Value заполняем unsigned int. Должно получиться так, как показано на рис. 13.3.

Рис. 13.3. Заполнение свойства Implementation Type

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

Проделайте то же самое с классом Temperature, только не забудьте установить тип float и запустите генерацию кода RClick=>C++=>Code Generation. Просмотрите заголовок, и вы увидите, что получилось именно то, что заказывали.

Теперь мы можем воспользоваться полученными типами для класса датчика температуры.

Добавление новых операций

Выбираем TemperatureSensor=>RClick=>New Operation и вводим имя calibrate (actualTemperature: Temperature): void. Отметим, что в отличие от семантики языка C++, здесь сначала указывается переменная, а затем, после двоеточия, ее тип, аналогично и возвращаемое значение указывается после операции через двоеточие. Слева от операции появился значок, если его выбрать, то открывается набор значков, которые отражают доступность операции, соответственно: public, protected, private и implementation. В последнем случае, если элемент определен в контейнере, он будет виден только для объектов, определенных в этом контейнере.

Аналогично добавим конструктор и операцию получения температуры.

Замечание. Если заполнить поле TemperatureSensor=>RCIick=>Open Specification->Documentation, то вы получите автоматически создаваемые комментарии в исходном тексте, которые высвечиваются в окне Documentation, когда выделяется документированный класс.



Поделиться:




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

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


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