Объектно-ориентированное проектирование с примерами



         

Инкапсуляция - часть 3


Итак, вот класс Heater для абстрактных нагревателей, написанный на C++:

class Heater {
public: Heater(Location);
~Heater();
void turnOn();
void tum0ff();
Boolean is0n() const;

private:
};

Вот и все, что посторонним надо знать о классе Heater. Внутренность класса это совсем другое дело. Предположим, проектировщики аппаратуры решили разместить управляющие компьютеры вне теплицы (где слишком жарко и влажно), и соединить их с датчиками и исполнительными устройствами с помощью последовательных интерфейсов. Разумно ожидать, что нагреватели будут коммутироваться с помощью блока реле, а оно будет управляться командами, поступающими через последовательный интерфейс. Скажем, для включения нагревателя передается текстовое имя команды, номер места нагревателя и еще одно число, используемое как сигнал включения нагревателя.

Вот класс, выражающий абстрактный последовательный порт.

class SerialPort {
public: SerialPort();
~SerialPort();
void write(char*);
void write(int);
static SerialPort ports[10];

private:
};

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

Добавим еще три параметра в класс Heater.

class Heater {
public:
...
protected: const Location repLocation;
Boolean repIsOn;
SerialPort* repPort;

};

Эти параметры repLocation, repIsOn, repPort образуют его инкапсулированное состояние. Правила C++ таковы, что при компиляции программы, если клиент попытается обратиться к этим параметрам напрямую, будет выдано сообщение об ошибке.

Определим теперь реализации всех операций этого класса.

Heater::Heater(Location 1) : repLocation(1),
repIsOn(FALSE),
repPort(&SerialPort::ports[l]) {}

Heater::Heater() {}

void Heater::turnOn()
{ if (!repls0n) {

repPort->write("*");
repPort->write(repLocation);
repPort->write(1);
repIsOn = TRUE;

}

}

void Heater::turn0ff()
{ if (repIsOn) {

repPort->write("*");
repPort->write(repLocation);
repPort->write(0);
repIsOn = FALSE;

}

}




Содержание  Назад  Вперед