Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

REFERAT / Polimorfizm.Virtual funkciya. Abstrakt klass

.docx
Скачиваний:
5
Добавлен:
14.01.2024
Размер:
32.64 Кб
Скачать

Tema: Polimorfizm.Virtual funkciya. Abstrakt klass

J o b a :

  1. Polimorfizm ne?

  2. Virtual funksiyalar ;

  3. Klasstıń virtual atributları miyrasxorǵa ótiwi;

  4. Virtual funksiyanıń ierarxik ózgesheligi;

  5. Abstrakt klass túsinigi;

Polimorfizm - bul bir interfeys, bir neshe metod. Yaǵnıy metodlardı overload yamasa override kórinisi bolıp tabıladı. Polimorfizm eki qıylı kóriniste boladı:

compile time;

run time;

Compile time polimorfizm bul funksiyalar hám operatorlar overloadi, yaǵnıy funksiyalar hám operatorlardıń qosımsha júkleniwi bolıp tabıladı (function overloading or operator overloading).

Runtime time polimorfizm bul - miyrasxorlıq hám virtual funksiyalardan paydalanıwda payda boladı (Function overriding).

Virtual funksiya tiykar klass aǵzası esaplanadı hám miyrasxor klassta qayta birdey parametr tiykarında daǵaza etiledi.

Virtual funksiya jaratıw ushın, tiykar klass ishinde funksiya jaratılıwı processinde virtual gilt sózinen paydalanıladı.

Tiykar klassta virtual funksiya daǵaza etilgen bolsa, miyrasxor klassta bul funksiya qayta daǵaza etiliwi múmkin hám óz qásiyetlerinen kelip shıqqan halda funksiya denesi basqasha jazılıwı múmkin.

Bul qayta daǵaza etilgen funksiyanıń barlıq parametrleri tiykar klasstaǵı funksiya parametrleri menen birdey bolıwı kerek, mısal ushın : funksiya qaytarıw tipi, argumentlar sanı hám tipi

class base {

class base {

public:

virtual void vfunc() {

cout << "This is base's vfunc().\n";

}

};

class derived1 : public base {

public:

void vfunc() {

cout << "This is derived1's vfunc().\n";

}

};

class derived2 : public base {

public:

void vfunc() {

cout << "This is derived2's vfunc().\n";

} };

int main()

int main()

{

base *p, b;

derived1 d1;

derived2 d2;

// Base klasqa kórsetkish

p = &b;

p->vfunc(); // base klass vfunc() virtual funksiyasi

// derived1 klasqa ko’rsetkish

p = &d1;

p->vfunc(); // derived1 klass vfunc() virtual funksiyasi

// derived2 klasqa kórsetkish

p = &d2;

p->vfunc(); // derived2 klass vfunc() virtual funksiyasi

return 0;

}

Bul programmaǵa kóre, base klasında vfunc () atlı virtual funksiya daǵaza etilgen. Bul jerde isletilingen virtual gilt sózi qalǵan miyrasxor klasstaǵı funksiyalar islewi ushın múmkinshilik jaratadı. derived1 hám derived2 miyrasxor klaslarda vfunc () funksiya ushın virtual gilt sózin isletiw shárt emes.

Sonday eken, tiykar klass kórsetkish obiekti (*p) miyrasxor klass aǵzalarına yaǵnıy funksiyalarına shaqırıq ete aladı, eger bul funksiya tiykar klassta virtual dep daǵaza etilgen bolsa; Tiykar klasstan miyrasxor alınǵanda bul klasstaǵı virtual funksiya miyrasxorlıq ózgeshelikine iye boladı.

Bul sonı ańlatadıki, tiykar klass virtual funksiyası miyrasxor klass ushın ámeldegi bolǵanı menen birge, bul miyrasxor klasstan taǵı miyrasxor alınǵan halda da bul virtuallıq ózgesheligi saqlanıp qaladı. Yaǵnıy bul funksiya ekinshi miyrasxor klass ushın da override etiledi. Bul ózgeshelik bir neshe miyrasxorlıqta da saqlanıp qaladı. Tómendegi mısalda kóremiz:

class base {

class base {

public:

virtual void vfunc() {

cout << "This is base's vfunc().\n";

}

};

class derived1 : public base {

public:

void vfunc() {

cout << "This is derived1's vfunc().\n";

}

};

/* derived2 klas ushin vfunc() virtual funksiyasi derived1 klasstan miyrasxor retinde ótken. */

class derived2 : public derived1 {

public:

void vfunc() { // vfunc() virtual funksiya

cout << "This is derived2's vfunc().\n";

} };

int main()

int main()

{

base *p, b;

derived1 d1;

derived2 d2;

// base klasqa ko’rsetkish

p = &b;

p->vfunc(); // base sinf vfunc() virtual funksiyasi

// derived1 klasqa ko’rsetkish

p = &d1;

p->vfunc(); // derived1 sinf vfunc() virtual funksiyasi

// derived2 klasqa ko’rsetkish

p = &d2;

p->vfunc(); // derived2 klass vfunc() virtual funksiyasi

return 0;

}

Tiykar klassta virtual funksiya jaratılǵan jáne bul miyrasxor klass ushın override etiliwi múmkin.

Eger miyrasxor klassta usı virtual funksiya override etilmegen bolsa ne boladı? Bunda miyrasxor klass obiekti virtual funksiyaǵa shaqırıq etedi, yaǵnıy tiykar klass virtual funksiyasına. Tómende mısal keltirilgen:

class base {

class base {

public:

virtual void vfunc() {

cout << "This is base's vfunc().\n";

} };

class derived1 : public base {

public:

void vfunc() {

cout << "This is derived1's vfunc().\n";

}

};

class derived2 : public base {

public:

// vfunc() override qilinmag’an

};

int main()

int main()

{

base *p, b;

derived1 d1;

derived2 d2;

// base klasqa ko’rsetkish

p = &b;

p->vfunc(); // base klass vfunc() virtual funksiyasi

// derived1 klasqa ko’rsetkish

p = &d1;

p->vfunc(); // derived1 klass vfunc() virtual funksiyasi

// derived2 klasqa ko’rsetkish

p = &d2;

p->vfunc(); // derived2 sinf vfunc() virtual funksiyasi

return 0;

}

C++ tilinde keminde bir virtual funksiyaǵa iye bolǵan klass abstrakt klass dep ataladı.

C++ tilinde keminde bir virtual funksiyaǵa iye bolǵan klass abstrakt klass dep ataladı.

Abstrakt klasstıń tiykarǵı ózgeshelikinen biri mınada, bul túrdegi klasstan obiekt alıp bolmaydı.

Sonday eken sinfni tolıq abstractligini támiyinlew ushın tómendegi nizamlıqtan paydalanamız :

class base{

public:

virtual vfunc(args....) = 0;

..... }

class Base

class Base

{

public:

virtual void display( int i)=0;

};

class Derv: public Base

{

public:

void display(int j)

{ cout<<"Derv::"<<="" b="">

};

int main()

{

Base b; // Qáte, sebebi Base klass abstrakt

Base *ptr = new Derv;

ptr->display(10);

return 0;

}

Eger násil olinayotgan class bir neshe base classdan násil alǵanda hatolik ámeldegi boladı. Bunday jaǵdaylarda ne qılıw kerek? Bunday jaǵdaylarda virtual base classlar isletiledi.

Bul kodta qátelik bar:

class base { public: int i; };

class derived1 : public base { public: int j; };

class derived2 : public base { public: int k; };

class derived3 : public derived1, public derived2 {

public: int sum;

}; int main () {

derived3 ob;

ob. i = 10 ;

ob.j = 20 ;

ob. k = 30 ;

ob. sum = ob. i + ob.j + ob. k;

}

Qátelik qaysı i???

Bul kodta qátelik bar:

Class base { public: int i; };

class derived1 : public base { public: int j; };

class derived2 : public base { public: int k; };

class derived3 : public derived1, public derived2 {

public: int sum;

};

derived3 ob;

ob. derived1::i = 10 ;

ob.j = 20 ;

ob. k = 30 ;

ob. sum = ob. derived2::i + ob.j + ob. k;

:: arqalı qaysı classnikini isletiw aytildi

Class base { public: int i; };

class base { public: int i; };

class derived1 : virtual public base { public: int j; };

class derived2 : virtual public base { public: int k; };

class derived3 : public derived1, public derived2 {

public: int sum;

};

derived3 ob;

ob. i = 10 ;

ob.j = 20 ;

ob. k = 30 ;

ob. sum = ob. i + ob.j + ob. k;

Bul jaǵdayda programma tuwrı isleydi.

void f(int i){cout<<"int";}

void f(int i){cout<<"int";}

void f(char c){cout<<"char";}

int main() { f(10); return 0; }

Juwmaq: int

Method is overloading

class Base { public: virtual void display(int i) { cout<<"Base::"<display(10); return 0; }

class Base { public: virtual void display(int i) { cout<<"Base::"<display(10); return 0; }

Natija: Derv::10

Agar “virtual” gilt so’zdi alip taslansa

Natija: Base::10

Method overriding

Herbert Shield “C++ The complete references - fourth edition” 2003. Part -2, Chapter - 17.

Herbert Shield “C++ The complete references - fourth edition” 2003. Part -2, Chapter - 17.

TutorialsPoint - simply easy learning programming: http://www. tutorialspoint. com/cplusplus/cpp_inheritance. htm

http://www. questionscompiled. com/answer/cpp/148/compile-time-polymorphism-and-run-time-polymorphism/

Polimorfizm bul - bir at menen bir neshe funksiyalardı qayta júkleniwi bolıp tabıladı.

C++ de polimorfizm 2 usılda kórinetuǵın boladı :

1-usıl : funksiyalar hám operatorlardıń qosımsha júkleniwinde.

2-usıl : miyrasxorlıq hám virtual funksiyalardan paydalanıwda payda boladı.

Abstrakt class hám funksiyalar

Abstrakciya obiektke jóneltirilgen programmalastırıw (OOP) tilleriniń tiykarǵı túsiniklerinen biri bolıp tabıladı. Onıń tiykarǵı maqseti paydalanıwshınan kereksiz maǵlıwmatlardı jasırıw arqalı quramalılıqtı basqarıw bolıp tabıladı. Bul paydalanıwshına barlıq jasırın quramalılıqtı tushunmasdan, odan paydalanıwǵa múmkinshilik jaratadı.

Abstrakciya tek ǵana programmalastırıwǵa tiyisli bolǵan túsinik emes, onı real turmısımızdıńda da kóp javhalarda baqlawımız múmkin. Keling bolmasa, abstrakciya túsinigin, kúndelik turmısımızdıńda ushırasıp turatuǵın bankomatlardan pul sheshiw temasına baylanıstırıp kóremiz.

Oyda sawlelendiriw etiń siz studentiz hám búgin sizdiń bank kartangizga stipendiya tústi. Ózińizdi - ózińiz miyman etiw maqsetinde, karta daǵı aqshanı naq kóriniske keltiriw ushın bankomatga keldińiz. Bankomatdan ózińizge kerekli bolǵan summanı belgilep, onı naq kórinisinde qabıl etip aldıńiz.

Bul processda siz biliwińiz kerek bolǵan jumıs bul -bankomat aparatiga kartanı salıp, sheshilgen pulni qabıllaw. Sizge bankomat aparati ózi qanday isleydi hám pulni naqdlash procesi qanday boladı - bul áhmiyetsiz. Kimdir bunnan qáweterlenip, bankomat aparatini jarattı, endi ol abstrakt wazıypasın atqaradı hám sizge tiyisli bolmaǵan tolıq maǵlıwmatlardı jasıradı. Siz jaysha ishki programma haqqında hesh qanday bilim talap etpeytuǵın ápiwayı interfeys menen óz-ara baylanısda bolasız.

Programmalastırıwda da sol sıyaqlı túsinikler orınlı. Endigi náwbette C# programmalastırıw tilinen paydalanıp temanı yanayam bekkemleymiz.

C# programmalastırıw tilinde abstrakciya

Abstrakciya túsinigi tiykarlanıp klass hám metodlar ushın paydalanıladı hám abstract gilt sózi járdeminde qurıladı.

Abstrakt klass- bul ápiwayılastırıp aytqanda sheklengen klass. Yaǵnıy odan obiekt alıw qadaǵan etilgen. Oǵan kirisiw ushın, odan miyrasxor klass alıw kerek.

Abstrakt metod - bul denesi ámeldegi bolmaǵan, hám de tek ǵana abstrakt klassta isleytuǵın metod esaplanadı. Onı denesi bolsa, miyrasxor klassta usınıs etiledi.

Juwmaq

Abstrakciya - bul ulıwma túsinik bolıp tabıladı, onı real dúnyada da, OOP ga tiykarlanǵan programmalastırıw tillerinde de tabıwıńız múmkin. Haqıyqıy dúnyadaǵı hár qanday zatlar, mısalı, aytıp ótilgen bankomat aparati yamasa házirgi programmalıq támiynat joybarngizdagi klasslar hám ishki bólekti tuyıqituvchi faktorlar abstrakciyanı támiyinleydi.

Bul abstrakciyalar, quramalılıqtı kishilew bólimlerge ajıratıw arqalı jumıstı talay ańsatlashtiradi. Eń tiykarǵısı, siz olardı qanday etip funksionallıqtı támiyinlep atırǵanın tushunmasdan turıp, paydalanıwıńız múmkin boladı.

Polimorfizm - bul bir interfeys, bir neshe metod. Yaǵnıy metodlardı overload yamasa override kórinisi bolıp tabıladı.

Paydalanılǵan ádebiyatlar:

  1. “Abstrakt class va funksiyalar” Xondamir Abduxoshimov

  2. Podbelskiy v. v. 10. 3-bap virtual funkciyalar hám abstrakt klasslar \\ Abstrakt klasslar. // C++ tili / rec. Akeev Yu. G.- 4.- M.: Finans hám statistika, 2003.- B.

  3. Microsoft learn internet sayti

  4. Bestprog internet sayti

  5. Habr internet sayti



Соседние файлы в папке REFERAT