- •Қазақстан республикасы білім және ғылым министрлігі қ. Жұбанов атындағы ақтөбе мемлекеттік университеті
- •050602 - «Информатика» мамандығы күндізгі бөлімінің
- •«Obp 4301 Объектіге бағытталған программалау» пәнінен
- •II кафедраның әдістемелік секциясы отырысында талқыланды
- •Пән мазмұны
- •Лабораториялық сабақтардың тақырыптарының үлгілі тізімі
- •Өзіндік жұмыстардың тақырыптарының үлгілі тізімі
- •Ұсынылған әдебиеттер тізімі
- •Оқу пәнінің жұмыс бағдарламасы
- •I жұмыс бағдарламасы дайындалып енгізілді
- •II кафедра отырысында талқыланды
- •IV факультеттің оқу-әдістемелік комиссиясына бекітуге ұсынылды
- •V алғашқы тексеру мерзімі 2011 ж. Тексеру мерзімділігі 1 жыл
- •Дәрістер
- •Практика сабақтары
- •Лаборатория сабақтары
- •Негізгі әдебиеттер
- •Оқу пәнінің жұмыс бағдарламасы
- •Пәннің тақырыптық жоспары
- •Өзіндік жұмыс тапсырмалары
- •1. Жұмыс түрлері:
- •2. Жұмыс түрлерін бағалау критериилері:
- •Курстық жұмыстың тақырыптары
- •Пән бойынша тапсырмаларды орындау және тапсыру графигі
- •Пәннің оқу-әдістемемен қамтамасыз ету картасы
- •Қр білім және ғылым министрлігі
- •2. Көпше түрдегі мұрагерлік
- •2. Операторларды қайта анықтаудың түрлері.
- •3. Унарлы операторларды қайта анықтау
- •4. Бинарлы операторларды қайта анықтау
- •5. Меншіктеу операторларын қайта анықтау
- •6. New және delete операторларын қайта анықтау
- •Жәй және күрделі полиморфизм
- •Виртуальді функциялар
- •Иерархия схемасы
- •Қр білім және ғылым министрлігі
- •2. Орындауға арналған тапсырмалар:
- •Практикалық жұмыс №2 конструкторларды және деструкторларды құру
- •2. Орындауға арналған тапсырмалар:
- •3. Өз бетімен орындауға арналған тапсырмалар (үй тапсырмасы):
- •Практикалық жұмыс №3-4 мұрагерлік. Жалғызданған және көпше түрдегі мұрагерлік
- •2. Орындауға арналған тапсырмалар:
- •3. Өз бетімен орындауға арналған тапсырмалар (үй тапсырмасы):
- •Практикалық жұмыс №5-6 полиморфизм. Амалдарды қайта анықтау
- •3. Өз бетімен орындауға арналған тапсырмалар (үй тапсырмасы):
- •5. Литерлік шамаларға қолданылатын функциялар қай кітапханада орналасқан?
- •Практикалық жұмыс №7-8 функциялардың және операторларды қайта жүктеудің бірге қолданылуы
- •3. Өз бетімен орындауға арналған тапсырмалар (үй тапсырмасы):
- •Практикалық жұмыс №9-10 енгізу-шығару ағындары
- •2. Өз бетімен орындауға арналған тапсырмалар (үй тапсырмасы):
- •Қр білім және ғылым министрлігі
- •Жұмысты орындау тәртібі
- •Өзіндік жұмыс тапсырмалары
- •Жұмыс есебі
- •Жұмысты орындау тіртібі
- •Өзіндік жұмыс тапсырмалары
- •Жұмыс есебі
- •Жұмысты орындау тіртібі
- •Өзіндік жұмыс тапсырмалары
- •Жұмыс есебі
- •Лабораторялық жұмыс бойынша сұрақтар
- •Лабораториялық жұмыс № 6-7 объектілер иерархиясы. Топтар. Итераторлар.
- •Қысқаша теориялық мәліметтер
- •Объектілер иерархиясы.
- •Мұндағы gr топ-объект.
- •Жұмысты орындау тәртібі
- •Өзіндік жұмыс тапсырмалары
- •Жұмыс есебі
- •2.Достық функциялар
- •Іі. Жұмыстың орындалу реті
- •Ііі. Өзіндік жұмыс тапсырмалар
- •Жұмыс есебі
- •Іі. Жұмыстың орындалу реті
- •Бүтін сандармен жұмыс жасайтын объект-калькулятор.
- •Жұмысты орындау реті.
- •Әдістемелік нұсқау.
- •Есеп берудің мазмұны.
- •Калькулятор
- •Қр білім және ғылым министрлігі
- •3. Практикалық және лабораториялық сабақтарды орындау
- •Қр білім және ғылым министрлігі
- •Тақырыбы: Конструкторлар және деструкторлар
- •Тақырыбы: Мұрагерлік
- •Тақырыбы: Операторларды қайта жүктеу
- •Тақырыбы: Ағындық кластар
- •Бақылау-өлшеу материалдары
- •21. Литерлік шамаларға қолданылатын функциялар қай кітапханада орналасқан?
- •Келісу парағы
Іі. Жұмыстың орындалу реті
1. Теориялық бөліммен танысу.
2. 1 – 2 программалардың жұмысымен танысу.
3. Өзіндік жұмыс тапсырмаларын орындаңыз.
ІІІ. Өзіндік жұмыс тапсырмалар
Нақты сандар үшін +, - , * амалдарын қайта жүктеу.
Жолдар үшін =, <> амалдарын қайта жүктеу.
Символдар үшін +, =, <> амалдарын қайта жүктеу.
Символдар үшін жоғарғы және төмен регистрлерге ауыстыру операторларын қайта анықтау.
Жолдар үшін жолды жолға жалғау, жол ұзындығын есептеу амалдарын қайта жүктеу.
Бүтін сандар үшін дәрежені есептеу, түбірді есептеу амалдарын қайта жүктеу.
Жұмыс есебі
- Жұмыс тақырыбы мен мақсаты;
- Жұмыстың орындалуы кезінде қойылған сұрақтарға жауап беру;
- Өзіндік жұмыс программасының листингі.
Лабораторялық жұмыс бойынша сұрақтар
Операторларды қайта жүктеу дегеніміз не?
Қандай операторларды қайта жүктеуге болады?
Индекстеу операторы қалай қайта жүктеледі?
ЛАБОРАТОРИЯЛЫҚ ЖҰМЫС № 12-13
ОҚИҒАЛАРДЫ ӨҢДЕУ
Мақсаты. Оқиғалармен басқарылатын объектілі-бағытталған программа құруға практикалық дағдыландыру.
Жұмыстың негізгі мазмұны.
Қолданушының пернетақтадан енгізген командаларын орындайтын интерактивті программа жазу.
Қысқаша теориялық мәліметтер.
Объектілі-бағытталған программа оқиғалармен басқарылатын программа ретінде.
ОБП қолданғанда барлық объектілер бір-бірінен ерекшеленген болып келеді және объектіден объектіге ақпарат бергенде айтарлықтай қиындықтай туындайды. ОБП-да объектілер арасында ақпаратты беру үшін оқиғаларды өңдеу механизмі қолданылады.
Оқиғаларды объектілер арасында алмасатын ақпараттар пакеті ретінде елестетуге болады және олар объектілі бағытталған ортада қолданушының қандай да бір әрекетіне жауап ретінде құрылады. Пернеге басу немесе тышқан манипуляторын шерту бұл оқиғаны қалай өңдеуге болатынын білетін объект табылғанша объектілер тізбегімен жалғасып, оқиға туғызады. Объектіден объектіге оқиға берілу үшін программаның барлық объектілері бір топқа біріктірілуі қажет. Осыдан қолданбалы программа программада қолданылатын барлық объектілер біріктірілген объект-тобы болуы керек.
Осылайша, ОБП - бұл оқиғалармен басқарылатын программа. Оқиға программада өздігінен ешқандай әрекет етпейді, бірақ оқиғаға жауап ретінде программаның күйін өзгеріске келтіретін бар объектілер өзгеруі немесе жойылуы, жаңа объектілер құрылуы мүмкін. Басқаша айтқанда мәліметтерді өңдегенде барлық әрекеттер объектілермен жүзеге асырылады, ал оқиғалар тек олардың жұмысын басқарады.
Объектілерді құру процесінен өңдеудің тәуелсіз принципі бір программа көлемінде параллель екі процестің пайда болуына әкеледі: объектіні құру процесі және мәліметтерді өңдеу процесі. Бұл дегеніміз мысалы, программаның интерактивті элементтерін құру кезінде қолданушының онымен байланысты әрекеттерін ескермей-ақ, объектіні құру әрекетін жүзеге асыруға болады.
Және керісінше, программаның қолданушы әрекетін өңдеуге жауапты бөлігін дайындап, бұл бөлікті қажет интерактивті элемент құрумен байланыстырмауымызға болады.
Оқиға
С++ тұрғысынан оқиға – бұл объект, оның жеке өрістері берілетін ақпараттың қандай да бір қасиеттерін сипаттайды, мысалы:
struct TEvent
{int what
union{
MouseEventType mouse;
KeyDownEvent keyDown;
MessageEvent message;
};
TEvent объектісі екі бөліктен тұрады. Біріншісі (what) берілген оқиғаның көзін анықтайтын оқиғаның типін береді. Екіншісі оқиғамен берілетін ақпаратты береді. Оқиғаның әртүрлі типтері үшін ақпараттың мазмұны әртүрлі. What өрісі келесі мәндерді қабылдауы мүмкін:
evNothing – ешнәрсе жасау қажет еместігін білдіретін бос оқиға. what өрісіне evNothing мәні беріледі, егер оқиға қандай да бір объектімен өңделсе.
evMouse – тышқаннан болатын оқиға.
Тышқаннан болатын оқиға мысалы, мынадай құрылымда болуы мүмкін:
struct MouseEventType
{int buttons;
int doubleClick;
TPoint where;
};
Мұнда buttons басулы пернеге көрсетеді.
doubleClick екі рет шерту болғандығын тексереді;
where тышқан координатасын көрсетеді.
evKeyDown – Пернетақтадан болатын оқиға.
Пернетақтадан болатын оқиға мысалы, мынадай құрылымда болуы мүмкін:
struct KeyDownEvent
{union{int keyCode;
union{char charCode;
char scanCode;
};
};
};
evMessage объектіден оқиға-хабарлама.
объектіден (evMessage) оқиға-хабарлама үшін екі параметр беріледі:
command – осы оқиға пайда болғанда орындау қажет команда коды;
infoPtr – оқиғамен брілетін (хабарлама) ақпарат.
struct MessageEvent
{int command;
void infoPtr;
};
Оқиғаларды өңдеу әдістері.
Келесі әдістер оқиғаларды өңдеуді ұйымдастыру үшін қажет (атаулары еркін).
GetEvent – оқиғаны құру;
Execute оқиғаны өңдеудің негізгі циклын жүзеге асырады. Ол үнемі GetEvent шақыру арқылы оқиғаны алады және HandleEvent көмегімен оларды өңдейді. Бұл цикл «соңы» оқиғасы болғанда аяқталады.
HandleEvent – оқиғаларды өңдеуіш. Әрбір оқиғаны оған қажет түрде өңдейді. Егер объект анықталған оқиғаны(хабарламаны) өңдеуге тиіс болса, онда оның HandleEvent әдісі бұл оқиғаны танып, онымен тиісті түрде әрекет етуі қажет. Оқиға мысалы, команда коды (command өрісі) арқылы танылуы мүмкін.
ClearEvent өңделген оқиғаны әрі қарай өңделмес үшін тазартады.
Оқиғаны өңдегіш (HandleEvent әдісі).
TDerivedClass класы үшін оқиғаны алып, оқиғаны өңдегіш оны келесі схема бойынша өңдейді:
void TDerivedClass::HandleEvent(TEvent& event)
{ //Базалық кластың оқиға өңдегішін шақыру
TBaseClass::handleEvent( event );
if( event.what == evCommand ) // Егер базалық кластың оқиға өңдегіші оқиғаны // өңдемесе
{
switch( event.message.command )
{
case cmCommand1:
// cmCommand1 командасын өңдеу
// Оқиғаны тазарту
СlearEvent( event );
break;
case cmCommand2:
// cmCommand2 командасын өңдеу
СlearEvent( event ); командасын өңдеу
break;
…
case cmCommandN:
// cmCommandN командасын өңдеу
СlearEvent( event );
break;
default: // оқиға өңделген жоқ
break;
}
};
}
Топтың оқиға өңдегіші алдымен топтың командаларын өңдейді, сонан соң егер оқиға өңделмесе өзінің элементтеріне олардың оқиға өңдегіштерін шақыра отырып оны береді.
void TGroup::HandleEvent(TEvent& event)
{ if( event.what == evCommand )
{switch( event.message.command )
// объект-топтың оқиғасын өңдеу
default: // оқиға топпен өңделмеген
//топтың бірінші элементіне рұқсат алу
while((event.what != evNothing)!!( /* барлық эелементтер қаралып болған жоқ */)
{
//ағымдағы элементтің HandleEvent оқиғасын шақыру
//топтың келесі элементіне көшу
}
break;
}
}
ClearEvent әдісі-оқиғаны тазарту.
ClearEvent event.What өрісіне evNothing мәнін меншіктей отырып оқиғаны тазартады.
Оқиғаны өңдеудің негізгі циклы (Execute әдісі)
Оқиғаны өңдеудің негізгі циклы «қолданбалы программа» негізгі объект-тобының Execute әдісінде келесі схема бойынша жүзеге асырылады:
int TMyApp::Execute()
{do{endState=0;
GetEvent(event); //оқиғаны алу
HandleEvent(event); //оқиғаны өңдеу
if(event.what!=evNothing) //оқиға өңделмей қалды
EventError(event);
}
while(!Valid());
return endState;
}
HandleEvent әдісі EndExec әдісін шақыра отырып «жұмыстың соңы» оқиғасын өңдейді. EndExec EndState айнымалысының private мәнін өзгертеді. Бұл айнымалының мәнін Valid әдіс-функциясы тексереді, егер «жұмыстың соңы» болса, онда true мәнін қайтарады. Мұндай бірнеше күрделі жұмысты аяқтау әдісі белсенді күйде топтың бірнеше элементтері бола алатындығымен байланысты. Онда топтың Valid әдісі өзінің ішкі элементтерінің Valid әдістерін шақыра отырып, олардың барлығы true қайтарса, true қайтарады. Бұл программа оның барлық элементтері жұмысын аяқтағанда, ол да жұмысын аяқтайтынына кепілдік береді.
Егер оқиға өңделмей қалса, онда қарапайым жағдайда жай хабарлама беретін EventError әдісі шақырылады.
Оқиғаны өңдеу мысалы.
Командалық жолда команданы қабылдайтын қарапайым калькуляторды қарастырайық. Мұнда қарапайым нұсқасы келтірілген. Лабораториялық жұмысты схема бойынша орындауға арналған нұсқасы қосымшада келтірілген.
Команда форматы:
белгі параметр
Белгілер +, –, *, /, =, ?, 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;}
}
}