Пример объектно-ориентированного проектирования: метеорологическая станция
Требования к метеорологической станции Система должна обеспечивать автоматический мониторинг следующих первичных погодных параметров: скорость и направление ветра; температура; барометрическое давление; влажность воздуха. Система также должна вычислять некоторые производные параметры, в число которых входят: коэффициент резкости погоды; точка росы; относительное изменение температуры; относительное изменение барометрического давления.
Требования к метеорологической станции В системе должна быть предусмотрена возможность определения текущего времени и даты Система должна обеспечивать постоянный вывод на дисплей текущих значений всех первичных и производных параметров, их максимальных и минимальных значений, а также время и дату Система должна позволять проводить калибровку датчиков, а также устанавливать время и дату
Требования к метеорологической станции В системе должна быть предусмотрена возможность определения текущего времени и даты Система должна обеспечивать постоянный вывод на дисплей текущих значений всех первичных и производных параметров, их максимальных и минимальных значений, а также время и дату Система должна позволять проводить калибровку датчиков, а также устанавливать время и дату
Предположения об аппаратной части Используется обычный персональный компьютер Системные время и дата поддерживаются встроенными часами Температура, давление и влажность определяются встроенными контроллерами, которые соединены с соответствующими датчиками Направление ветра измеряется с помощью флюгера с точностью до одного из 16 направлений; скорость ветра определяется анемометром со счетчиком оборотов Ввод команд пользователем осуществляется с помощью клавишной панели Экраном служит жидкокристаллический дисплей Встроенный таймер посылает прерывания через каждую 1/60 долю секунды
Состав аппаратной части
Класс времени и даты Имя: TimeDate Ответственность: Поддержание информации о текущих времени и дате Операции: currentTime - текущее время currentDate - текущая дата setFormat - установка формата setHour - установка часа setMinute - установка минут setSecond - установка секунд setMonth - установка месяца setDay - установка дня setYear - установка года Атрибуты: time - время date - дата
Класс температурный датчик Имя: TemperatureSensor Ответственность: Поддержание информации о текущей температуре Операции: currentTemperature - текущая температура setLowTemperature - установка минимальной температуры setHighTemperature - установка максимальной температуры Атрибуты: temperature - температура
Класс датчик давления Имя: PressureSensor Ответственность: Поддержание информации о текущем давлении Операции: currentPressure - текущее давление setLowPressure - установка минимального давления setHighPressure - установка максимального давления Атрибуты: pressure - давление
Класс определения тренда Имя: TrendSensor Ответственность: Определение тренда давления или температуры как наклона графика (от -1 до 1) изменения их значений за данный интервал времени Операции: trend - тренд
Класс датчик влажности Имя: HumiditySensor Ответственность: Поддержание информации о текущей влажности, выраженной в процентах от 0% до 100% Операции: currentHumidity - текущая влажность setLowHumidity - установка минимальной влажности setHighHumidity - установка максимальной влажности Атрибуты: humidity - влажность
Класс для минимальных и максимальных значений параметров Имя: HistoricalSensor Ответственность: Генерация сообщений о максимальных и минимальных значениях параметров за 24-часа Операции: highValue - максимальное значение lowValue - минимальное значение timeOf HighValue - время, соответствующее максимальному значению timeOfLowValue - время, соответствующее минимальному значению
Класс датчик скорости ветра Имя: WindSpeedSensor Ответственность: Поддержание информации о скорости ветра Операции: currentSpeed - текущая скорость setLowSpeed - установка минимальной скорости setHighSpeed - установка максимальной скорости Атрибуты: speed - скорость
Класс калибровки измеренных значений Имя: CalibratingSensor Ответственность: Обеспечение линейной интерполяции значений, лежащих в известном интервале Операции: currentValue - текущее значение setLowValue - установка минимального значения setHighValue - установка максимального значения
Класс датчик направления ветра Имя: WindDirectionSensor Ответственность: Поддержание информации о текущем направлении ветра, указываемом как точка на розе ветров Операции: currentDirection - текущее направление Атрибуты: direction - направление
Иерархия классов датчиков
Класс для ввода с клавиатуры Имя: Keypad Ответственность: Поддержание информации о коде последней клавиши, нажатой на клавиатуре Операции: lastKeyPress - последняя нажатая клавиша Атрибуты: key - клавиша
Класс для дисплея
Имя: LCDDevice Ответственность: Управление выводом на экран графических элементов Операции: drawText - рисовать текст drawLine - рисовать линию drawCircle - рисовать окружность setTextSize - установка размера текста setTextStyle - установка начертания текста setPenSize - установка ширины линии
Класс для таймера Имя: Timer Ответственность: Осуществление прерываний и диспетчеризация функций обратного вызова Операции: setCallback() - установка функции обратного вызова
Список ситуаций Мониторинг первичных измеряемых параметров: скорости и направления ветра, температуры, барометрического давления и влажности. Мониторинг производных параметров: коэффициента жесткости погоды, точки образования росы, трендов температуры и барометрического давления. Показ максимальных и минимальных значений выбранных параметров. Установка времени и даты. Калибровка выбранных датчиков. Включение системы. Добавим еще две дополнительные ситуации: Отказ питания. Отказ датчика.
Мониторинг Частоты снятия информации: каждые 0.1 секунды направление ветра каждые 0.5 секунды скорость ветра каждые 5 минут температура, давление и влажность Класс Sampler обеспечивает требуюмую частоту снятия информации
Класс для дисплея Имя: LCDDevice Ответственность: Управление выводом на экран графических элементов Операции: drawText - рисовать текст drawLine - рисовать линию drawCircle - рисовать окружность setTextSize - установка размера текста setTextStyle - установка начертания текста setPenSize - установка ширины линии Атрибуты: key - клавиша
Реализация вывода параметров на экран Имя: DisplayManager Ответственность: Организация отображения параметров на экране дисплея Операции: drawStaticItems - рисование статических элементов displayTime - вывод времени displayDate - вывод даты displayTemperature - вывод температуры displayHumidity - вывод влажности displayPressure - вывод давления displayWindChill - вывод коэффициента жесткости погоды displayDewPoint - вывод точки росы displayWindSpeed - вывод скорости ветра displayWindDirection - вывод направления ветра displayHighLow - вывод максимальных и минимальных значений
Связи между классами, связанными с выводом информации на экран
Вторичные параметры
Класс для управления клавиатурой Имя: InputManager Ответственность: Диспетчеризация команд пользователя Операции: processKeyPress - обработка сигналов с клавиатуры
Архитектура системы мониторинга погоды
Код классов Sensors и Sampler
Код классов CalibratingSensor, HistoricalSensor и TrendSensor