6-ameliy_paradigma_qq
.pdf
6-ámeliy jumıs. Obyektke baǵdarlanǵan programmalastırıw. (Polimorfizm hám onıń túrleri, Aǵımlar menen islew, Ayrıqshalar menen
islew)
Jumıstıń maqseti: OBP paradigmasınıń eń quramalı hám kúshli táreplerin ózlestiriw. Polimorfizmniń eki túrin (Compile-time hám Runtime) ámeliyatta ajıratıwdı úyreniw. C++ tilinde kirgiziw-shıǵarıw aǵımları (Streams) arqalı fayllar menen islesiwdi hám Ayrıqsha jaǵdaylardı (Exceptions - try, catch) basqarıw arqalı programmanıń isenimliligin arttırıwdı úyreniw.
Teoriyalıq bólim:
1.Polimorfizm túrleri:
*Statikalıq (Compile-time): Funkciyalardı hám operatorlardı júklew (Overloading). Kompilyator kod orınlanbastan burın qaysı funkciyanı tańlawdı biledi.
*Dinamikalıq (Runtime): Virtual funkciyalar hám qayta anıqlaw (Overriding). Metodtı tańlaw programma islep turǵan waqıtta obyekttiń tipine qaray sheshiledi.
2.Aǵımlar (Streams): Maǵlıwmatlardıń derekten (File/Keyboard) alıwshıǵa (Memory/Screen) qaray háreketi. C++ te fstream kitapxanası fayllar menen islew ushın qollanıladı.
3.Ayrıqsha jaǵdaylar (Exceptions): Programma jumısı waqtında júz beretuǵın kútilmegen qáteler (mısalı, 0 ge bóliw, fayl tabılmawı). Olar try-catch blokları arqalı uslanadı.
ÁMELIY BÓLIM:
C++ tilinde joqarı dárejeli OBP texnikaların qollanamız.
1-mısal: Statikalıq Polimorfizm (Function Overloading)
Másele: Bir "print" funkciyası arqalı hár túrli maǵlıwmatlardı shıǵarıw.
Kod:
#include <iostream> #include <string> using namespace std;
class Printer {
public:
//Pútin sandı shıǵarıw void print(int i) {
cout << "Pútin san: " << i << endl;
}
//Haqıyqıy sandı shıǵarıw
void print(double d) {
cout << "Bólshek san: " << d << endl;
}
// Tekstti shıǵarıw void print(string s) {
cout << "Tekst: " << s << endl;
}
}; |
|
int main() { |
|
Printer p; |
|
p.print(100); |
// 1-funkciya shaqırıladı |
p.print(3.1415); |
// 2-funkciya shaqırıladı |
p.print("Sálem"); |
// 3-funkciya shaqırıladı |
return 0; |
|
} |
|
Túsindirme: Kompilyator parametrlerdiń tipine qaray qaysı print funkciyası kerek ekenin ajıratıp aladı.
2-mısal: Ayrıqsha jaǵdaylar (Exception Handling)
Másele: 0 ge bóliw qátesinen qorǵanıw.
Kod:
#include <iostream> using namespace std;
double boliw(double a, double b) { if (b == 0) {
// Qáte boldı dep "signal" beremiz (throw) throw "Nolge bóliw qátesi!";
}
return a / b;
}
int main() {
double x = 10, y = 0;
try {
// Qáwipsiz blok: Qáte shıǵıwı múmkin kod double result = boliw(x, y);
cout << "Nátiyje: " << result << endl;
}
catch (const char* msg) {
// Qáteni uslaw hám xabar beriw cout << "DÍQQAT: " << msg << endl;
}
cout << "Programma dawam etpekte..." << endl; return 0;
}
Túsindirme: Eger b=0 bolsa, boliw funkciyası qáte "ılaqtıradı" (throw). main funkciyası bul qáteni "uslaydı" (catch). Programma qulap túspeydi (crash bolmaydı), al jumısın jalǵastıradı.
3-mısal: Fayllıq Aǵımlar (File I/O)
Másele: Maǵlıwmatlardı tekst faylına jazıw hám oqıw.
Kod:
#include <iostream>
#include <fstream> // Fayl kitapxanası
#include <string> using namespace std;
int main() {
// 1. Faylǵa jazıw
ofstream myFile("data.txt"); // 'data.txt' faylın ashamız (jazıw ushın)
if (myFile.is_open()) {
myFile << "Bul birinshi qatar.\n"; myFile << "Bul ekinshi qatar.\n"; myFile << 12345 << endl; myFile.close(); // Fayldı jabamız cout << "Faylǵa jazıldı." << endl;
} else {
cout << "Fayldı ashıwda qáte boldı!" << endl;
}
// 2. Fayldan oqıw string line;
ifstream readFile("data.txt"); // Oqıw ushın ashamız
if (readFile.is_open()) {
cout << "--- Fayl ishinde: ---" << endl;
while (getline(readFile, line)) { // Qatarma-qatar oqıw cout << line << endl;
}
readFile.close();
}
return 0;
}
ÁMELIY TAPSÍRMALAR
1-tapsırma: Geometriyalıq Overloading (Statikalıq Polimorfizm).
AreaCalculator klasın jaratıń. Onda area() funkciyası 3 túrli bolsın:
1.area(double r) - Dóńgelek maydanı.
2.area(double a, double b) - Tórtmúyeshlik maydanı.
3.area(double a, double b, double c) - Úshmúyeshlik maydanı (Geron formulası).
Main-de hár túrli argumentler menen shaqırıp, durıs esaplap atırǵanın tekseriń.
2-tapsırma: Bankomat (Exceptions).
BankAccount klasın jaratıń (balans). withdraw(amount) metodın jazıń.
Eger amount > balans bolsa, throw "Jetkiliksiz qarjı" qılıń.
Eger amount < 0 bolsa, throw "Teris summa" qılıń.
Main-de try-catch blogı arqalı qátelerdi uslap, paydalanıwshıǵa durıs xabar shıǵarıń.
3-tapsırma: Log faylına jazıw (Streams).
Logger klasın jaratıń. Onıń log(message) metodı bolsın.
Bul metod qabıllanǵan xabardı (message) "log.txt" faylına qosıp jazıwı kerek
(append mode - ios::app).
Main-de hár qıylı xabarlardı jazıń hám fayldı ashıp tekseriń. (Eski xabarlar óship ketpewi kerek).
4-tapsırma: Abstrakt Printer (Dinamikalıq Polimorfizm).
Document degen abstrakt klass jaratıń (taza virtual funkciya print()).
PDFDocument hám WordDocument degen klasslar jaratıń.
print() metodın hárqaysısı ózinshe anıqlasın ("PDF basılıp atır...", "Word basılıp atır...").
Main-de Document* pointers[] massivin jaratıp, hár túrli dokumentlerdi cikl arqalı baspadan shıǵarıń.
5-tapsırma: Sannıń formatın tekseriw (Exceptions).
Paydalanıwshıdan tekst (string) qabıllaytuǵın funkciya jazıń. Bul funkciya tekstti pútin sanǵa aylandırıwǵa (stoi) háreket etsin.
Eger tekstte háripler bolsa, stoi funkciyası invalid_argument qátesin ılaqtırıwı múmkin.
Usı qáteni try-catch arqalı uslap, "Qáte: Tek san kirgiziń!" degen xabar beriń.
