Python’da Kalıtım ve Polimorfizm

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.

 

Nesne Yönelimli Programlama (OOP)

Comments

“Python’da Kalıtım ve Polimorfizm” için bir yanıt

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.