OOPning to'rtinchi va eng kuchli tamoyillaridan biri — polimorfizm (polymorphism). Bu so'z yunoncha bo'lib "ko'p shakl" degan ma'noni anglatadi. Dasturlashda polimorfizm — bir xil nomli metod turli klasslar uchun turlicha ishlashini bildiradi.
Tasavvur qiling: "tovush" so'zi. It "Vov-vov!" deydi, mushuk "Miyov!" deydi, qush "Chiv-chiv!" deydi. Hammasi "tovush" chiqaradi, lekin har biri o'zicha. Bir so'z — ko'p shakl.
class It:
def __init__(self, ism):
self.ism = ism
def tovush(self):
return f"{self.ism}: Vov-vov!"
class Mushuk:
def __init__(self, ism):
self.ism = ism
def tovush(self):
return f"{self.ism}: Miyov!"
# Har ikki klass tovush() metodiga ega
it = It("Bobik")
mushuk = Mushuk("Mitti")
print(it.tovush()) # Bobik: Vov-vov!
print(mushuk.tovush()) # Mitti: Miyov!Bu kodda It va Mushuk — turli klasslar. Ikkalasida ham tovush() metodi bor, lekin natijalar farqli.
Polimorfizmning asosiy kuchi — bir xil interfeys orqali turli xil obyektlar bilan ishlash imkoniyati:
class It:
def __init__(self, ism):
self.ism = ism
def tovush(self):
return f"{self.ism}: Vov-vov!"
class Mushuk:
def __init__(self, ism):
self.ism = ism
def tovush(self):
return f"{self.ism}: Miyov!"
# Polimorfizmning kuchi — turli obyektlar bilan bir xil kod!
hayvonlar = [It("Bobik"), Mushuk("Mitti"), It("Rex")]
for hayvon in hayvonlar:
print(hayvon.tovush()) # har biri o'zicha javob beradi!Bu for tsiklida biz hayvon qaysi turdagi obyekt ekanini bilmaymiz — It yoki Mushuk. Lekin tovush() metodini chaqiramiz va har biri to'g'ri natija qaytaradi. Kod turi bo'yicha ajratmaydi — bu polimorfizm!
Polimorfizm meros (inheritance) va metodni qayta yozish (method overriding) bilan birga ishlaydi. Ota klass metodni e'lon qiladi, farzand klasslar uni o'zlaricha qayta yozadi.
Muhim qoidalar:
Polimorfizm tushunchalarini tekshirish
Quyidagi savollarga javob bering va polimorfizmning asosiy g'oyasini mustahkamlang: