Использование ссылок гарантирует, что каждый
Использование ссылок гарантирует, что каждый экземпляр
Sampler получит соответствующий набор датчиков, менеджера экрана и менеджера ввода. Другая схема, в которой вместо ссылок используются указатели, обеспечила бы довольно слабую связь, позволяя создавать объект
Sampler, у которого отсутствовали бы некоторые важные компоненты.
Ключевую функцию
Sampler::sample надо модифицировать следующим образом:
void Sampler::sample(Tick t){
repInputManager.processKeyPress();for (SensorName name = Direction; name <= Pressure; name++)
for (unsigned int id = 0; id < repSensors.numberOfSensors(name); id++)
if (!(t % samplingRate(name)))
repDisplayManager.display(repSensors.sensor (name, id));
}
В начало каждого кадра мы добавили вызов метода processKeyPress. Операция processKeyPress является точкой входа в конечный автомат, управляющий работой экземпляров класса
InputManager. Существуют два подхода к реализации любого конечного автомата: можно представить состояния системы объектами и положиться на их полиморфное поведение или просто ввести перечисление состояний, обозначив их литералами.
Для конечных автоматов с относительно небольшим числом состояний, к числу которых принадлежит и класс
InputManager, достаточно использовать второй подход. Сначала определим имена объемлющих состояний класса:
enum InputState {Running, Selecting, Calibrating, Mode);
Затем определим некоторые защищенные функции класса:
class InputManager {public:...protected:
Keypads repKeypad;InputState repState;void enterSelecting();void enterCalibrating();void enterMode();
};
И, наконец, начнем реализовывать переходы между состояниями (см. рис. 8-11):
void InputManager::process Keypress() {
if (repKeypad.inputPending()) {
Key key = repKeypad.lastKeyPress();switch (repState) {case Running:
if (key == kSelect)
enterSelecting();
else if (key == kCalibrate)
enterCalibrating();
else if (key == kMode)
enterMode();
break;
case Selecting: break;case Mode: break;}
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий