Asosiy kontentga o‘tish
Informatik.uz
Bakalavr · 2-kurs1-bob. Ob’ektga yo‘naltirilgan dasturlash

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.

2-mavzu / 22 daq o‘qishYangilangan: 27-oktabr, 2026
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

  1. Bazaviy Animal sinfini (atributi name, metodi speak()) va undan meros oluvchi Dog hamda Cat sinflarini yozing; har biri speak() ni o‘zicha qayta aniqlasin. Hayvonlar ro‘yxatini bitta sikl bilan “gapirtiring”.
  2. Shape bazaviy sinfini hamda uning vorislari Circle (radiusi r) va Rectangle (w, h) ni yarating; har birida yuzani hisoblaydigan area() metodini amalga oshiring va turli shakllar ro‘yxatining umumiy yuzasini toping.
  3. Car sinfi Engine ob’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.

  1. 1Qanday holatda meros olish o‘rniga kompozitsiya tanlanadi?
    Sinflar o‘rtasidagi munosabat “ega bo‘lish” (has-a) bo‘lsa, masalan, mashinada dvigatel bor, “bir turi” (is-a) emas.
  2. 2Metodni qayta aniqlash (override) nima?
    Voris sinfda bazaviy sinfdagi metodni shu nom bilan boshqacha amalga oshirish.
  3. 3Polimorfizm kodni qanday soddalashtiradi?
    Turli sinf ob’ektlariga bir xil chaqiruvni qo‘llash mumkin, shuning uchun yangi tur qo‘shilganda `if` shartlari zanjirini o‘zgartirish shart emas.

0 / 2 mavzu o‘tildi

Kirib belgilash