Предыдущая Оглавление Следующая

Обработка событий.

Основное содержание работы.

Написать интерактивную программу, выполняющую команды, вводимые пользователем с клавиатуры.

Порядок выполнения работы.

  1. Разобрать пример, представленный в приложении. Ответить на следующие вопросы:
  2. Выбрать группу объектов, которые будут обрабатывать события (это не могут быть объекты, приведенные в приложении).
  3. Для выбранной группы объектов определить перечень операций, которые должны выполняться по командам пользователя.
  4. Определить вид командной строки <код_операции><параметры>. Решить вопросы: как кодируются операции? какие передаются параметры?
  5. Определить иерархию объектов. Если необходимо, добавить новые объекты (группы объектов).
  6. Определить иерархию классов. Если необходимо, добавить новые классы.
  7. Определить, какой объект в программе играет роль приложения. В случае необходимости добавить в иерархию классов класс TApp. Решить, в каком классе будет метод Execute, организующий главный цикл обработки событий.
  8. Определить и реализовать необходимые для обработки событий методы.
  9. Написать основную функцию (main).

Приложение.

Объект КАЛЬКУЛЯТОР выполняет сложение, вычитание, умножение, деление вещественных чисел.

Иерархия объектов.

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

class TShema;
class TObject //абстрактый класс - стоит во главе иерархии классов
{protected:
TShema* owner;
public:
TObject();
~TObject();
virtual void HandleEvent(TEvent&);
virtual void ClearEvent(TEvent&);
};
class TShema::public TObject // абстрактная группа
{protected:
TItem* last;
public:
TShema();
~TShema();
virtual void Insert(TObject*);
virtual void HandleEvent(TEvent&);
};
class TDevice: public TShema // абстрактное устройство управления
{protected:
int EndState;
public:
virtual void GetEvent(TEvent&);
virtual void Execute();
virtual int Valid(); 
virtual void EndExec();
};

class TRec: public TObject/ устройство для хранения данных-регистр
{protected:
float x;
public:
TReg();
~TReg();
float GetX();
void SetX(float&); 
};
class TCalc : public TDevice //калькулятор
{pritected:
TReg* sum; // указатель на сумматор
TReg* reg; // указатель на регистр
public:
TCalc();
void HamdleEvent(TEvent&);
void GetEvent(TEvent&);
void Execute();
float GetSum(); // получить значение сумматора
void PutSum(float); //занести  число в сумматор
voit Help();
};
class TAdd : public TObject // схема сложения
{public:
void HandleEvent(TEvent&);
void Add(); 
};

TObject::TObject()
{owner=0;}
TShema::TShema()
{last=0;}
TCalc::TCalc()
{TObject* r;
sum=new TReg;
reg=new TReg;
r=new TAdd;
Insert (sum);
// и так далее для всех схем
};
TCalc::HandleEvent(TEvent& event)
{if(event.what==evMessage)
switch(event.command)
{cmQuit:
EndExec();
ClearEvent(event);
break;
cmGet:
cout<HandleEvent(event);
r=r->next;}
} }
TAdd::HandleEvent(TEvent&event)
{if(event.what==evMessage)
switch(event.command)
{cmAdd:
//занести в регистр число
(owner->reg)->SetX(event.A);
//вызвать метод сложения
Add();
ClearEvent(event);
break;
} } 
TAdd::Add() //в сумматор добавить содержимое регистра
{float a,b;
//получить значениm сумматора
a=(owner->sum)->GetX();
//получить значение регистра
b=(owner->reg)->GetX();
//изменить значение сумматора
(owner->sum)->SetX(a+b);
}
Предыдущая Оглавление Следующая