Здавалка
Главная | Обратная связь

Основний зміст роботи.



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

Порядок виконання роботи.

1.Розібрати приклад, представлений у ДОДАТКУ. Відповісти на наступні питання:

а) Яка тут ієрархія класів?

б) Яка тут ієрархія об'єктів?

в) Як КАЛЬКУЛЯТОРУ передаються аргументи операції? Де вони зберігаються? Яким чином одержують до них доступ пристрої ДОДАВАННЯ, ВІДНІМАННЯ і т.д. ?

г) Як обробляються події групою?

д) Які всі маршрути події TEvent?

е) Як виконуються HandleEvent усіх класів?

2.Вибрати групу об'єктів, що будуть обробляти події (це не можуть бути об'єкти, приведені в додатку).

3.Для обраної групи об'єктів визначити перелік операцій, що повинні виконуватися по командах користувача.

4.Визначити вид командного рядка <код_операції><параметри>. Вирішити питання:

Як кодуються операції? Які передаються параметри?

5.Визначити ієрархію об'єктів. Якщо необхідно, додати нові об'єкти (групи об'єктів).

6.Визначити ієрархію класів. Якщо необхідно, додати нові класи.

7.Визначити який об'єкт у програмі відіграє роль додатка. У разі потреби додати в ієрархію класів клас TApp. Вирішити в якому класі буде метод Execute, що організує головний цикл обробки подій.

8.Визначити і реалізувати необхідні для обробки подій методи.

9.Написати основну функцію(main).

Методичні вказівки.

1.Як групу, для якої організується обробка подій вибрати групу з лабораторної роботи №3.

2.Кількість різних оброблюваних команд повинне бути не менш 5.

2.Визначення класів помістити у файл *.h. Визначення функцій – членів класу помістити у файл *.cpp.

3.Для констант, зв'язаних з командами, використовувати мнемонічні імена cmXXXX.

Зміст звіту.

1.Назва, мета роботи.

2.Постановка задачі.

3.Схема ієрархії класів.

4.Схема ієрархії об'єктів.

5.Опис маршруту, що проходить подія TEvent від формування до очищення.

6.Визначення класів.

7.Реалізація методів обробки подій GetEvent, Exicute, EndExec, Valid.

8.Реалізація всіх методів(для всіх класів) HandleEvent.

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();

};

classTRec: public TObject // пристрій для збереження даних - регістр

{protected:

float x;

public:

TReg();

~TReg();

float GetX();

void Set(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<<GetSum()<<endl;

ClearEvent(event);

break;

cmSet:

PutSum(event.A);

ClearEvent(event);

break;

default:

TSheme::HandleEvent(event);

} }

TSheme::HandleEvent(TEvent&event)

{TItem* r;

if(event.what==evMassage)

{r=last;

while(event.what!=evNothing&&r!=0)

{r->HandleEvent(event);

r=r->next;}

} }

TAdd::HandleEvent(TEvent&event)

{if(event.what==evMessage)

switch(event.command)

{cmAdd:

//занести в регістр число

(owner->reg)->Set(event.A);

//викликати метод додавання

Add();

ClearEvent(event);

break;

} }

TAdd::Add() //у суматор додати вміст регістра

{float a,b;

//одержати значення суматора

a=(owner->sum)->Get();

//одержати значення регістра

b=(owner->reg)->Get();

//змінити значення суматора

(owner->sum)->SetX(a+b);

}







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.