Polimorfizm tushunchasi Hafta: 11 Ma’ruza: 11 Vorislikdagi muhim tushunchalar: - Asosiy sinfdagi private ma’lumot maydonlariga sinfdan tashqarida murojaat qilib bo’lmaydi. Shuning uchun ham voris sinflarda ulardan to’g’ridan-to’g’ri foydalanib bo’lmaydi. Ularga murojaatni asosiy sinfda public modifikatori ostida aniqlangan accessor/mutator funksiyalar orqali amalga oshirish mumkin bo’ladi.
- Barcha is-a munosabatlar vorislik asosida modellashtirilmasligi ham mumkin. Misol uchun, kvadrat bu to’g’ri to’rtburchak, ammo Rectangle sinfi asosida Square sinfini aniqlamaslik zarur, chunki to’g’ri to’rburchakdan kvadrat uchun hech narsa olib bo’lmaydi. Bu holda Square sinfini GeometricObject sinfi asosida aniqlash zarur. A sinfi B sinfdan meros oladi, A sinfidan B sinfiga qaraganda ko’proq ma’lumotlar jamlanadi.
Vorislikdagi muhim tushunchalar: - Vorislik is-a munosabati asosida modellashtirilgan. Ammo bu ko’r-ko’rona bir sinfning funksiyalarini boshqa sinfga chaqirib ishlataverish degani emas. Misol uchun, bo’yi va eni kabi umumiy xususiyatlarga ega bo’lsa ham, Person(Shaxs) sinfidan Tree(Daraxt) sinfiga meros olishdan hech qanday ma’no yo’q. Voris sinf va Asos sinf is-a munosabatda bo’lishi lozim.
- C++ da voris sinf bir necha asos sinflardan meros olish imkoni mavjud. Bunday imkoniyatga ko’p tomonlama vorislik deyiladi.
Polimorfizm Polimorfizm superturdagi o’zgaruvchi subtur (voris tur) dagi ob’yektga uzatilishi ma’nosini anglatadi. Ob’yektga yo’naltirilgan dasturlashning inkapsulyatsiya, vorislik va polimorfizm nomli uch ustunlari mavjud. Dastlab, supertur va subtur atamalarini aniqlashtirib olish zarur. Sinf turni aniqlaydi. Voris sinf orqali aniqlangan tur subtur, asosiy sinf bilan aniqlangan tur supertur hisoblanadi. Shuning uchun, Circle GeometricObject ning subturi va GeometricObject Circle ning superturi hisoblanadi. Polimorfizm Voris sinf asosiy sinfning to’ldirilgan ko’rinishidir. Voris sinfning har bir ob’yekti asos sinfning ham ob’yekti hisoblanadi, ammo teskarisi bo’lishi mumkin emas. Misol uchun, barcha doiralar geometric ob’yekt, ammo barcha geometric ob’yektlar esa doira emas. Shuning uchun, Siz har doim voris sinf ob’yektlarini asosiy sinf turidagi paramtrga uzatishingiz mumkin. Listing 15.9 PolymorphismDemo.cpp Listing 15.9 PolymorphismDemo.cpp displayGeometricObject(8-qator) funksiyasi GeometricObject turida parameter qabul qiladi. displayGeometricObject funksiaysiga GeometricObject, Circle va Rectangle ob’yektlarini argument sifatida berish mumkin (16, 19, 22 qatorlar). Voris sinf ob’yektlari asosiy sinfning ob’yektlari ham bo’lmoqda. Bunga polimorfizm deyiladi. (grekchadan “ko’p shakllar” (“many forms”)). Virtual funksiyalar va dinamik bog’lanishlar Vorislik zanjiri asosida funksiya bir necha sinflarda implementatsiya qilinishi mumkin. Virtual funksiya yordamida tizim dastur bajarilish vaqtida qaysi funksiyani chaqirishiga qaror qiladi.
Do'stlaringiz bilan baham: |