Kotlin Polimorfizm. (Sinf/Class)

Obyektga yo’naltirilgan dasturlash tillari bir xil nomdagi funksiya turli obyekt tomonidan ishlatilganda turli amallarni bajarish imkoniyatini ta’minlaydi. Bu funksiya va sinfning polimorfligi deb nomlanadi.

Poli – ko’p, morfe – shakl degan ma’noni anglatadi.

Polimorfizm – bu shaklning ko’p xilligidir. Bu tushunchalar bilan keyinchalik batafsil tanishamiz. Agar inkapsulyatsiyalash va vorislikni OMYo ning foydali vositalari sifatida olib qarash mumkin bo’lca, polimorfizm - eng universal va radikal vositadir. Polimorfizm inkapsulyasiyalash va vorislik bilan chambarchas bog’liq, boz ustiga, polimorfizmsiz OMYo samarali bo’lolmaydi. Polimorfizm - OMYo paradigmasida markaziy tushunchadir. Polimorfizmni egallamay turib, OMYo dan samarali foydalanish mumkin emas. Polimorfizm shunday holatki, bunda qandaydir bitta narsa ko’p shakllarga ega bo’ladi. Dasturlash tilida «ko’p shakllar» deyilganda, bitta nom avtomatik mexanizm tomonidan tanlab olingan turli kodlarning nomidan ish ko’rishi tushuniladi. Shunday qilib, polimorfizm yordamida bitta nom turli xulq-atvorni bildirishi mumkin. Vorislik polimorfizmning ayrim turlaridan foydalanish uchun zarurdir. Aynan o’rindoshlik imkoniyati mavjud bo’lgani uchun, polimorfizmdan foydalanish mumkin bo’ladi. Polimorfizm yordamida tizimga to’g’ri kelgan paytda qo’shimcha funksiyalarni qo’shish mumkin. Dasturni yozish paytida hatto taxmin qilinmagan funksionallik bilan yangi sinflarni qo’shish mumkin, buning ustiga bularning hammasini dastlabki dasturni o’zgartirmay turib ham amalga oshirish mumkin. Yangi talablarga osongina moslasha oladigan dasturiy vosita deganda, shularni keltirish mumkin. Polimorfizmning uchta asosiy turi mavjud:

  1. Qo’shilish polimorfizmi
  2. Parametrik polimorfizm
  3. Qo’shimcha yuklanish.

Qo’shilish polimorfizmini ba’zida sof polimorfizm deb ham ataydilar. Qo’shilish polimorfizmi shunisi bilan qiziqarliki, u tufayli tarmoq sinf nusxalari o’zini turlicha tutishi mumkin. Qo’shilish polimorfizmidan foydalanib, yangi tarmoq sinflarni kiritgan holda, tizimning xulq-atvorini o’zgartirish mumkin. Uning bosh afzalligi shundaki, dastlabki dasturni o’zgartirmay turib, yangi xulq-atvorni yaratish mumkin. Aynan polimorfizm tufayli joriy qilishdan takroran fodalanishni vorislik bilan aynanlashtirish kerak emas. Buning o’rniga vorislikdan avvalambor o’zaro almashinish munosabatlari yordamida polimorf xulq-atvorga erishish uchun foydalanish lozim. Agar o’zaro almashinish munosabatlari to’g’ri belgilansa, buning ortidan albatta takroran qo’llash chiqib keladi. Qo’shilish polimorfizmidan foydalanib, bazaviy sinfdan, har qanday avloddan, shuningdek bazaviy sinf qo’llaydigan usullardan takroran foydalanish mumkin.

Parametrik polimorfizmdan foydalanib, turdosh usullar va turdosh (universal) turlar yaratish mumkin. Turdosh usullar va turlar dalillarning ko’plab turlari bilan ishlay oladigan dasturni yozish imkonini beradi. Agar qo’shilish polimorfizmidan foydalanish obyektni idrok etishga ta’cir ko’rcatca, parametrik polimorfizmdan foydalanish qo’llanayotgan usullarga ta’cir ko’rcatadi. Parametrik polimorfizm yordamida, parametr turini bajarilish vaqtigacha e’lon qilmay turib, turdosh usullar yaratish mumkin. Usullarning parametrik parametrlari bo’lganidek, turlarning o’zi ham parametrik bo’lishi mumkin. Biroq polimorfizmning bunday turi barcha tillarda ham uchrayvermaydi.

Qo’shimcha yuklanish yordamida bitta nom turlicha usullarni bildirishi mumkin. Bunda usullar faqat miqdorlari va parametr turlari bilan farqlanadi. Usul o’z dalillari (argumentlari) ga bog’liq bo’lmaganda, ortiqcha yuklanish foydalidir. Usul o’ziga xos parametrlar turlari bilan cheklanmaydi, balki har xil turdagi parametrlarga nisbatan ham qo’llanadi. Masalan, max usulini ko’rib chiqaylik. Maksimal - turdosh tushuncha bo’lib, u ikkita muayyan parametrlarni qabul qilib, ularning qaysi biri kattaroq ekanini ma’lum qiladi. Ta’rif butun sonlar yoki suzuvchi nuqtali sonlar qiyoslanishiga qarab o’zgarmaydi. Polimorfizmdan samarali foydalanish sari qo’yilgan birinchi qadam bu inkapsulyatsiyalash va vorislikdan samarali foydalanishdir. Inkapsulyatsiyalashsiz dastur osongina sinflarning joriy qilinishiga bog’liq bo’lib qolishi mumkin. Agar dastur sinflarning joriy qilinish aspektrlaridan biriga bog’liq bo’lib qolsa, tarmoq sinfda bu joriyni to’g’rilash mumkin bo’lmaydi. Vorislik - qo’shilish polimorfizmining muhim tarkibiy qismi. Hamma vaqt bazaviy sinfga imkon darajada yaqinlashtirilgan darajada dasturlashga uringan holda, o’rinbosarlik munosabatlarini o’rnatishga harakat qilish kerak. Bunday usul dasturda ishlov berilayotgan obyektlar turlari miqdorini oshiradi. Puxta o’ylab ishlab chiqilgan tabaqalanish o’rinbosarlik munosabatlarini o’rnatishga yordam beradi. Umumiy qismlarni abstrakt sinflarga olib chiqish kerak hamda obyektlarni shunday dasturlash kerakki, bunda obyektlarning ixtisoslashtirilgan nusxalari emas, balki ularning o’zlari dasturlashtirilsin. Bu keyinchalik har qanday voris sinfni dasturda qo’llash imkonini beradi. Agar til vositalari bilan interfeys va joriy qilinishni to’liq ajratish mumkin bo’lsa, u holda odatda mana shu vositalardan foydalanish kerak, vorislikdan emas. Interfeys va joriy qilinishni aniq ajratib, o’rinbosarlik imkoniyatlarini oshirish va shuning bilan polimorfizmdan foydalanishning yangi imkoniyatlarini ochib berish mumkin. Biroq ko’p o’rinlarda tajribasiz loyihachilar polimorfizmni kuchaytirish maqsadida xulq-atvorni juda baland tabaqaviy darajaga olib chiqishga urinadilar. Bu holda har qanday avlod ham bu xulq-atvorni ushlab tura oladi. Shuni ecdan chiqarmaslik kerakki, avlodlar o’z ajdodlarining funksiyalarini chiqarib tashlay olmaydilar. Dasturni yanada polimorf qilish maqsadida puxta rejalashtirilgan vorislik tabaqalarini buzish yaramaydi. Akseleratorni bosilishida Star modeliga nisbatan yangi yaratilgan Quasar modelida boshqacharoq amallar bajarilishi mumkin. Quasar modelida dvigatelga yoqilg’ini sepuvchi injektor sistemasi va Star modelidagi korbyurator o’rniga turbokompressor o’rnatilgan bo’lishi mumkin. Lekin foydalanuvchi bu farqlarni bilishi shart emas. U rulga o’tirgach oddiygina akselatorni bosadi va avtomobilning mos reaksiyasini kutadi.