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

2-semestr / 1-lekciya_jif

.pdf
Скачиваний:
0
Добавлен:
20.09.2026
Размер:
161 Кб
Скачать
☆
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.
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