⬅️ Bosh sahifaga
1 / 12

📚 Python OOP - 13-dars

Polymorphism

Method overloading va overriding

Assalomu alaykum, yosh dasturchilar! 😊
Bugun biz Polymorphism tushunchasini o'rganamiz

120 daqiqa

📋 Dars rejasi

🤔 Polymorphism nima?

Polymorphism so'zi "poly" (ko'p) va "morph" (shakl) so'zlaridan kelib chiqqan bo'lib, "ko'p shakllilik" ma'nosini beradi.

🔄 Polymorphism turlari:

  • Method Overriding - Bola sinfda ota sinfning metodini qayta yozish
  • Method Overloading - Bir sinf ichida bir xil nomli metodning turli parametrlarga ega bo'lishi
class Hayvon:
    def ovoz_chiqar(self):
        return "Men hayvonman!"

class Mushuk(Hayvon):
    def ovoz_chiqar(self):  # Method overriding
        return "Miyov!"

class It(Hayvon):
    def ovoz_chiqar(self):  # Method overriding
        return "Hav!"

# Test qilish
hayvonlar = [Mushuk(), It()]
for hayvon in hayvonlar:
    print(hayvon.ovoz_chiqar())  # Har xil natija

🔄 Method Overriding

Method Overriding - bola sinfda ota sinfning metodini qayta yozish:

class Shaxs:
    def __init__(self, ism, yosh):
        self.ism = ism
        self.yosh = yosh
    
    def salom_ber(self):
        return f"Salom, men {self.ism}!"

class Talaba(Shaxs):
    def __init__(self, ism, yosh, kurs):
        super().__init__(ism, yosh)
        self.kurs = kurs
    
    def salom_ber(self):  # Method overriding
        return f"Salom, men {self.ism}, {self.kurs}-kurs talabasiman!"

class O_quvchi(Shaxs):
    def __init__(self, ism, yosh, sinf):
        super().__init__(ism, yosh)
        self.sinf = sinf
    
    def salom_ber(self):  # Method overriding
        return f"Salom, men {self.ism}, {self.sinf} sinfida o'qiyman!"

# Test qilish
shaxslar = [
    Shaxs("Ali", 25),
    Talaba("Zilola", 20, 2),
    O_quvchi("Sardor", 16, "10-A")
]

for shaxs in shaxslar:
    print(shaxs.salom_ber())

🔄 Method Overloading simulyatsiyasi

Python'da method overloading to'g'ridan-to'g'ri qo'llab-quvvatlanmaydi, lekin simulyatsiya qilinadi:

class Kalkulyator:
    def qo_shish(self, a, b=None, c=None):
        if b is None and c is None:
            return a
        elif c is None:
            return a + b
        else:
            return a + b + c
    
    def ko_paytirish(self, a, b=None, c=None):
        if b is None and c is None:
            return a
        elif c is None:
            return a * b
        else:
            return a * b * c

# Test qilish
kalkulyator = Kalkulyator()

print(kalkulyator.qo_shish(5))           # 5
print(kalkulyator.qo_shish(5, 3))        # 8
print(kalkulyator.qo_shish(5, 3, 2))     # 10

print(kalkulyator.ko_paytirish(5))       # 5
print(kalkulyator.ko_paytirish(5, 3))    # 15
print(kalkulyator.ko_paytirish(5, 3, 2)) # 30

🦆 Duck Typing

Python'da Duck Typing - "agar u o'rdak kabi yursa va o'rdak kabi ovoz chiqarsa, demak u o'rdak" prinsipi:

class Mashina:
    def harakatlanish(self):
        return "Mashina yo'lda harakatlanmoqda"

class Samolyot:
    def harakatlanish(self):
        return "Samolyot osmonda uchmoqda"

class Kema:
    def harakatlanish(self):
        return "Kema dengizda suzmoqda"

def harakatlanish_funksiyasi(transport):
    """Har qanday transport obyektini qabul qiladi"""
    return transport.harakatlanish()

# Test qilish
transportlar = [Mashina(), Samolyot(), Kema()]

for transport in transportlar:
    print(harakatlanish_funksiyasi(transport))

💪 Amaliy mashq 1

🎵 Musiqa asboblari

Vazifa: Musiqa asboblari tizimi yarating

  • Musiqa_asbobi sinfi - nomi, ovoz_chiqar() metodi
  • Gitara, Piano, Skripka sinflari
  • Har bir sinfda ovoz_chiqar() metodini override qiling
  • Duck typing ishlatib, barcha asboblarni chalib ko'ring

Vaqt: 10 daqiqa

💪 Amaliy mashq 2

🍕 Ovqat tayyorlash

Vazifa: Ovqat tayyorlash tizimi yarating

  • Ovqat sinfi - nomi, tayyorlash() metodi
  • Pizza, Salat, Shashlik sinflari
  • Har bir sinfda tayyorlash() metodini override qiling
  • Method overloading simulyatsiyasi qiling

Vaqt: 10 daqiqa

🏠 Uy vazifasi

🎮 Vazifa 1: O'yin tizimi
  • O_yinchi sinfi - nomi, harakat() metodi
  • Jangchi, Sehrgar, Kamondor sinflari
  • Har bir sinfda harakat() metodini override qiling
🏫 Vazifa 2: Ta'lim tizimi
  • O_quvchi sinfi - nomi, o_qish() metodi
  • Talaba, O_quvchi, Magistr sinflari
  • Method overloading simulyatsiyasi qiling
🚗 Vazifa 3: Transport tizimi
  • Transport sinfi - nomi, harakatlanish() metodi
  • Mashina, Samolyot, Kema sinflari
  • Duck typing ishlatib, barcha transportlarni harakatlantiring

🎉 Xulosa

Bugun nimalarni o'rgandik?

🔄 Method Overriding

Bola sinfda ota sinf metodini qayta yozish

🔄 Method Overloading

Bir xil nomli metodning turli parametrlarga ega bo'lishi

🦆 Duck Typing

Obyektning turi emas, xatti-harakati muhim

🎯 Polymorphism

Bir xil nomli metodlarning turli xil xatti-harakatlar

Keyingi dars: Encapsulation mavzusini o'rganamiz

Savollaringiz bo'lsa, yozib qoldiring! 😊

🔄 Qayta ko'rib chiqish

Savollar:

  • Polymorphism nima?
  • Method overriding va overloading o'rtasidagi farq nima?
  • Duck typing nima?
  • Python'da method overloading qanday simulyatsiya qilinadi?

💡 Muhim eslatma:

Polymorphism yordamida kodni moslashuvchan va kengaytiriladigan qilish mumkin. Har bir sinf o'z vazifasini bajarishi kerak!