Рассмотрев несколбко ВИ и убедившись в правильности стратегических решений можно приступать к планированию процесса разработки. Для этого раьота разбивается на ряд этапов рез-тат каждого из которых будет являться основой для последующих:
1 Разработка прог-мы обладающей миним функц-ми свойствами и осуществл=ая мониторинг только одного датчика
2 Создание иерархии датчиков
3 Создание классов ответственных за управление изображением на экране
4 Создание классов ответсв-ых за работу пользоват-ого интерфейса
Разработка миним версии программы позволяет в первую очередь смоднлировать архитектуру по вертикали реализовав в усеченном варианте практически все ключевые абстракции. Эта задача несет в себе основной риск так как в процессе ее решения проверяется правильность выбора ключевых абстракций их роль и функции. Так можно выявить несоответствия между аппаратными и программной частями кроме того будущие пользователи получают возможн-ть уже а ранних этапах проекта оценить внешний вид и работу системы.
Остановимся подробнее на реализации диаграммы состояний(конечного автомата):
Существует 2 подхода к реализации любого конечного авт-та : 1-Можно представить состояния системы объектами и положиться на их полиморфное поведение или 2- Просто ввести перечисление состояний обозначив их литералами.
Для кон авт-ов с относ-но небольшим числом состояний таких как класс InputManager достаточно использовать второй подход. Вначале определим имена объемлющих состояний классов:
enum InputState (Running,Selecting,Calibrating,Mode);
Определим некоторые защищенные функции-члены класса:
Class InputManager{
Public:
…….
Protected:
KeyPad&repKeyPad;
InputState repState;
Void enterSelecting();
Void enterCalibrating();
Void enterMode();
};
Теперь реализуем переходы между состояниями:
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;
}}}
Реализация данной функции отражает содержание ранее приведенной диаграммы переходов между состояниями.
Кодирование
24 Фев, 2009