- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
- Bağlantıyı al
- X
- E-posta
- Diğer Uygulamalar
Çok biçimlilik (Polymorphism), kelime anlamı olarak "çok şekilli" demektir. OOP bağlamında ise, farklı sınıflara ait nesnelerin aynı metot adı altında farklı şekillerde davranabilmesi anlamına gelir.
Bu, kodun daha esnek, jenerik ve temiz olmasını sağlar, çünkü belirli bir metodu çağırmadan önce nesnenin tam olarak hangi sınıfa ait olduğunu bilmek zorunda kalmayız.
Çok biçimliliğin en yaygın biçimi, önceki konuda öğrendiğimiz Metodu Geçersiz Kılma (Method Overriding) ile gerçekleşir. Farklı alt sınıflar, üst sınıftan miras aldıkları ortak metotlara kendi özgün davranışlarını yüklerler.
Örnek: Ortak Davranış (hareket_et)
Hayvan üst sınıfından miras alan Kus ve Balik sınıfları, ortak bir hareket_et() metoduna sahiptir, ancak her biri farklı davranır:
def __init__(self, isim):
self.isim = isim
def hareket_et(self):
# Üst sınıfın varsayılan davranışı
print(f"{self.isim} hareket ediyor (Genel).")
class Kus(Hayvan):
def hareket_et(self):
# Geçersiz Kılma: Kuş kendine özgü davranır
print(f"{self.isim} uçuyor!")
class Balik(Hayvan):
def hareket_et(self):
# Geçersiz Kılma: Balık kendine özgü davranır
print(f"{self.isim} yüzüyor.")
# Nesneleri oluşturma
kus = Kus("Martı")
balik = Balik("Hamsi")
Çok biçimliliğin gücü, farklı tipteki nesneleri bir koleksiyonda tutup, hepsine aynı komutu (metot adını) verdiğimizde ortaya çıkar.
# Jenerik bir fonksiyon tanımlayalım
def hayvanin_hareketini_goster(hayvan):
# Hangi sınıf olduğunun önemi yok, sadece 'hareket_et'
#metodunun varlığı önemli. hayvan.hareket_et()
# Tüm koleksiyon üzerinde döngü yapma
for h in hayvanlar:
hayvanin_hareketini_goster(h)
# Çıktı:
# Martı uçuyor!
# Hamsi yüzüyor.
Bu örnekte, hayvanin_hareketini_goster fonksiyonu, kendisine verilen nesnenin Kus mu yoksa Balik mı olduğunu kontrol etmek zorunda kalmaz. Her nesne, çağrılan hareket_et() metoduna kendi uygun versiyonuyla cevap verir.
Python'da çok biçimlilik, kalıtımdan daha geniş bir anlam taşır ve Duck Typing (Ördek Tiplemesi) ilkesine dayanır:
"Eğer bir şey ördek gibi yürüyorsa ve ördek gibi ses çıkarıyorsa, o bir ördektir."
OOP diline çevirirsek: Bir nesnenin belirli bir sınıftan miras alıp almadığı önemli değildir; ihtiyaç duyduğumuz metot ismine sahip olup olmadığı önemlidir.
def hareket_et(self):
print("Kamyon yolda ilerliyor.")
kamyon = Kamyon()
# Kamyon, Hayvan sınıfından miras almadı, ama 'hareket_et'
#metoduna sahip.
# Bu yüzden jenerik fonksiyonda kullanılabilir.
hayvanin_hareketini_goster(kamyon)
# Çıktı: Kamyon yolda ilerliyor.
Bu sayede, hayvanin_hareketini_goster fonksiyonu artık sadece hayvanlar için değil, hareket_et metoduna sahip her nesne için çalışır.
Çok biçimlilik, esnek kod yazımının bel kemiğidir. Programınızı, belirli tiplere sıkı sıkıya bağlı kalmadan (tightly coupled) tasarlamanızı sağlar. Farklı nesnelerle aynı komutlarla (metot isimleriyle) konuşabilmek, büyük ve değişen sistemlerin yönetimini kolaylaştırır.
🔥 Python Kariyerinizi Hemen Başlatın!
Hemen kursumuza kaydolun ve bu güçlü araçları kullanarak profesyonel Python geliştiricisi olma yolunda ilk adımı atın. Kursumuzdaki uygulamalı modüller, sizi sadece bir yazılımcı adayı değil, hazır bir profesyonel haline getirecek. Python Eğitimini Udemy platformunda bulabilirsiniz.
[ Python Eğitimi Sıfırdan İleri Seviye ]
Tıklayın ve Python Eğitimine Hemen Kaydolun!
Yorumlar
Yorum Gönder