Дістемелік кешен



бет80/112
Дата22.12.2021
өлшемі0,85 Mb.
#127596
түріПрограмма
1   ...   76   77   78   79   80   81   82   83   ...   112
Байланысты:
ооп лекция

Оқиғаны өңдеу мысалы.

Командалық жолда команданы қабылдайтын қарапайым калькуляторды қарастырайық. Мұнда қарапайым нұсқасы келтірілген. Лабораториялық жұмысты схема бойынша орындауға арналған нұсқасы қосымшада келтірілген.



Команда форматы:

белгі параметр

Белгілер +, –, *, /, =, ?, q

Параметр – бүтін сан

Константалар-командалар:

сonst int evNothing = 0;

сonst int evMessage = 100;

сonst int cmSet = 1; //сан жазу

сonst int cmGet = 2; //мәнін қарау

сonst int cmAdd = 3; //қосу

и т.д.

сonst int cmQuit = 101; //шығу


Класс-оқиға

struct TEvent

{int what

union{

int evNothing;

union{int command;

int a;}

}

}

Бүтін сандармен жұмыс жасайтын объект-калькулятор.


class TInt{

int EndState;

public

int x;


Int(int x1);

virtual ~Int();

virtual void GetEvent (TEvent &event);

virtual int Exicute();

virtual void HandleEvent (TEvent& event);

virtual void ClearEvent (TEvent& event);

int Valid();

void EndExec();

int GetX();

void SetX (int newX);

void AddY (int Y);

};


Негізгі әдістердің жүзеге асу мүмкіндіктерін қарастырамыз.

void TInit::GetEvent(TEvent &event)

{char* OpInt = “+-*/=?q”; // жолда операциялар коды бар

char s[20];

char code;

cout<<‘>’;

cin>>s; code = s[1];

if(Test(char code,char*OpInt) // Test функциясы code символы OpInt жолына //кіретіндігін тексереді


{event.what = evMessage;

swith(code)

{case ‘+’: event.command=cmAdd;

break;


case‘q’: event.command = cmQuit;

break;

}

//екінші параметрді белгілеу, оны int типіне айналдыру және А өрісіне меншіктеу



};

else event.what= evNothing

};

int TMyApp::Execute()



{do{endState=0;

GetEvent(event); //оқиғаны алу

HandleEvent(event); //оқиғаны өңдеу

if(event.what!=evNothing) //оқиға өңделмей қалды

while(!Valid());

return endState;

}

void TInt::HandleEvent(TEvent& event)



{

if( event.what == evMessage)

{

switch( event.message.command )



{

case cmAdd:AddY(event.A);

СlearEvent( event );

break;


case cmQuit:EndExec();

СlearEvent( event );

break;


};

};

}



int TInt::Valid();

{ if (EndState == 0) return 0;

else return 1;

}
void TInt::ClearEvent(TEvent& event)

{

Event. what:= evNothing;



}

void TInt::EndExec()

{

EndState= 1;



}

void TInt::AddY(int Y)

{

x+=Y;


и т.д.

void main()

{

TInt MyApp;



MyApp.Execute();

}
Жұмысты орындау реті.

1. Қосымшада келтірілген мысалды талдау. Келесі срақтарға жауап беру:

а) мұндағы кластардың иерархиясы қандай?

б) мұндағы объектілердің иерархиясы қандай?

в) операцияның аргументтері КАЛЬКУЛЯТОРҒА қалай беріледі? Олар қайда сақталады? ҚОСУ, АЗАЙТУ және т.б. амалдар оған қалай қолжетімді?

г) оқиға топпен қалай өңделеді?

д) TEvent оқиғасының барлық маршруттары қандай?

е) барлық класстардың HandleEvent қалай орындалады?

2. Оқиғаны өңдейтін объектілер тобын таңдау (бұл қосымшада келтірілген объектілер болуы мүмкін емес).

3. Таңдалған объектілер үшін қолданушының командасы бойынша орындалатын операциялар тізімін анықтау.

4. Командалық жолдың түрін анықтау<операция коды><параметрлер>. Сұрақтарды шешу:

Операциялар қалай кодталады? Қандай параметрлер беріледі?

5. Объектілердің иерархиясын анықтау, егер жаңа объектілер (объектілер тобын) қосу қажет болса.

6. егер жаңа класс қосу қажет болса, класстар иерархиясын анықтау.

7. Программада қандай объект қосымша қызметін атқаратынын анықтау. Қажет болған жағдайда класстар иерархиясына TApp класын қосу. Оқиғаны өңдеудің негізгі циклын ұйымдастыратын Execute әдісі қай класта болатынын анықтау.

8. Оқиғаны өңдеуге қажет әдістерді анықтау және жүзеге асыру.

9. (main) негізгі функциясын жазу.


Әдістемелік нұсқау.

1. Оқиғасын өңдеуді ұйымдастыратын топ ретінде №3 лабораториялық жұмыстан топты таңдау.

2. Әртүрлі өңделетін командалардың саны 5-тен кем болмауы қажет.

3. Кластардың анықталуын *.h файлға орналастыру. Кластың функция-мүшесінің анықталуын *.cpp файлға орналастыру.

4. Командалармен байланысты тұрақтылар үшін cmXXXX мнемоникалық атауларды қолдану.
Есеп берудің мазмұны.

1. Титулдық бет.

2. Есептің қойылымы.

3. Класстар иерархиясының схемасы.

4. Объектілер иерархиясының схемасы.

5. TEvent оқиғасы өтетін құрудан тазартуға дейінгі маршрутын сипаттау.

6. Класстарды анықтау.

7. GetEvent, Exicute, EndExec, Valid оқиғаларды өңдеу әдістерін жүзеге асыру.

8. HandleEvent –тің барлық әдістерін жүзеге асыру (барлық кластар үшін).

9. main() функциясының листингісі.


Қосымша.

КАЛЬКУЛЯТОР объектісінақты сандарды қосу, азайту, көбейту, бөлу амалдарын орындайды.

Объектілер иерархиясы.




Достарыңызбен бөлісу:
1   ...   76   77   78   79   80   81   82   83   ...   112




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет