Полиморфизм. Жәй және күрделі полиморфизм

 

Дәріс мақсаты: объектіге бағытталған программалаудың қасиеттерінің бірі – полиморфизм түсінігін беру, оның түрлерін ажырата білу.

Кілттік сөздер: полиморфизм; жәй полиморфизм; күрделі полиморфизм; ерте байланысу механизмі; кеш байланысу механизмі.

Жоспар:

  1. Жәй және күрделі полиморфизм
  2. Виртуальді функциялар

 

1.     Жәй және күрделі полиморфизм

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

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

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

 

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

Виртуальді функциялар деп базалық класта 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

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *