Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Blok_II.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
532.22 Кб
Скачать

29. Полиморфизм принциптері. Полиморфизм әр түрлілгі және оларды іске асыру.

1 Полиморфизм

Полиморфизм(polymorphism грек тілінен)- бұл техникалық әртүрлi есептерді, бірақ ұқсас екі немесе бірнеше есепті шығару үшін бірдей атты қолдануға мүмкiндiк беретін қасиет. Полиморфизмның объектіге бағытталған программалауда қолдану мақсаты, бір атты тапсырмасы ортақ класс әдістері (для класса действий) үшін қолдану болып табылады. Әрбiр нақты әдістердің (действия) орындалуы мәлiметтер типімен анықталады. Мысалы Си тiлі үшiн полиморфизмді қолдану жеткiлiксiз, себебі санның абсолюттiк шамасын табу үшін әр түрлі үш функция керек: abs(), labs() және fabs(). Бұл функциялар сәкесінше бүтін, ұзын бүтін (длинных целых) және жылжымалы нүктедегі санның абсолюттiк шамаларын есептеп қайтарады. Ал С++ тілінде осы аталған әр функция  abs() деп атала алады. Функцияны шақыру кезінде қолданылатын маліметтер типі, нақты қай функцияның орындалып жатқанын анықтайды. C++ тілінде функцияның бір атын әр түрлі әрекеттерді (действия) орындау барысында пайдалануға болады. Бұл функцияның жүктелуі (function overloading) деп аталады.

Жалпы полиморфизмның негізгі тұжырымдамасы «бiр интерфейс, көп әдіс" идеясы болып табылады. Яғни мағынасы жақын әдістер тобы үшін ортақ бір интерфейс құруға болады деген сөз. Плоиморфизмнің негізгі қасиеті күрделі программалардың орындалуын жеңілдетеді,  ол әр түрлі әдістерді орындау үшін бір ғана функцияны шақырып қолдануға мүмкіндік береді. Нақты бір әдісті алу программистке емес негізінен компиляторға жүктеледі, программист тек ортақ интерфейсті қолдануды ұмытпауы қажет.              Полиморфизм сонымен бiрге операторларға да қолданыла алады. Iс жүзiнде барлық  программалау тілдерінде полиморфизм шектеулі түрде қолданылады, мысалы  арифметикалық операторлар. «+» символы Си тілінде бүтін, ұзын бүтін, символды айнымалылар және жылжымалы нүктедегі сандарды қосу үшін қолданылады. Бұл жағдайда компилятор автоматты түрде арифметиканың қай типі керек екенін анықтайды. Ал С++ тілінде бұл концепцияны басқа да өзіміз берген мәліметтер типіне сәйкес қолдана аламыз. Полиморфизмнің бұндай түрі операторлардың жүктелуі (operator overloading) деп аталады. 

 

1.2 Функцияның жүктелуі

Функция жүктелуінің негізгі мақсаты  мынадай: бір атпен жазылған функция  әр түрлі орындалады және әр түрлі  мәндер мен типіне сәйкес әр түрлі  мәндер қайтарады. Жүктелу орындалу үшін, әрбір жүктелетін функцияның қайтаратын мәні мен айнымалыларын дәл сондай атпен жазылған басқа функциядан айырмашылығы болатындай етіп беру қажет. Компилятордың өзі типіне сәйкес берілген айнымалыны алатын қай функцияны алу керек екенін анықтайды.

Мысалы:

#include<iostream.h>

#include<string.h>

// int типті екі санды салыстыру

int max(int a,int b)

{

if(a>b) return a;

else return b;

}

// float типті екі санды  салыстыру

float max(float a,float b)

{

if(a>b) return a;

else return b;

}

// екі жолды салыстыру

char* max(char* a,char* b)

{

if(strcmp(a,b)>0) return a;

else return b;

}

void main()

{

int a1,b1;

float a2,b2;

char s1[20];

char s2[20];

cout<<"int tipi uwin:\n";

cout<<"a=";cin>>a1;

cout<<"b=";cin>>b1;

cout<<"MAX="<<max(a1,b1)<<"\n";

 

cout<<"\nfloat tipi uwin:\n";

cout<<"a=";cin>>a2;

cout<<"b=";cin>>b2;

cout<<"MAX="<<max(a2,b2)<<"\n";

 

cout<<"\nchar* tipi uwin:\n";

cout<<"a=";cin>>s1;

cout<<"b=";cin>>s2;

cout<<"MAX="<<max(s1,s2)<<"\n";

}

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]