Nesne Yönelimli Programlama’da (OOP) kalıtım ve polimorfizm, kodun yeniden kullanılabilirliğini ve esnekliğini artıran temel özelliklerdir. Python, bu kavramları destekleyerek daha modüler ve esnek yazılımlar geliştirmenize olanak tanır.
1. Kalıtım (Inheritance)
Kalıtım, bir sınıfın başka bir sınıftan özellikleri ve metotları devralmasına olanak tanır. Bu, yeni sınıflar oluştururken mevcut sınıfları yeniden kullanmayı ve bu sınıfların işlevselliğini genişletmeyi sağlar. Kalıtım, sınıflar arasında bir hiyerarşi oluşturur.
a. Temel Kalıtım
Bir sınıf başka bir sınıftan türetildiğinde, türetilmiş sınıf (alt sınıf) üst sınıfın tüm özelliklerini ve metotlarını devralır.
Örnek:
class Hayvan:
def __init__(self, isim):
self.isim = isim
def ses_cikar(self):
pass # Bu metot alt sınıflarda yeniden tanımlanacak
class Kedi(Hayvan):
def ses_cikar(self):
return "Miyav"
class Kopek(Hayvan):
def ses_cikar(self):
return "Hav"
Bu örnekte, Kedi
ve Kopek
sınıfları Hayvan
sınıfından türetilmiştir. Hayvan
sınıfında tanımlanan ses_cikar
metodu, alt sınıflarda yeniden tanımlanmıştır.
b. super()
Fonksiyonu
super()
fonksiyonu, alt sınıftan üst sınıfın metotlarına ve özelliklerine erişmek için kullanılır. Bu, alt sınıflarda üst sınıfın yapıcı metodunu çağırmak için özellikle kullanışlıdır.
Örnek:
class Arac:
def __init__(self, marka, model):
self.marka = marka
self.model = model
class Araba(Arac):
def __init__(self, marka, model, hiz):
super().__init__(marka, model) # Üst sınıfın yapıcı metodunu çağırır
self.hiz = hiz
def bilgiler(self):
return f"Marka: {self.marka}, Model: {self.model}, Hız: {self.hiz} km/s"
araba1 = Araba("Toyota", "Corolla", 180)
print(araba1.bilgiler()) # Marka: Toyota, Model: Corolla, Hız: 180 km/s
Bu örnekte, Araba
sınıfı Arac
sınıfından türetilmiştir ve super()
fonksiyonu kullanılarak üst sınıfın __init__
metodu çağrılmıştır.
c. Çoklu Kalıtım
Python, bir sınıfın birden fazla sınıftan kalıtım almasına izin verir. Bu, bir sınıfın birden fazla sınıfın özelliklerini ve metotlarını devralmasını sağlar.
Örnek:
class ElektrikliArac:
def __init__(self, batarya_kapasitesi):
self.batarya_kapasitesi = batarya_kapasitesi
class BenzinliArac:
def __init__(self, yakit_turu):
self.yakit_turu = yakit_turu
class HibritAraba(ElektrikliArac, BenzinliArac):
def __init__(self, marka, model, batarya_kapasitesi, yakit_turu):
ElektrikliArac.__init__(self, batarya_kapasitesi)
BenzinliArac.__init__(self, yakit_turu)
self.marka = marka
self.model = model
def bilgiler(self):
return (f"Marka: {self.marka}, Model: {self.model}, "
f"Batarya Kapasitesi: {self.batarya_kapasitesi} kWh, "
f"Yakıt Türü: {self.yakit_turu}")
hibrit = HibritAraba("Toyota", "Prius", 8.8, "Benzin")
print(hibrit.bilgiler())
Bu örnekte, HibritAraba
sınıfı hem ElektrikliArac
hem de BenzinliArac
sınıflarından kalıtım alır. Bu, hibrit arabaların her iki türün de özelliklerine sahip olmasını sağlar.
2. Polimorfizm (Polymorphism)
Polimorfizm, aynı adı taşıyan metodların farklı sınıflarda farklı davranışlar sergileyebilmesidir. Bu özellik, aynı arayüzün farklı biçimlerde uygulanmasına olanak tanır.
a. Metot Overriding (Metot Geçersiz Kılma)
Alt sınıfın, üst sınıfta tanımlı bir metodu yeniden tanımlaması işlemidir. Alt sınıf bu metodun kendi versiyonunu sunar.
Örnek:
class Hayvan:
def ses_cikar(self):
return "Bilinmeyen ses"
class Kedi(Hayvan):
def ses_cikar(self):
return "Miyav"
class Kopek(Hayvan):
def ses_cikar(self):
return "Hav"
# Polimorfik fonksiyon
def hayvan_sesi(hayvan):
print(hayvan.ses_cikar())
kedi = Kedi()
kopek = Kopek()
hayvan_sesi(kedi) # Miyav
hayvan_sesi(kopek) # Hav
Bu örnekte, Kedi
ve Kopek
sınıfları, Hayvan
sınıfının ses_cikar
metodunu geçersiz kılar. hayvan_sesi
fonksiyonu, hangi hayvanın sesi çıkaracağını bilmeden çalışır.
b. Python’da Duck Typing
Python’da polimorfizm genellikle duck typing ile gerçekleştirilir. Duck typing, bir nesnenin belirli bir metoda sahip olup olmamasıyla ilgilenir, nesnenin hangi sınıftan türediğiyle değil. Python, bir nesnenin belirli bir davranışa sahip olup olmadığını kontrol eder, sınıf hiyerarşisine bakmaz.
Örnek:
class Kus:
def ses_cikar(self):
return "Cik cik"
class Ordek:
def ses_cikar(self):
return "Vak vak" def
hayvan_sesi(hayvan):
print(hayvan.ses_cikar())
kus = Kus()
ordek = Ordek()
hayvan_sesi(kus) # Cik cik
hayvan_sesi(ordek) # Vak vak
Bu örnekte, Kus
ve Ordek
sınıfları Hayvan
sınıfından türetilmemiştir, ancak her ikisinin de ses_cikar
metodu vardır. Duck typing sayesinde, bu metotlar polimorfik olarak çalıştırılabilir.
c. Polimorfizm ile Sınıf Hiyerarşisi
Polimorfizm, sınıf hiyerarşisi içindeki alt sınıfların, üst sınıftan miras aldığı metotları yeniden tanımlayarak farklı davranışlar sergilemesine olanak tanır.
Örnek:
class Calisan:
def __init__(self, isim):
self.isim = isim
def calis(self):
return f"{self.isim} çalışıyor."
class Yazilimci(Calisan):
def calis(self):
return f"{self.isim} kod yazıyor."
class Tasarimci(Calisan):
def calis(self):
return f"{self.isim} tasarım yapıyor."
# Polimorfik davranış
def calisan_calis(calisan):
print(calisan.calis())
yazilimci = Yazilimci("Ahmet")
tasarimci = Tasarimci("Elif")
calisan_calis(yazilimci) # Ahmet kod yazıyor.
calisan_calis(tasarimci) # Elif tasarım yapıyor.
Bu örnekte, Calisan
, Yazilimci
, ve Tasarimci
sınıfları arasında bir hiyerarşi vardır. Her sınıf, calis
metodunu farklı şekillerde uygular, ancak hepsi aynı arayüzü sunar.
Kalıtım ve polimorfizm, Nesne Yönelimli Programlama‘nın (OOP) temel taşlarıdır ve Python, bu kavramları tam olarak destekler. Kalıtım, sınıflar arasında kodun yeniden kullanılmasını ve hiyerarşiler oluşturulmasını sağlarken, polimorfizm, aynı arayüzün farklı sınıflarda farklı şekillerde uygulanmasına olanak tanır. Bu özellikler, yazılım tasarımını daha esnek, modüler ve sürdürülebilir hale getirir. Kalıtım ve polimorfizmi etkili bir şekilde kullanmak, Python’da daha güçlü ve esnek yazılımlar geliştirmenize yardımcı olur.
Bir yanıt yazın