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

         

Механизм вывода информации на экран


Подготовка следующего релиза, где должны быть окончательно определены классы DisplayManager и LCDDevice, не требует от нас новых проектных решений. Осталось лишь несколько тактических шагов, связанных с сигнатурой и семантикой некоторых функций-членов. Соединяя решения, принятые в процессе анализа, и наш первый архитектурный прототип, где мы сделали некоторые важные предположения о протоколе отображения значений, можно определить на C++ следующий интерфейс:

class DisplayManager {


public:

DisplayManager();


~DisplayManager();


void clear();


void refresh();


void display(Sensor&);


void drawStaticItems(TemperatureScale, SpeedScale);


void displayTime(const char*);


void displayDate(const char*);


void displayTemperature(float, unsigned int id = 0);


void displayHumidity(float, unsigned int id = 0);


void displayPressure(float, unsigned int id = 0);


void displayWindChill(float, unsigned int id = 0);


void displayDewPoint(float, unsigned int id = 0);


void displayWindSpeed(float, unsigned int id = 0);


void displayWindDirection(unsigned int, unsigned int id = 0);


void displayHighLow(float, const char*, SensorName, unsigned int id = 0);


void setTemperatureScale(TemperatureScale);


void setSpeedScale(SpeedScale);



protected:


// ...


};

Ни одна из приведенных операций не является виртуальной, так как создание иерархии классов вывода информации на экран не планируется, и у DisplayManager не будет потомков.

Отметим, что этот класс содержит несколько достаточно примитивных операций (таких, как DisplayTime и refresh), но в то же время обладает составной операцией display, присутствие которой во многом упрощает взаимодействие клиентов с экземпляром класса DisplayManager.

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



Содержание раздела