Главная страница
Случайная страница
Разделы сайта
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример. «Точка на плоскости».
Точку на плоскости можно представить, например парой (x, y) декартовых координат или (r, j) – полярных. Для пользователя понятие «точка на плоскости» не зависит от способа её представления, решая свои задачи, он пожелает узнать любое из её свойств, когда-то j-угол, а когда-то y-координату. Выбирая способ представления класса, нам придётся выбрать одно из представлений точки, если нам не хочется «возиться» с избыточным представлением, поскольку существенной пользы от этого не предвидим.
Object Pascal 2
| C (C++)
| unit Unit1; interface TYPE
TCPoint= CLASS PROTECTED x: REAL; PRIVATE y: REAL;
| //Файл unit1.h:
class TCPoint{ protected:
double x; private: double y;
| Спецификатор protected не проявит никаких отличий от private, но это пока, а в будущем (в наследовании) проявит...
| Cкрыв способ представления точек, берем на себя ответственность – восстановить доступные инструменты для работы с точками:
Ø Селекторы компонентов
¨ Соответствуют использованию выборки поля в правой части оператора присваивания
§ Выбрать x-координату
§ Выбрать y-координату
| PUBLIC
FUNCTION GetX: REAL;
FUNCTION GetY: REAL;
| public:
double GetX();
double GetY();
| ¨ Но в более широком смысле, как селекторы свойств объекта
§ Выбрать Ro-координату
§ Выбрать Fi-координату
§ Сравнить на равенство с другой точкой
| FUNCTION GetRo: REAL;
FUNCTION GetFi: REAL;
FUNCTION GetEq(prmP: TCPoint
): BOOLEAN;
| double GetRo();
double GetFi();
bool GetEq(TCPoint prmP);
| Ø Модификаторы компонентов
¨ Соответствуют использованию выборки поля в левой части оператора присваивания
§ Установить значение x-координаты
§ Установить значение y-координаты
| PROCEDURE SetX(
prmVal: REAL);
PROCEDURE SetY(
prmVal: REAL);
| void SetX(double prmVal);
void SetY(double prmVal);
| ¨ Но в более широком смысле, как модификаторы состояния объекта
§ Установить значение Ro-координаты
§ Установить значение Fi-координаты
¨ Или в еще более широком смысле
§ Переместить точку поворотом вокруг центра системы координат
§ Переместить точку параллельным сдвигом, заданным радиус-вектором другой точки
| PROCEDURE SetRo(
prmVal: REAL);
PROCEDURE SetFi(
prmVal: REAL);
PROCEDURE Rotat{поворот}(
prmDFi: REAL);
PROCEDURE Sum{сдвиг}(
prmP: TCPoint);
| void SetRo(double prmVal);
void SetFi(double prmVal);
void Rotat/* поворот */(
double prmDFi);
void Sum/*сдвиг*/(
TCPoint prmP);
| Ø Генераторы объектов
¨ Конструкторы
| CONSTRUCTOR GenXY(
prmX, prmY: REAL);
CONSTRUCTOR GenRoFi(
prmRo, prmFi: REAL);
|
|
Прежде чем рассматривать объявление конструкторов в С++ обсудим два возникших вопроса:
§ В Object Pascal объявлено два конструктора, но в С++ конструктор должен иметь имя TCPoint – можно ли объявить два метода с одинаковым именем?
§ В С++ должен быть объявлен конструктор по умолчанию, либо ни одного конструктора не должно быть объявлено (тогда конструктор по умолчанию создается автоматически). Но в Object Pascal оба объявленных конструктора имеют параметры. Обязательно ли объявлять третий – конструктор по умолчанию?
Представить ответы на эти вопросы нам помогут средства программирования в Object Pascal 2 и С++:
¨ Инициализация:
§ переменных при их объявлении, и
§ формальных параметров при их спецификации.
¨ Перегрузка (overload) функций-процедур и методов.
|