5-ameliy_paradigma_qq
.pdf
5-ámeliy jumıs. Obyektke baǵdarlanǵan programmalastırıw. (Násillik, inkapsulyaciya, polimorfizm)
Jumıstıń maqseti: Obyektke Baǵdarlanǵan Programmalastırıwdıń (OBP) úsh tiykarǵı principi: Násillik (Miyrasxorlıq - Inheritance), Inkapsulyaciya (Encapsulation) hám Polimorfizm (Polymorphism) túsiniklerin tereńlestiriw hám ámeliyatta qollanıw. C++ tilinde ata-ana hám bala klasslar ierarxiyasın jaratıwdı, virtual funkciyalar arqalı dinamikalıq polimorfizmdi ámelge asırıwdı hám ruqsat modifikatorların (private, protected, public) durıs paydalanıwdı úyreniw.
Teoriyalıq bólim:
1.Inkapsulyaciya: Obyekttiń ishki maǵlıwmatların (atributların) sırtqı tásirden qorǵaw hám olarǵa tek metodlar arqalı ruqsat beriw principi.
2.Násillik (Miyrasxorlıq): Bar bolǵan klastıń (Base class) qásiyetleri hám metodların jańa klassqa (Derived class) ótkizip beriw imkaniyatı. Bul kodtı qayta qollanıwdı (Reusability) támiyinleydi.
3.Polimorfizm: Birdey atamadaǵı metodtıń hár túrli obyektlerde hár qıylı islew qábileti.
*Statikalıq polimorfizm: Funkciyalardı júklew (Overloading).
*Dinamikalıq polimorfizm: Metodtı qayta anıqlaw (Overriding) hám virtual funkciyalar.
ÁMELIY BÓLIM:
C++ tilinde usı úsh principtiń qollanılıwın basqıshpa-basqısh kórip shıǵamız.
1-mısal: Násillik (Inheritance)
Másele: Ulıwma "Haywan" klasın jaratıp, onnan "Iyt" hám "Pishiq" klassların alıw.
Kod:
#include <iostream> #include <string> using namespace std;
// Ata-ana klass (Base Class) class Haywan {
public:
string ati;
void awqatlan() {
cout << ati << " awqatlanıp atır..." << endl;
}
void uyqilaw() {
cout << ati << " uyqılap atır." << endl;
}
};
//Bala klass (Derived Class) - Iyt class Iyt : public Haywan {
public:
void urew() {
cout << ati << ": Wáw-Wáw!" << endl;
}
};
//Bala klass - Pishiq
class Pishiq : public Haywan { public:
void miyawlaw() {
cout << ati << ": Miyaw!" << endl;
}
};
int main() {
Iyt mening_itim; mening_itim.ati = "Aqtós";
//Ata-anadan miyras alǵan metodlar mening_itim.awqatlan(); mening_itim.uyqilaw();
//Óziniń metodı
mening_itim.urew();
return 0;
}
Túsindirme: Iyt klassı Haywan klasınan barlıq qásiyetlerdi (ati, awqatlan, uyqilaw) miyras aladı hám ózine urew metodın qosadı.
2-mısal: Inkapsulyaciya hám Protected
Másele: protected modifikatorınıń private-tan ayırmashılıǵın kórsetiw.
Kod:
#include <iostream> using namespace std;
class Tulga { private:
int jasirin_kod; // Tek Tulǵa klası ishinde ashıq protected:
int jasi; // Tulǵa hám onıń miyrasxorlarında ashıq public:
string ati; // Hámmege ashıq
void setKod(int k) { jasirin_kod = k; }
};
class Student : public Tulga { public:
void korset() {
//ati (public) - Ruqsat bar cout << "Atı: " << ati << endl;
//jasi (protected) - Ruqsat bar (sebebi miyrasxor) jasi = 20;
cout << "Jası: " << jasi << endl;
//jasirin_kod (private) - Ruqsat JOQ! (Qáte boladı)
//cout << "Kod: " << jasirin_kod << endl;
}
};
int main() { Student s;
s.ati = "Azamat";
// s.jasi = 20; // Qáte! Main-de protected kórinbeydi. s.korset();
return 0;
}
Túsindirme: protected aǵzalar sırtqı dúnya (main) ushın jabiq, biraq bala klasslar (Student) ushın ashıq boladı.
3-mısal: Polimorfizm hám Virtual funkciyalar
Másele: Hár túrli haywanlardıń dawısın shıǵarıw (Method Overriding).
Kod:
#include <iostream> using namespace std;
class Haywan { public:
// Virtual funkciya - dinamikalıq polimorfizm ushın kerek virtual void dawis_shigar() {
cout << "Haywan qanday da bir dawıs shıǵardı." << endl;
}
};
class Iyt : public Haywan { public:
// Ata-ana metodın qayta anıqlaw (Override) void dawis_shigar() override {
cout << "Wáw-Wáw!" << endl;
}
};
class Pishiq : public Haywan { public:
void dawis_shigar() override { cout << "Miyaw!" << endl;
}
}; |
|
int main() { |
|
Haywan* h1 = new Iyt(); |
// Iyt obyektin jaratıp, Haywan kórsetkishine |
saqlaymız |
|
Haywan* h2 = new Pishiq(); // Pishiq obyekti
Haywan* h3 = new Haywan(); // Ápiwayı haywan
h1->dawis_shigar(); // Wáw-Wáw! (Polimorfizm) h2->dawis_shigar(); // Miyaw! h3->dawis_shigar(); // Haywan dawısı
delete h1; delete h2; delete h3; return 0;
}
Túsindirme: virtual sózi kompyuterge "bul metodtı shaqırǵanda, kórsetkish tipine (Haywan) emes, al haqıyqıy obyekt tipine (Iyt yamasa Pishiq) qara" dep aytadı. Eger virtual bolmaǵanda, hámmesi "Haywan dawısın" shıǵarǵan bolar edi.
ÁMELIY TAPSÍRMALAR
1-tapsırma: Transport ierarxiyası (Násillik).
Transport klasın jaratıń (tezlik, jolawshı_sanı).
Onnan eki klass alıń:
1.Avtomobil (dóngelek_sanı, model).
2.Poyezd (vagon_sanı, jónelis).
Hár klass ushın arnawlı display() metodın jazıń hám main-de hár qaysısınan bir obyektti jaratıp, maǵlıwmatların shıǵarıń.
2-tapsırma: Bank esapları (Polimorfizm).
Account (Esap) klasın jaratıń, onıń virtual calculateInterest() (payda esaplaw) metodı bolsın.
Eki miyrasxor klass jaratıń:
1.SavingsAccount (Qor): Payda 5%.
2.CheckingAccount (Esaplasıw): Payda 1% (yamasa 0%).
Polimorfizm arqalı eki hár túrli esaptıń paydasın esaplap shıǵarıń.
3-tapsırma: Geometriyalıq figuralar (Abstrakt klass).
Shape (Figura) degen abstrakt klass jaratıń. Onda taza virtual funkciya (pure virtual function) bolsın: virtual double area() = 0;.
Rectangle (Tórtmúyeshlik) hám Circle (Dóńgelek) klassların jaratıp, usı area() metodın qayta anıqlań (realizaciyalań).
Main-de Shape tipindegi kórsetkishler massivin jaratıp, hár túrli figuralardıń maydanın cikl menen shıǵarıń.
4-tapsırma: Xızmetkerler (Inkapsulyaciya hám Násillik).
Employee (Xızmetker) klasın jaratıń. Atributları: atı (public), ID (protected), aylıǵı
(private).
Aylıqqa (private) ruqsat beriw ushın getSalary() metodın qosıń.
Manager klasın Employee-den alıń. Manager klassında bonus atributı bolsın.
Managerdiń ulıwma tabısın (aylıq + bonus) esaplaytuǵın metod jazıń. (Esletpe: private aylıqtı tikkeley ala almaysız, getSalary() dı qollanıń).
5-tapsırma: Oyın personajları.
Character klasın jaratıń (attack() metodı).
Warrior (Jawınger) hám Mage (Sıyqırshı) klassların alıń.
Warrior attack() metodın "Qılısh penen urdı!", al Mage "Otlı shar attı!" dep ózgertsin.
Bir funkciya (mısalı, battle(Character* c)) jazıń, ol qálegen personajdı qabıllap, onıń attack() metodın shaqırsın.
