Информатика и технология программирования


Система объектов, управляемых сообщениями - часть 2


Объекты этого класса тесно связаны с управляющей программой - диспетчером, которая реализована специальным объектом. Статический указатель на этот объект programm используется для доступа объектов, управляемых сообщениями к средствам объекта-программы. Объект может выполнять два основных действия - принимать и передавать сообщения :



-метод передачи сообщения вызывает аналогичный метод в объекте-программе ;



-виртуальная функция обработки сообщения программируется отдельно в каждом производном классе и определяет реакцию объектов этого класса на все сообщения, которые появляются в программе и проходят через систему объектов ;



-конструктор объекта посылает сообщение объекту-программе о своем " рождении" с указателем на самого себя .


// Класс объектов, управляемых сообщениями -----------


class OBJ
{
friend class PRG; // Объявление дружественного класса


static PRG *programm; // Статический (общий) указатель


public: // на объект - программа


void SendEvent(char,int,int,void *);
virtual void HandleEvent(MS *); // Обработчик сообщений


OBJ(); // Конструктор


virtual ~OBJ(); // Деструктор


};


void OBJ::SendEvent(char code0, int x0, int y0, void *p0)
{ if (programm !=NULL) programm-&#62SendEvent(code0,x0,y0,p0);}


void OBJ::HandleEvent(MS *pm)
{ pm-&#62clear(); }


OBJ::OBJ()
{ SendEvent(ms_BORN,0,0,this); }


OBJ::~OBJ() {}

Самым сложным является класс прикладной программы, который и реализует в себе как структуры данных, так и стратегию управления, принятую в программе. Прежде всего, объект-программа содержит в себе две очереди - объектов objects и сообщений messages , реализованных в виде любой структуры данных, например, циклического списка (см.6.4.). Функциональными компонентами класса являются метод передачи сообщения SendEvent и метод диспетчеризации сообщений run , реализующий алгоритм управления системой объектов.


// Класс прикладной программы ------------------------


&#35include " zlist.h"
class PRG
{
zlist objects; // Объекты программы




Начало  Назад  Вперед



Книжный магазин