Meros olish va polimorfizm
Meros olish yangi sinfni mavjud sinf asosida yaratishga, polimorfizm esa bir xil chaqiruvni turli ob’ektlarga qo‘llashga imkon beradi. Ikkala tamoyilni Python misollarida ko‘rib chiqamiz.
Mavzular ro‘yxati (2 / 2)
Meros olish — yangi sinfni mavjud sinf asosida yaratish: voris (hosila) sinf bazaviy sinfning atribut va metodlarini oladi va o‘ziga xos imkoniyatlarni qo‘shadi. Bu “A — B ning bir turi” (is-a) munosabatini ifodalaydi: it — hayvonning bir turi, doira — shaklning bir turi. Kod takrorlanmaydi: umumiy qism bazaviy sinfda bir marta yoziladi.
Python’da bazaviy sinf qavs ichida ko‘rsatiladi: class Dog(Animal):. Voris konstruktorida bazaviy sinf konstruktorini super().__init__(name) bilan chaqirish kerak, shunda umumiy atributlar o‘rnatiladi. Voris sinf bazaviy sinfdagi metodni o‘z nomi bilan qayta yozsa, bu qayta aniqlash (override) deyiladi: Dog dagi speak() metodi Animal dagi metoddan boshqacha natija beradi.
Polimorfizm (“ko‘p shakllilik”) — bir xil chaqiruvning ob’ekt turiga qarab turlicha ishlashi. Masalan, Dog va Cat ob’ektlari ro‘yxatida for a in animals: a.speak() sikli har bir ob’ekt uchun o‘z speak() metodini bajaradi va siklni o‘zgartirish shart emas. Shuning uchun yangi sinf qo‘shilganda mavjud kod o‘zgarishsiz ishlayveradi. Python’da hatto umumiy bazaviy sinf bo‘lmasa ham, kerakli metodga ega har qanday ob’ekt mos keladi (duck typing).
Meros olishdan oldin munosabatni tekshiring: “voris — bazaviy sinfning bir turi” deyish to‘g‘rimi? Agar munosabat “ega bo‘lish” (has-a) bo‘lsa, masalan, mashinada dvigatel bor, meros emas, kompozitsiya tanlanadi — ob’ekt ichida boshqa ob’ekt saqlanadi. Ob’ektning sinfga (yoki uning vorisiga) mansubligini isinstance(d, Animal) tekshiradi: Dog ob’ekti d uchun u True qaytaradi.
Asosiy xulosalar
- Meros olish voris sinfga bazaviy sinfning atribut va metodlarini beradi va kod takrorlanishini kamaytiradi.
- Meros “is-a” (bir turi) munosabatiga mos kelganda qo‘llanadi; “has-a” (ega bo‘lish) uchun kompozitsiya tanlanadi.
- Voris konstruktorida
super().__init__(...)bazaviy sinfni sozlaydi. - Metodni qayta aniqlash (override) voris sinfda xatti-harakatni o‘zgartiradi.
- Polimorfizm bir xil chaqiruvning ob’ekt turiga qarab turlicha bajarilishini ta’minlaydi.
Amaliy topshiriqlar
- Bazaviy
Animalsinfini (atributiname, metodispeak()) va undan meros oluvchiDoghamdaCatsinflarini yozing; har birispeak()ni o‘zicha qayta aniqlasin. Hayvonlar ro‘yxatini bitta sikl bilan “gapirtiring”. Shapebazaviy sinfini hamda uning vorislariCircle(radiusir) vaRectangle(w,h) ni yarating; har birida yuzani hisoblaydiganarea()metodini amalga oshiring va turli shakllar ro‘yxatining umumiy yuzasini toping.CarsinfiEngineob’ektini kompozitsiya sifatida saqlasin (self.engine = Engine()); bu holda nima uchun meros emas, kompozitsiya to‘g‘ri tanlov ekanini yozma izohlang.
Mustahkamlash savollari
O‘zingizni sinab ko‘ring: avval o‘ylab ko‘ring, keyin javobni oching.
1Qanday holatda meros olish o‘rniga kompozitsiya tanlanadi?Javobni ko‘rishJavobni yashirish
Sinflar o‘rtasidagi munosabat “ega bo‘lish” (has-a) bo‘lsa, masalan, mashinada dvigatel bor, “bir turi” (is-a) emas.2Metodni qayta aniqlash (override) nima?Javobni ko‘rishJavobni yashirish
Voris sinfda bazaviy sinfdagi metodni shu nom bilan boshqacha amalga oshirish.3Polimorfizm kodni qanday soddalashtiradi?Javobni ko‘rishJavobni yashirish
Turli sinf ob’ektlariga bir xil chaqiruvni qo‘llash mumkin, shuning uchun yangi tur qo‘shilganda `if` shartlari zanjirini o‘zgartirish shart emas.
Saytga kiring
Slaydlar va PDF faqat ro‘yxatdan o‘tgan foydalanuvchilar uchun: ko‘rish ham, yuklab olish ham. Kirish bepul.
Saytga kiring
Slaydlar va PDF faqat ro‘yxatdan o‘tgan foydalanuvchilar uchun: ko‘rish ham, yuklab olish ham. Kirish bepul.
0 / 2 mavzu o‘tildi
Kirib belgilash