Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМКД_ОБП_Урдабаева.doc
Скачиваний:
113
Добавлен:
01.03.2016
Размер:
1.29 Mб
Скачать
  1. Жәй және күрделі полиморфизм

Полиморфизм – бұл әдістің мәліметтерін шақыру кезінде қандай класстың объектісі қолданылатынан тәуелді болып келетін әр түрлі программалық кодқа (полиморфты код) – бір атпен берілген функцияның сәйекс келу құбылысы. Полиморфизм – класс ұрпақтарының міндетті түрдегі сигнатуралық әдіспен берілген класстың алдыңғы ұрпақтарының реализациялық әдісін өзгертумен қамтамасыз етіледі. Бұл класс ұрпақтарының өзгермейтін интерфэйсінің сақталуын қамтамасыз етеді және әр түрлі класпен берілген кодта әдіс атымен байланысуды жүзеге асырады. Мұнда шақыру қай кластың объектісімен жүзеге асырылады, мәліметтер атымен берілген әдіс те сол кластан алынады. Мұндай механизм динамикалық (жай) байланысу деп атайды.

Кез – келген прогаммалау тілінде класстар иерархиясын құру үшін полимарфизм механизмі қарастырылған. Ол иерархияның әр түрлі деңгей класстары үшін қандай да бір аты бойынша біріккен әдістің әр түрлі аспектілерін анықтауға мүмкіндік береді. Полимарфизмді жай және күрделі деп бөледі. Жай полимарфизм ерте байланысу механизміне негізделеді. Ал күрделі полимарфизм кеш байланысу механизмін қолданылады.

Жай немесе статикалық полимарфизм С++ тілінде компилиация кезінде қолданылады және функцияларды қайта анықтау механизмі көмегімен іске асырылады. Мұндай полиморфты функциялар с++ те қайта анықталатындар деп аталады. Жалпы ережелерге сәйкес олар қайталанатын параметр типімен және сигнатурамен яғни жіберілетін параметр сонымен типімен және кезектесу ретімен ерекшеленеді.

  1. Виртуальді функциялар

Виртуальді функциялар деп базалық класта virtual қызметші сөзімен анықталатын және бір немесе бірнеше туынды кластарда қайта анықталатын функцияларды айтамыз. Әртүрлі кластардағы функция прототиптері тек аттарымен ғана емес, сонымен қатар қайтаратын мән типтерімен де сәйкес келулері қажет. Егер функция прототиптері сәйкес келмесе, онда олар үшін виртуальділік қосылмайды.

Виртуальді болып хабарланған функция қанша туынды класс құрылса да, виртуальді болып қала береді. Бірақ кей кездерде бір немесе бірнеше туынды кластарда виртуальді функцияны қайта анықтау болмауы мүмкін. Виртуальді функция міндетті түрде қандай да бір кластың компоненті болуы қажет. Ол басқа класқа достық функция ретінде хабарлана алады, бірақ статикалық болып хабарлана алмайды.

Ең болмағанда бір виртуальді функцияны қамтитын класс полиморфты деп аталады, осындай класс объектісі де полиморфты болып табылады.

Бақылау сұрақтары:

  1. Полиморфизм дегеніміз не?

  2. Ерте байланысу механизмі қалай жүзеге асырылады?

  3. Виртуальді функциялар қалай анықталады?

  4. Қандай класс полиморфты деп аталады?

Әдебиеттер:

  1. Г.С. Иванова и др. ООП: Учебник для вузов, М., Изд-во МГТУ им.Баумана, 2003.- 368 с.

  2. Павловская Т.А. С и С++. Программирование на языке высокого уровня.

  3. Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004

  4. Подбельский В.В., Фомин С.С. Программирование на языке Си: Учебное пособие. – М.: Финансы и статистика, 2004

10 дәріс.

Тақырыбы: Достық функциялар және кластар

Дәріс мақсаты: достық функция және класс туралы түсінік беру, бағдарлама құру кезінде достық функцияларды қолдану.

Кілттік сөздер: достық функция; достық класс; класс компоненттері; қорғалған компоненттер; қатынау рұқсаты.

Жоспар:

  1. Достық функциялар және кластар

  1. Достық функциялар және кластар

Осы уақытқа дейін айтылып келгендей қатынауды басқару механизмін орындауға кластың жалпы, қорғалған және ішкі компоненттері мүмкіндік береді. Ішкі компоненттері класс ішінде ғана қол жетімді, ал қорғалған компоненттері кластың компонентті функцияларына және оның мұрагерлеріне ғана қол жетімді. Осылайша кластың ішкі және қорғалған компоненттеріне қатынаудың шектелуі тым қатал болуы мүмкін. Бұл басқа кластардан мұрагерлену мүмкіндіктерін тарылтып, оны қолдану нұсқаларын азайтуы мүмкін.

Кейбір кездерде компонентті емес функциялар кластың ішкі компоненттеріне қатынау қажеттігі туатын жағдайлар болады. Бұндай жағдайларда класс қандай да бір сыртқы функцияларға немесе басқа кластың компонентті функцияларына артықшылықтар бере алады. Ондай функциялар достық функциялар деп аталады.

Анықтама бойынша кластың достық функциясы деп қандай да бір компонентті болмай –ақ, сол кластың барлық компонентіне қатынай алатын функцияны айтады. Функция класс рұқсатынсыз оның досы бола алмайды. Дос болу рұқсатын алу үшін функция класс денесінде friend спецификаторымен сипатталуы керек. Тек осындай сипаттама бар болған кезде ғана класс функцияға ішкі және қорғалған компоненттеріне қатынауға рұқсат береді.

Басқа кластың компонентті функциялары да класс досы бола алады.

Достық функция класс компоненті болмағандықтан, оған public, protected, private қатынау спецификаторының әрекеті таралмайды. Достық функция прототипінің класс ішінде анықталу орны тұрақты емес.

Достық функция механизмін қолдану кластар арасындағы интерфейсті жеңілдетуге мүмкіндік береді.

Егер қандай да бір кластың барлық функциялары басқа кластың ішкі өрістеріне қатынау қажеттігі туса, онда класс түгелімен достық болып хабарлана алады.

Бақылау сұрақтары:

  1. Достық функция дегеніміз не?

  2. Достық функция қалай хабарланады?

  3. Қатынауды шектеу құралдары қандай?

  4. Достық класс дегеніміз не?

Әдебиеттер:

  1. Павловская Т.А. С и С++. Программирование на языке высокого уровня.

  2. Г.С. Иванова и др. ООП: Учебник для вузов, М., Изд-во МГТУ им.Баумана, 2003.- 368 с.

  3. Бьерн Страуструп. Язык программирования С++. Третье издание. - М.: Изд. Бином, Невский Диалект, 1999.

  4. Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004

11-12 дәріс.

Тақырыбы: Шаблондық кластар және шаблондық функциялар. Шаблондардың стандартты кітапханасы

Дәріс мақсаты: шаблондар, шаблондардың қолданылуына түсінік беру және шаблондардың стандартты кітанханасымен танысу.

Кілттік сөздер: шаблон; функция шаблоны; класс шаблоны; шаблон синтаксисі.

Жоспар:

  1. Шаблондық кластар

  2. Шаблондық функциялар

  1. Шаблондық кластар

Класс шаблоны, функция шаблоны секілді С++ тіліндегі жалпы программалау парадигмасын ұстанады. Шаблонның механизмі класты немесе функцияны анықтау параметрі ретінде С++ тілінде абтрактілі типтің қолданылуының қамтамасыз етеді.

Класс шаблоны анықталғаннан кейін, оны нақты бір класты анықталуында қолдануға болады.

Шаблон сатыланған деп, класс шаблонының нақты кластын генерацияланған процессінің анықталуың атаймыз.

Кластар шаблоны функция шаблоны секілді параметрленген кластарды құруда мүмкіндік береді. Параметрленген класс туыстық қатынастағы кластарды құрады, кез-келген мәлеметке қолданылады және параметр түрінде кез-келген типке қолданылады.

Кластар контейнері деп қандайда бір мақсатпен ұйымдастырылған мәліметтерді сақтауды және олармен жұмыс істеуді атамыз. Кез-келген түрдегі мәліметтерді ұйымдастыруға, С++ стандарты кітапханасында көптеген класстар контейнері бар.

Шаблонды қолданудың артықшылығы, алгоритмнің жұмысын мәлеметтермен анықталған жағдайда ол кез-келген типтен мәліметтерге кодты жазбай-ақ қолданылады.

Шаблонның синтоксистік жазылуы:

Tempate<шаблон _параметрінің _жазылуы>кластардың_анықталуы;

Шаблонның параметрі үтір арқылы ажыратылады. Параметр ретінде типтерді, шаблондарды пайдалануға болады.Тип-стандартты болуы да мүмкін және қолданушы анықтаған тип болуы мүмкін.Бұларды жазу үшін класс кілттік сөзі пайдаланылады.Типтін спецификациясы пайдалануға рұқсат берілген жағдайда, шаблонның ішінде типтін параметрі кез-келген қолданыла алады. Мысал:

Template <class Data> class List {

Class Node {

Public:

Data d;

Node *next;

Node *prev;

Node(Data dat = 0){d= dat; next =0; prev=0; } };

}

Data классын формалъді параметр түрінде қарауға болады, егер жүктегенде оның орнында мәліметтердің нақты типі қойылса. Кез-келген шаблон параметріне үнсіз жағдайдағы мағына берілуі мүмкін. Мысал:

Template<class T> class myarray{/*…*/};

Template<class K, class V, template<class T> class C=myarray>

Class Map{

C<K> key;

C<V> value;

};

  1. Шаблондық функциялар

Класс шаблонның әдісі автоматты түрде функция шаблондары болады. Егер әдәс шаблоннан тыс жазылса, оның тақырыбы келесі түрдегі элемент болуы керек:

Template<шаблон_параметрінің_анықьалуы>

Қайтымды_тип класс_ аты<шаблон_параметрі> : :

функция_аты (функция параметрлер_тізімі)

Функция тақырыбында, параметр шаблонның жазылуы класс шаблонына сәйкес келу қажет, мұнда параметр аты сәйкес болмауы мүмкін. Шаблон әдісінің синтоксистік жазылуын қарастырайық:

template< class Data> void List <Data> : : print()

{/*функция денесі*/}

Мұндағы <class data>-шаблон параметрінің жазылуы, void-Функцияның қайтымды мағынадағы типі, List класс аты, <Data>-шаблон параметрі, print-параметрсіз функция аты.

Шаблонның жазылу ережесі:

  • Локальді класс шаблонды өзінің элементті реиінде ала алмайды;

  • Шаблон әдісі вертуалді бола алмайды;

  • Класс шаблоныңда статистикалық элемент, достық функция немесе кластар бола алады;

  • Шаблонның ішінде Friend- шаблоның анықтауға болмайды.

Бақылау сұрақтары:

  1. Шаблон дегеніміз не?

  2. Функция шаблондары қалай сипатталады?

  3. Класс шаблондары қалай сипатталады?

  4. Шаблон не үшін қолданылады?

Әдебиеттер:

  1. Павловская Т.А. С и С++. Программирование на языке высокого уровня.

  2. Г.С. Иванова и др. ООП: Учебник для вузов, М., Изд-во МГТУ им.Баумана, 2003.- 368 с.

  3. Бьерн Страуструп. Язык программирования С++. Третье издание. - М.: Изд. Бином, Невский Диалект, 1999.

  4. Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004

13 дәріс.

Тақырыбы: Енгізу шығару құралы және ағындармен жұмыс

Дәріс мақсаты: ағын және ағын түрлерімен танысу, есеп шығару кезінде ағындарды қолдануды үйрену.

Кілттік сөздер: ағын; жолдық ағын; стандартты ағын; файлдық ағын; ағындық кластар.

Жоспар:

  1. Ағындар және ағындық кластар

  2. Енгізу-шығару ағыны

  3. Жолдық ағындар

    1. Ағындар және ағындық кластар

Ағын – бұл абстракты ұғым . С++ ағындары, С стиліндегі функциядан айырмашылығы оның шығару - енгізуінде , стандарттармен жұмыс секілді сенімді жұмысты қамтамасыз етеді , қолданушы анықталған мәліметтер типінің, сонымен қатар біркелкі және түсінікті синтаксис .

Мәліметтердің ағынының оқылуы шығарумен аталады. Байттардың жүйелілік сияқты ағын анықталады және нақтылы құрылғыдан тәуелді болмайды , қайсымен айырбастау шығарылады ( оперативті жадта, дискідегі файл, клавиатура немесе принтер ). Ағынмен айырбастау үшін мәліметтің берілуі жылдамдықтың арттырумен құрылады, ереже бойынша, буфер – оперативті жадының арнайы облыс арқылы өтеді. Мәліметтің берілуі буфер толтырылғаннан кейін шығарылады , ал буфер таусылса, онда енгізу.

Айырбастау ағыны енгізулер шығаруда, оның екі жақты бағытта бөлуге болады, ағын жұмыс істейтін құрылғының түрімен ағынды стандартты және файлдық, жолдық болып бөлуге болады.

Стандартты ағындар мәліметтерді пернетақтадан және экраннан жіберуге арналған, файлдықтар ағындар – мәлімет тасушы мен файл арасындағы информациямен айырбастайды, ал жолдық ағын – оперативті жадтағы массивтің символымен жұмыс жасайды.

Ағын үшін С++ кітапханасында кластардың иерархиясы құрылады, ios және streambuf базалық кластарында құрылған. ios класы жолы мен әдістің шығару мен енгізуден тұрады, streambuf класы ағынды буферлеумен қамтамасыз. Бұл кластардан i stream енгізу үшін ostream шығару үшін қолданылады. Ең соңғы екі класс iostream класы үшін базасы болып табылады. Екі бағыттағы ағындық класта табылады, екі ағындық класс төменде класс иерархиясында файлдық және жолдық ағын құрылады. Ары қарай класс ағынында пайдаланылатындар саналады.