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

2-semestr / 2-ameliy_jif

.pdf
Скачиваний:
0
Добавлен:
20.09.2026
Размер:
204 Кб
Скачать
☆
2-ámeliy jumıs. Virtual funkciya. Polimorfizm. Abstrakt klass.
Jumıstıń maqseti: Dinamikalıq polimorfizmdi ámelge asırıwshı "Virtual
funkciyalar" (Virtual Functions) hám "Abstrakt klasslar" (Abstract Classes)
menen islesiwdi úyreniw. C++ tilinde Taza virtual funkciyalar (Pure Virtual
Functions) arqalı interfeysler jaratıwdı, olardı miyrasxor klasslarda realizaciya etiwdi hám polimorfizm arqalı kodtıń iykemliligin arttırıwdı ámeliyatta qollanıw. "Ashıq/Jabıq principi" (Open/Closed Principle) tiykarında
keńeytiwsheń arxitektura qurıw kónlikpelerin qáliplestiriw.
Teoriyalıq bólim:
1. Virtual funkciya: Tiykar klasta `virtual` sózi menen belgilengen, tuwındı klasta qayta anıqlanıwı (override) múmkin bolǵan funkciya. Ol orınlanıw waqtında (Runtime) durıs metodtı tańlawǵa (Late Binding) imkaniyat
beredi.
2. Taza virtual funkciya: `virtual void f() = 0;` kórinisindegi, denesi (kodı)
joq funkciya. Ol tek interfeysti belgileydi.
3. Abstrakt klass: Keminde bir taza virtual funkciyası bar klass. Onnan
obyekt jaratıp bolmaydı, tek miyras alıwǵa boladı.
4. Polimorfizm: Bir kórsetkish (Tiykar klass) arqalı hár túrli obyektler
(Tuwındı klasslar) menen islesiw.
ÁMELIY BÓLIM:
Abstrakt klasslar hám polimorfizmdi qollanıp, "Tólem sisteması"n jaratamız. 1-mısal: Virtual funkciya (Sálemnama) Kod:
#include <iostream>
using namespace std;
class Person {
public:
virtual void sayHello() { // Virtual funkciya
cout << "Sálem, men adamman." << endl;
}
};
class Student : public Person {
public:
void sayHello() override { // Override
cout << "Sálem, men studentpen." << endl;
}
};
int main() {
Person* p = new Student(); // Polimorfizm
p->sayHello(); // "Men studentpen" shıǵadı (Virtual bolǵanı ushın)
delete p;
return 0;
}
Túsindirme: `Person` klasında `sayHello` funkciyası `virtual`. `Student`
klası onı ózinshe jazǵan (`override`). `main`-de biz `Person` kórsetkishin jaratıp, oǵan `Student` obyektin berdik. Eger `virtual` bolmaǵanda, `Person`-nıń sálemi
shıǵar edi. `virtual` bolǵanı ushın kompyuter: "Bul `Person` emes, bul `Student`
eken" dep túsinedi hám studenttiń sálemin shıǵaradı.
2-mısal: Abstrakt klass (Tólem) Kod:
class Payment {
public:
// Taza virtual funkciya (Abstrakt)
virtual void pay(double amount) = 0;
};
class CardPayment : public Payment {
public:
void pay(double amount) override {
cout << amount << " som plastik karta arqalı tólendi." << endl;
}
};
class CashPayment : public Payment {
public:
void pay(double amount) override {
cout << amount << " som naq aqsha menen tólendi." << endl;
}
};
int main() {
Payment* p1 = new CardPayment();
Payment* p2 = new CashPayment();
p1->pay(5000); // Karta
p2->pay(1000); // Naq
delete p1; delete p2;
return 0;
}
Túsindirme: `Payment` klassı – abstrakt. Onıń `pay` funkciyası `= 0`.
Yaǵnıy: "Tólem degen ulıwma túsinik bar, biraq onıń qalay islenetugını
belgisiz". `CardPayment` hám `CashPayment` klassları `Payment`-ten miyras
alıp, `pay` funkciyasın "toltıradı" (implementaciya etedi). Biri karta menen, biri naq aqsha menen tóleydi. Biz `main`-de `Payment` kórsetkishi arqalı ekewin de basqara alamız.
3-mısal: Polimorfizm massivte (Zoodaǵı haywanlar) Kod:
class Animal {
public:
virtual void sound() = 0; // Hár haywan dawıs shıǵarıwı kerek
};
class Dog : public Animal {
public:
void sound() override { cout << "Wáw!" << endl; }
};
class Cat : public Animal {
public:
void sound() override { cout << "Miyaw!" << endl; }
};
int main() {
Animal* zoo[2]; // Haywanlar massivi
zoo[0] = new Dog();
zoo[1] = new Cat();
for (int i = 0; i < 2; i++) {
zoo[i]->sound(); // Hárqaysısı óz dawısın shıǵaradı
}
// Wáw!
// Miyaw!
return 0;
}
Túsindirme: Biz `Animal` tipindegi massiv jarattıq. Oǵan `Dog` hám
`Cat` obyektlerin saldıq. Cikl ishindegi `zoo[i]->sound()` qatarı polimorfizmniń kúshin kórsetedi: birdey kod hár túrli obyektler ushın hár qıylı isleydi. 0-element Iyt bolǵanı ushın "Wáw", 1-element Pishiq bolǵanı ushın "Miyaw" dedi.
ÁMELIY TAPSÍRMALAR
1. `Shape` abstrakt klasın jaratıń (`area()` = 0). `Square` klasında onı
realizaciya etiń.
2. `Instrument` klasın (`play()` virtual) jaratıń. `Guitar` klası "Gitarada
oynaldı" dep shıǵarsın.
3. `Vehicle` klasın (`drive()` = 0) jaratıń. `Car` hám `Bike` klassların onnan
alıń.
4. `Employee` klasın (`work()` virtual) jaratıń. `Developer` klası "Kod jazıp
atır" desin.
5. `Bird` abstrakt klasın (`fly()`) jaratıń. `Eagle` usha alsın, `Penguin` "Usha
almayman" desin.
6. `Device` klasın (`turnOn()` virtual) jaratıń. `Phone` hám `Laptop`
klassların tekseriń.
7. `Message` klasın (`send()` = 0) jaratıń. `SMS` hám `Email` klassların
jazıń.
8. `Game` klasın (`start()` virtual) jaratıń. `Chess` hám `Football` klassların
qosıń.
9. `Document` abstrakt klasın (`print()`) jaratıń. `PDF` hám `Word` klassları
hár qıylı tekst shıǵarsın. Massivte saqlap, cikl menen shıǵarıń.
10. `Logger` abstrakt klasın (`log(string)`) jaratıń. `FileLogger` (faylǵa dep
elesletiń) hám `ConsoleLogger` (ekranǵa) klassların jazıń.
11. `Notification` sisteması: `notify()` metodı abstrakt bolsın.
`PushNotification` hám `EmailNotification` klassların jaratıp, xabar
jiberiń.
12. `Database` abstrakt klasın (`connect()`, `query()`) jaratıń. `MySQL` hám
`PostgreSQL` klassların realizaciya etiń.
13. `Renderer` klasın (`render()`) jaratıń. `OpenGL` hám `DirectX` klassları
hár qıylı sızsın.
14. `Sorter` abstrakt klasın (`sort(int[])`) jaratıń. `BubbleSort` hám
`QuickSort` (ápiwayı) klassların jazıń.
15. `PaymentGateway` abstrakt klasın (`processPayment()`) jaratıń. `PayPal`
hám `Stripe` klassların paydalanıp, polimorfizmdi kórsetiń.
Соседние файлы в папке 2-semestr