Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:1-semestr / 15-LEKCIYA
.pdf
15-lekciya. Obyektler massivi. Klaslar arasındaǵı qatnaslar.
Obyektler massivi menen islew kónlikpeleri.
Jobası:
1. Obyektler massivi (Array of Objects)
2. Klaslar arasındaǵı qatnaslar
3. Obyektler massivi menen islew kónlikpeleri
Zamanagóy programmalastırıwda obyektke baǵdarlanǵan programmalastırıw (OBP)
koncepciyası keńnen qollanıladı. Onıń tiykarǵı ideyası programmanı obyektlerdiń óz-ara tásiri
retinde kóriwden ibarat. C++ tili OBP nıń barlıq múmkinshiliklerin tolıq qollap-quwatlaydı.
Búgingi lekciyamızda biz C++ tilindegi áhmiyetli temalardıń biri – Obyektler massivi, klaslar
arasındaǵı qatnaslar hám obyektler massivi menen islew kónlikpeleri haqqında tolıq
maǵlıwmat alamız.
1. Obyektler massivi (Array of Objects)
Kópshilik jaǵdaylarda bizge bir klastıń bir neshe obyektlerin jaratıw hám olar menen bir waqıtta
islesiw zárúr boladı. Mısalı, bir topar studentlerdiń dizimin, bir dúkandaǵı tovarlardıń dizimin
yamasa bir kitapxanadaǵı kitaplardıń dizimin qayta islew ushın hárbir student, tovar yamasa
kitap ushın bólek obyekt jaratıwımız kerek. Bunday jaǵdaylarda obyektler massivinen
paydalanıw eń qolaylı usıl bolıp tabıladı.
Obyektler massivi – bul elementleri bir klastıń obyektleri bolǵan massiv. Ol ápiwayı
maǵlıwmatlar tipleri (mısalı, int, double) massivi sıyaqlı járiyalanadı hám qollanıladı.
Járiyalanıwı:
ClassName massiv_ati[massiv_o'lshemi];
Mısalı, Student degen klasımız bar dep esaplayıq. Bul klastan 30 studentten ibarat massiv
jaratıw ushın tómendegishe jazamız:
Student gruppa[30];
Usı jerde gruppa massiviniń hár bir elementi (gruppa[0], gruppa[1], ..., gruppa[29]) Student
klasınıń bir obyekti bolıp tabıladı.
Obyektler massivi menen islesiw
Obyektler massiviniń elementlerine (obyektlerge) kiriw hám olardıń metodların shaqırıw
ápiwayı massivler sıyaqlı indeks arqalı ámelge asırıladı. Obyekttiń qásiyetine yamasa metodına
baylanısıw ushın noqat (.) operatorı qollanıladı.
Ápiwayı mısal:
Keliń, studenttiń atı hám jası haqqındaǵı maǵlıwmatlardı saqlaytuǵın Student klasın hám sol
klastıń obyektler massivin jaratıp kóreyik.
#include <iostream>
#include <string>
using namespace std;

class Student {
private:
string ati;
int jasi;
public:
// Maǵlıwmatlardı kirgiziw ushın funkciya
void setData(string a, int j) {
ati = a;
jasi = j;
}
// Maǵlıwmatlardı kórsetiw ushın funkciya
void getData() {
cout << "Ati: " << ati << ", Jasi: " << jasi << endl;
}
};
int main() {
// Student klasınan 3 obyektlik massiv jaratıw
Student gruppa[3];
// Massiv elementlerine maǵlıwmatlardı kirgiziw
gruppa[0].setData("Alibek", 20);
gruppa[1].setData("Gulzira", 19);
gruppa[2].setData("Timur", 21);
cout << "Studentler dizimi:" << endl;
// Massiv elementlerin ekranga shıǵarıw
for (int i = 0; i < 3; i++) {
cout << i + 1 << "-student: ";
gruppa[i].getData();
}
return 0;
}
Nátiyje:
Studentler dizimi:
1-student: Ati: Alibek, Jasi: 20
2-student: Ati: Gulzira, Jasi: 19
3-student: Ati: Timur, Jasi: 21
Bul mısalda biz Student klasınıń úsh obyektinen ibarat gruppa massivin jarattıq. Sońınan hár
bir obyektke setData() funkciyası arqalı maǵlıwmat kirgizdik hám getData() funkciyası
arqalı maǵlıwmatlardı ekranga shıǵardıq.
2. Klaslar arasındaǵı qatnaslar
Obyektke baǵdarlanǵan programmalastırıwda klaslar bir-biri menen hár túrli qatnaslarda bolıwı
múmkin. Bul qatnaslar programma arxitekturasın durıs qurıwda hám kodtıń qayta
qollanılıwshılıǵın asırıwda úlken áhmiyetke iye. Tómende klaslar arasındaǵı eń kóp
ushırasatuǵın qatnas túrlerin kórip shıǵamız.
a) Assosaciya (Association)

Assosaciya – bul eki klastıń obyektleri arasındaǵı óz-ara baylanıs. Bul eń ulıwma qatnas túri
bolıp, bir klastıń obyekti basqa klastıń obyektinen paydalanatuǵının bildiredi. Biraq olar bir-
birine ǵárezli emes, yaǵnıy biri joq bolǵanda ekinshisi óz iskerligin dawam ettire aladı.
Mısalı, "Oqıtıwshı" hám "Student" klasları arasında assosaciya qatnası bar. Oqıtıwshı
studentlerge sabaq beredi, studentler oqıtıwshıdan bilim aladı. Biraq oqıtıwshı da, student te birbirinensiz de bar bolıwı múmkin.
class Student; // Aldınnan járiyalaw (forward declaration)
class Oqitiwshi {
private:
string ati;
public:
Oqitiwshi(string a) : ati(a) {}
void sabaqOtiw(Student& s); // Student obyektinen paydalanıw
};
class Student {
private:
string ati;
public:
Student(string a) : ati(a) {}
friend void Oqitiwshi::sabaqOtiw(Student& s); // Dos funkciya
};
void Oqitiwshi::sabaqOtiw(Student& s) {
cout << ati << " oqitiwshi " << s.ati << " studentine sabaq otip
atir." << endl;
}
b) Aggregaciya (Aggregation)
Aggregaciya – bul "bar bolıw" yamasa "quramına kiriw" (has-a) qatnasınıń bir túri. Bul qatnasta
bir klass ("putin") basqa klastıń ("bólek") obyektlerin óz ishine aladı. Biraq "bólek" "putin" ge
ǵárezli emes, yaǵnıy "putin" joq etilgende "bólek" óz iskerligin dawam ettire aladı.
Mısalı, "Kafedra" hám "Oqıtıwshı" klasları arasında aggregaciya qatnası bar. Kafedra
oqıtıwshılardan quralǵan. Eger kafedra jabılsa da, oqıtıwshılar basqa kafedrada óz jumısın
dawam ettiriwi múmkin.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Oqitiwshi {
private:
string ati;
public:
Oqitiwshi(string a) : ati(a) {}
string getAti() const { return ati; }
};

class Kafedra {
private:
string atamasi;
vector<Oqitiwshi*> oqitiwshilar; // Oqıtıwshı obyektlerine
kórsetkishler massivi
public:
Kafedra(string n) : atamasi(n) {}
void oqitiwshiQosiw(Oqitiwshi* o) {
oqitiwshilar.push_back(o);
}
void print() {
cout << atamasi << " kafedrasi oqitiwshilari:" << endl;
for (const auto& o : oqitiwshilar) {
cout << "- " << o->getAti() << endl;
}
}
};
int main() {
Oqitiwshi o1("A. Dawletov");
Oqitiwshi o2("B. Qallibekov");
Kafedra k("Programmalıq injiniring");
k.oqitiwshiQosiw(&o1);
k.oqitiwshiQosiw(&o2);
k.print();
return 0;
}
Bul mısalda Kafedra obyekti Oqitiwshi obyektlerine kórsetkishlerdi saqlaydı. Kafedra obyekti
joq etilse de, Oqitiwshi obyektleri óz kúshinde qaladı.
c) Kompoziciya (Composition)
Kompoziciya – bul aggregaciyanıń qatań túri. Bul da "bar bolıw" (has-a) qatnası, biraq bunda
"bólek" "putin" siz bar bola almaydı. Eger "putin" obyekti joq etilse, onıń quramındaǵı "bólek"
obyektleri de avtomat túrde joq etiledi.
Mısalı, "Avtomobil" hám "Motor" klasları arasında kompoziciya qatnası bar. Motor
avtomobildiń ajıralmas bólegi. Eger avtomobil joq etilse, onıń motorı da óz-ózinen joq boladı.
#include <iostream>
#include <string>
using namespace std;
class Motor {
private:
string turi;
public:
Motor(string t) : turi(t) {
cout << turi << " motori jaratildi." << endl;
}

~Motor() {
cout << turi << " motori joq etildi." << endl;
}
};
class Avtomobil {
private:
string marka;
Motor motor; // Motor obyekti Avtomobil klası ishinde jaratıladı
public:
Avtomobil(string m, string motor_turi) : marka(m), motor(motor_turi) {
cout << marka << " avtomobili jaratildi." << endl;
}
~Avtomobil() {
cout << marka << " avtomobili joq etildi." << endl;
}
};
int main() {
{
Avtomobil myCar("Chevrolet Onix", "1.2 Turbo");
} // myCar obyekti usı bloktan shıqqanda joq etiledi
cout << "Programma juwmaqlandi." << endl;
return 0;
}
Nátije:
1.2 Turbo motori jaratildi.
Chevrolet Onix avtomobili jaratildi.
Chevrolet Onix avtomobili joq etildi.
1.2 Turbo motori joq etildi.
Programma juwmaqlandi.
Kórip turǵanımızday, Avtomobil obyekti joq etilgende, onıń quramındaǵı Motor obyekti de
avtomat túrde joq etildi.
3. Obyektler massivi menen islew kónlikpeleri
Obyektler massivi menen islegende bir qatar ámeliy kónlikpelerge iye bolıw zárúr.
a) Konstruktorlar hám obyektler massivi
Eger klasta parametrli konstruktor bolıp, ádepki (parametrsiz) konstruktor bolmasa, obyektler
massivin járiyalawda qıyınshılıqlar payda bolıwı múmkin. Bunday jaǵdayda massivti járiyalaw
waqtında hár bir obyekt ushın konstruktor parametrlerin kórsetiw kerek.
class Kitap {
public:
string atamasi;
string avtor;
Kitap(string a, string av) {
atamasi = a;
avtor = av;
}

};
int main() {
// Massivti inicializaciyalaw
Kitap kitapxana[2] = {
Kitap("Ayday qız", "Gúlaysha Esemuratova"),
Kitap("Makarya sulıw", " Tilewbergen Jumamuratov")
};
cout << kitapxana[0].atamasi << endl;
cout << kitapxana[1].avtor << endl;
return 0;
}
Eger klasda ádepki konstruktor bar bolsa, massivti ápiwayı járiyalaw múmkin.
b) Kórsetkishler hám obyektler massivi
Obyektler massivi menen islegende kórsetkishlerden (pointers) paydalanıw kóbirek iykemlilik
beredi, ásirese dinamikalıq túrde massiv jaratqanda. new operatorı arqalı obyektler massivi ushın
yadtı dinamikalıq ajıratıw múmkin.
#include <iostream>
class Noqat {
private:
int x, y;
public:
Noqat(int x_val = 0, int y_val = 0) : x(x_val), y(y_val) {}
void print() {
std::cout << "(" << x << ", " << y << ")" << std::endl;
}
};
int main() {
int n = 5; // Massiv ólshemi
Noqat* noqatlar = new Noqat[n]; // Dinamikalıq massiv jaratıw
// Massiv elementleri menen islew
for(int i = 0; i < n; i++) {
noqatlar[i] = Noqat(i, i*2);
}
for(int i = 0; i < n; i++) {
noqatlar[i].print();
}
delete[] noqatlar; // Yadtı bosatıw
return 0;
}
c) Funkciyalarǵa obyektler massivin uzatıw
Obyektler massivin funkciyalarǵa parametr retinde uzatıwǵa boladı. Bul kodtı strukturalastırıw
hám qayta qollanıw ushın júdá paydalı.
void printStudentler(Student arr[], int size) {

for (int i = 0; i < size; i++) {
arr[i].getData();
}
}
int main() {
Student gruppa[3];
gruppa[0].setData("Alibek", 20);
gruppa[1].setData("Gulzira", 19);
gruppa[2].setData("Timur", 21);
printStudentler(gruppa, 3);
return 0;
}
Búgingi lekciyada biz C++ tiliniń tómendegi áhmiyetli temaları menen tanısıp shıqtıq:
Obyektler massivi: Bir klastıń bir neshe obyektlerin saqlaw hám olar menen islesiw ushın
qolaylı qural.
Klaslar arasındaǵı qatnaslar:
o Assosaciya: Eki ǵárezsiz klastıń óz-ara baylanısı.
o Aggregaciya: Bir obyekt basqa ǵárezsiz obyektlerdi óz ishine alatuǵın "has-a" qatnası.
o Kompoziciya: Bir obyekt basqa ǵárezli obyektlerdi óz ishine alatuǵın hám olardıń ómir ciklin
basqaratuǵın "has-a" qatnasınıń qatań túri.
Obyektler massivi menen islew kónlikpeleri: Konstruktorlar menen islesiw, dinamikalıq
massivler jaratıw hám funkciyalarǵa uzatıw sıyaqlı ámeliy aspektler.
Bul bilimler sizge C++ tilinde strukturalasqan, iykemli hám nátiyjeli programmalar dúziwge
járdem beredi. Berilgen teoriyalıq maǵlıwmatlardı hám mısal kodlardı dıqqat penen úyrenip,
ámeliyatta qollanıp kóriwińiz usınıs etiledi.
Соседние файлы в папке 1-semestr
