Добавил:
bekan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:2-semestr / 1-lekciya_jif
.pdf
1-lekciya. Inkapsulyaciya hám miyrasxorlıq. Polimorfizm. Tiykar klass
aǵzalarına baylanıslardı basqarıw. Virtual funkciya. Polimorfizm. Abstrakt
klass.
Jobası:
1. Inkapsulyaciya: Maǵlıwmatlardı jasırıw hám interfeysler.
2. Miyrasxorlıq: Tiykar hám tuwındı klasslar arasındaǵı qatnasıqlar.
3. Polimorfizm: Statikalıq hám dinamikalıq polimorfizm. Virtual funkciyalar.
4. Abstrakt klasslar hám taza virtual funkciyalar.
Inkapsulyaciya: Qáwipsizlik hám tártip
Inkapsulyaciya (Encapsulation) – bul Obyektke Baǵdarlanǵan
Programmalastırıwdıń (OBP) eń fundamentallıq principleriniń biri bolıp, ol
maǵlıwmatlardı (atributlardı) hám olar menen isleytuǵın metodlardı bir pútin
"kapsula" (klass) ishine biriktiriwdi hám olardıń ishki dúzilisin sırtqı tásirden
qorǵawdı ańlatadı. Inkapsulyaciyanıń tiykarǵı maqseti – obyekttiń ishki
jaǵdayınıń (state) qáwipsizligin támiyinlew hám onıń sırtqı kod penen
baylanısın (coupling) azaytıw. Mısalı, avtomobil basqarıwda biz rul hám
pedallardı (interfeys) kóremiz, biraq dvigateldiń ishki jumısın (realizaciya)
kórmeymiz hám oǵan tikkeley tásir ete almaymız. Bul bizge avtomobildi ańsat
basqarıwǵa hám onıń mexanizmin buzıp qoymawǵa imkaniyat beredi.
C++ tilinde inkapsulyaciya "Ruqsat modifikatorları" (Access Modifiers)
arqalı ámelge asırıladı. Olar úsh túrli: private, protected hám public. private
(jasırın) bólimdegi aǵzalarǵa tek klastıń óz ishinde ǵana baylanısıwǵa boladı.
public (ashıq) bólimdegi aǵzalarǵa programmanıń qálegen jerinen baylanısıwǵa
boladı. protected (qorǵalǵan) bólimdegi aǵzalarǵa bolsa tek klass hám onıń
miyrasxorları (derived classes) baylanısa aladı. OBP-daǵı "altın qaǵıyda"
boyınsha, klastıń barlıq atributları (ózgeriwshileri) private bolıwı kerek, al
olarǵa ruqsat beriw ushın public metodlar (Getter hám Setter) qollanılıwı tiyis.
Inkapsulyaciya kodtıń "qollap-quwatlanıwın" (maintainability) júdá
ańsatlastıradı. Eger biz atributtı private etip jasırıp qoysaq, keleshekte onıń tipin
yamasa atın ózgertkenimizde, sırtqı kodqa (mısalı, main funkciyasına)

tiymeymiz, tek ishki Getter/Setter metodların ózgertemiz. Eger atribut public
bolǵanda, biz barlıq proektti kózden ótkerip, sol atribut qollanılǵan jerlerdi
ózgertiwge májbúr bolatuǵın edik. Sonday-aq, Setter metodları arqalı biz
maǵlıwmatlardıń durıslıǵın (Validation) tekseriwimiz múmkin. Mısalı,
setAge(int age) metodında "eger jas 0 den kishi bolsa, qáte shıǵar" degen shárt
qoyıwǵa boladı. Inkapsulyaciya – bul tek "jasırıw" emes, al "juwapkershilikti
bóliw". Hárbir klass óz maǵlıwmatları ushın ózi juwapker bolıwı kerek. Sırtqı
kod klastıń ishki jumısına aralaspawı tiyis. Bul princip "Juwapkershiliktiń
birigiwi" (Cohesion) hám "Baylanıstıń azayıwı" (Coupling) dep ataladı. Jaqsı
inkapsulyaciya programmanı kishi, ǵárezsiz modullerge bóliwge járdem beredi,
bul bolsa úlken proektlerde komanda bolıp islesiwdi ańsatlastıradı.
Miyrasxorlıq: Kodtı qayta qollanıw hám ierarxiya
Miyrasxorlıq (Inheritance) – bul OBP-nıń ekinshi tiykarǵı principi bolıp,
ol bar bolǵan klastıń (Tiykar klass / Base class) qásiyetleri hám metodların jańa
klassqa (Tuwındı klass / Derived class) ótkizip beriw imkaniyatın ańlatadı.
Miyrasxorlıq "IS-A" (bolıp tabıladı) qatnasına tiykarlanǵan. Mısalı, "Student" –
bul "Adam". Demek, Student klassı Adam klasınan miyras alıwı múmkin. Adam
klasında atı, jası, familiyası degen ulıwma atributlar bolsa, Student klassı olardı
qayta jazbay, tikkeley paydalana aladı hám oǵan óziniń arnawlı (kurs, baha,
fakultet) atributların qosadı.
C++ tilinde miyrasxorlıq class Student : public Person sintaksisi arqalı
jazıladı. Bul jerde public sózi miyrasxorlıqtıń túrin bildiredi. Eger public
miyrasxorlıq qollanılsa, tiykar klastıń public hám protected aǵzaları tuwındı
klasta da sáykesinshe public hám protected bolıp qaladı. Eger private
miyrasxorlıq qollanılsa, tiykar klastıń barlıq aǵzaları tuwındı klasta private bolıp
ózgeredi. Kóbinese public miyrasxorlıq qollanıladı, sebebi ol "túrin saqlaw"
(subtyping) principine sáykes keledi. Tiykar klastıń private aǵzaları tuwındı
klassqa ótpeydi (olarǵa tikkeley baylanısıw múmkin emes), biraq olar obyekt
yadında saqlanadı hám public metodlar arqalı basqarıladı.
Miyrasxorlıqtıń eń úlken paydası – "Kodtı qayta qollanıw" (Code
Reusability). Biz ulıwma kodtı bir jerge (Tiykar klassqa) jazamız hám onı barlıq
tuwındı klasslarda qollanamız. Bul kodtıń kólemin qısqartadı hám qátelerdi
azaytadı. Eger logikanı ózgertiw kerek bolsa, biz tek Tiykar klastı ózgertemiz,
nátiyjede barlıq miyrasxorlar avtomat túrde jańalanadı. Miyrasxorlıq arqalı biz

klasslar ierarxiyasın (shejiresin) qura alamız, bul quramalı sistemalardı (mısalı,
grafikalıq interfeys kitapxanaların) strukturalastırıw ushın júdá qolaylı.
Degen menen, miyrasxorlıqtı abaylap qollanıw kerek. Tereń ierarxiya
(mısalı, 5-6 dárejeli miyrasxorlıq) kodtı túsiniwdi qıyınlastıradı. Sonday-aq,
"Romb mashqalası" (Diamond Problem) – kóp miyrasxorlıq (Multiple
Inheritance) waqtında payda bolatuǵın mashqala. Eger klass eki ata-anadan
miyras alsa hám olardıń ekewi de bir ulıwma ata-anadan taralǵan bolsa, eń
joqarıdaǵı klastıń aǵzaları eki ret kóshiriliwi múmkin. C++ tilinde bul virtual
inheritance arqalı sheshiledi. Ádette, miyrasxorlıqtıń ornına "Kompoziciya"
(HAS-A – iye bolıw) qollanıw usınıs etiledi (mısalı, Avtomobil Dvigatelden
miyras almaydı, al Dvigatelge iye boladı).
Polimorfizm hám Virtual funkciyalar
Polimorfizm (Polymorphism) – grek tilinen "kóp formalıq" degendi
bildiredi. OBP-da polimorfizm bir interfeys (metod atı) arqalı hár túrli
obyektlerdiń hár qıylı háreketlerin orınlaw qábiletin ańlatadı. Polimorfizmniń
eki túri bar: Statikalıq (Compile-time) hám Dinamikalıq (Run-time). Statikalıq
polimorfizm – bul funkciyalardı hám operatorlardı "júklew" (Overloading).
Mısalı, abs(int) hám abs(double) – bir atamadaǵı eki funkciya, biraq
parametrleri basqasha. Kompilyator qaysı funkciyanı shaqırıw kerekligin kodtı
oqıw waqtında-aq biledi.
Dinamikalıq polimorfizm – bul OBP-nıń "júregi". Ol "Virtual
funkciyalar" (Virtual Functions) hám "Metodtı qayta anıqlaw" (Overriding)
arqalı ámelge asırıladı. Tiykar klastaǵı funkciyanıń basına virtual sózin qosıw
arqalı biz kompilyatorǵa: "Bul funkciyanıń adresi programma islep turǵan
waqıtta (runtime) anıqlanıwı kerek" dep aytamız. Tuwındı klasta bul funkciyanı
override qılıp, ózinshe jazıw múmkin. Eger biz Tiykar klastıń kórsetkishi
(pointer) arqalı Tuwındı klastıń obyektine baylanıssaq hám virtual funkciyanı
shaqırsaq, kompyuter Tiykar klastıń emes, al Tuwındı klastıń funkciyasın
orınlaydı.
Bul mexanizm ne ushın kerek? Mısalı, bizde Haywan degen tiykar klass
hám onıń dawis_shigar() degen virtual metodı bar. Biz Iyt hám Pishiq degen
tuwındı klasslardı jaratıp, olardıń dawis_shigar() metodın "Wáw" hám "Miyaw"
dep qayta anıqlaymız. Keyin biz Haywan* tipindegi massiv jaratıp, onıń ishine
Iyt hám Pishiq obyektlerin aralastırıp salamız. Cikl arqalı massivti aylanıp, hár

bir elementtiń dawis_shigar() metodın shaqırsaq, hár bir haywan óz dawısın
shıǵaradı. Bizge if (type == Dog) dep tekseriwdiń keregi joq. Bul kodtıń
keńeytiwsheńligin (Extensibility) arttıradı.
Virtual funkciyalar "Virtual Metodlar Kestesi" (V-Table) arqalı isleydi.
Hárbir klastıń (eger onda virtual funkciya bolsa) yadda óziniń jasırın kestesi
boladı, onda funkciyalardıń adresleri saqlanadı. Obyekt jaratılǵanda, onıń ishine
usı kestege silteme (vptr) qoyıladı. Funkciya shaqırılǵanda, programma usı
silteme arqalı kestege barıp, kerekli funkciyanıń adresin tawıp, sonı orınlaydı.
Bul ápiwayı funkciya shaqırıwǵa qaraǵanda sál ástelew, biraq ol bizge
dinamikalıq polimorfizmniń qúdiretin beredi.
Abstrakt klasslar hám Taza virtual funkciyalar
Geyde biz sonday klasslar jaratamız, olardıń obyektlerin (nusqaların)
jaratıw mániske iye emes. Mısalı, "Figura" (Shape) degen klass. Figura degen
anıq nárse joq, tek dóńgelek, kvadrat, úshmúyeshlik bar. Figura – bul abstrakt
túsinik. Bunday klasslar C++ tilinde "Abstrakt klasslar" (Abstract Classes) dep
ataladı. Abstrakt klastan obyekt jaratıw (new Shape()) múmkin emes, ol tek
basqa klasslar ushın fundament (interfeys) bolıp xızmet etedi.
Klass abstrakt bolıwı ushın onıń ishinde keminde bir dana "Taza virtual
funkciya" (Pure Virtual Function) bolıwı kerek. Taza virtual funkciya virtual
void draw() = 0; sintaksisi menen jazıladı. = 0 degenimiz – "bul funkciyanıń
denesi (kodı) joq, onı miyrasxorlar minnetli túrde ózleri jazıwı (implementaciya
etiwi) shárt" degen mánisti bildiredi. Eger miyrasxor klass taza virtual
funkciyanı override etpese, ol da abstrakt klass bolıp qaladı.
Abstrakt klasslar "Interfeys" (Interface) rolin atqaradı. Olar
miyrasxorlarǵa "ne islew kerekligin" aytadı, biraq "qalay islew kerekligin"
aytpaydı. Mısalı, Figura klassı barlıq figuralarda area() (maydan) hám
perimeter() (perimetr) metodları bolıwı kerekligin belgileydi. Biraq maydandı
esaplaw formulası hár figurada hár qıylı bolǵanlıqtan, bul metodlar taza virtual
boladı. Dóńgelek klassı pi r^2, Kvadrat klassı a^2 formulasın jazadı.
Polimorfizm hám abstrakt klasslar birge qollanılǵanda júdá kúshli
arxitektura payda boladı. Biz programma kodın anıq klasslarǵa (Dóńgelek,
Kvadrat) emes, al abstrakt klassqa (Figura) ǵárezli etip jazamız. Mısalı, void
printArea(Shape* s) { cout << s->area(); }. Bul funkciyaǵa qálegen figuranı
beriwge boladı. Keleshekte biz "Besmúyeshlik" degen jańa klass qossaq ta,

printArea funkciyasın ózgertiwdiń keregi joq. Bul "Ashıq/Jabıq principi"
(Open/Closed Principle) – kod keńeytiwge ashıq, biraq ózgertiwge jabıq bolıwı
kerek. Juwmaqlap aytqanda, inkapsulyaciya, miyrasxorlıq hám polimorfizm –
bular Obyektke Baǵdarlanǵan Programmalastırıwdıń úsh gilti. Inkapsulyaciya
qáwipsizlikti hám tártipti, miyrasxorlıq kodtıń qayta qollanılıwın hám
ierarxiyanı, al polimorfizm (abstrakt klasslar menen birge) iykemlilikti hám
keńeytiwsheńlikti támiyinleydi. Bul principlerdi tereń túsiniw hám durıs
qollanıw – sapalı, turaqlı hám professional programmalıq támiynat jaratıwdıń
gilti bolıp tabıladı.
BAQLAW SORAWLARÍ:
1. Inkapsulyaciyada `private` hám `protected` modifikatorlarınıń tiykarǵı
ayırmashılıǵı nede?
2. Násillik (Miyrasxorlıq) processinde Tiykar klastıń konstruktorı hám
destruktorı qanday tártipte shaqırıladı?
3. Virtual funkciya degen ne hám ol polimorfizmde qanday rol oynaydı?
4. "Taza virtual funkciya" (Pure Virtual Function) hám "Abstrakt klass"
túsiniklerin túsindirip beriń.
5. Dinamikalıq polimorfizm (Runtime polymorphism) qanday mexanizm
(keste) arqalı isleydi?
Соседние файлы в папке 2-semestr
