Ders 17: Python Kursu – Python’da Nesneler ve Sınıflar (OOP)
Giriş
Python, nesne yönelimli programlama (OOP) paradigmasını destekleyen güçlü bir programlama dilidir. OOP, programlama mantığını daha düzenli bir şekilde organize etmeye olanak tanır ve kodun yeniden kullanılabilirliğini artırır. Bu derste, Python’da nesneler ve sınıflar konusunu derinlemesine ele alacağız.
Sınıflar Nedir?
Sınıflar, nesne yönelimli programlamada veri ve fonksiyonların bir araya toplandığı yapılardır. Python’da bir sınıf tanımlamak oldukça basittir.
Örneğin, bir ‘Araba’ sınıfı tanımlayabilir ve bu sınıfa ait özellikleri ve işlevleri belirtebiliriz:
class Araba:
def __init__(self, marka, model):
self.marka = marka
self.model = model
Burada, __init__
metodu sınıf yaratıldığında çağrılır ve nesnenin özelliklerini başlatır. Sınıflar, bir nesnenin ihtiyaç duyduğu tüm özellikleri kapsayabilir.
Nesneler Nedir?
Nesneler, sınıflardan türetilmiş somut varlıklardır. Sınıflar bir şablon görevi görürken, nesneler bu şablondan yaratılan örneklerdir. Örneğin, ‘Araba’ sınıfından ‘Toyota’ ve ‘BMW’ nesneleri oluşturabiliriz:
toyota = Araba('Toyota', 'Corolla')
bmw = Araba('BMW', 'X5')
Burada, toyota
ve bmw
nesneleri ‘Araba’ sınıfının örnekleridir. Her bir nesne kendine özgü özelliklere sahip olabilir.
Özellikler ve Metodlar
Sınıflar, özellikler (attributes) ve metodlar (methods) içerir. Özellikler, nesnenin durumunu tanımlarken, metodlar nesne ile birlikte gerçekleştirilen eylemlerdir.
Örneğin, ‘Araba’ sınıfımıza bir metod ekleyebiliriz:
class Araba:
...
def calistir(self):
print(f'{self.marka} {self.model} çalıştırılıyor.')
Bu metod, nesnenin marka ve model bilgilerini kullanarak bir mesaj yazdırır. Bu tür tanımlamalar, nesne yönelimli programlamanın temel unsurlarındandır.
Inheritance (Kalıtım) ile Sınıf Hiyerarşisi
Kalıtım, bir sınıfın başka bir sınıftan özellik ve metodları miras almasını sağlar. Bu, kodun yeniden kullanımını kolaylaştırır ve bir yapı içinde daha fazla esneklik sunar.
Örneğin, ‘ElektrikliAraba’ sınıfı oluşturup ‘Araba’ sınıfından türetebiliriz:
class ElektrikliAraba(Araba):
def __init__(self, marka, model, batarya):
super().__init__(marka, model)
self.batarya = batarya
Burada, ‘ElektrikliAraba’ sınıfı ‘Araba’ sınıfını miras alırken, kendine özgü bir ‘batarya’ özelliği ekliyoruz. Bu şekilde, mevcut sınıfın tüm özelliklerini kullanabilir ve gerekli eklemeler yapabiliriz.
Polimorfizm (Çok Biçimlilik)
Polimorfizm, nesne yönelimli programlamada önemli bir başka kavramdır. Aynı isimli metotların farklı sınıflarda farklı davranışlar göstermesini sağlar. Bu, programın esnekliğini ve genişletilebilirliğini artırır.
Örneğin, ‘Araba’ sınıfında bir ‘calistir’ metodu varsa, ‘ElektrikliAraba’ sınıfında da kendi özel ‘calistir’ metodunu tanımlayabiliriz:
class ElektrikliAraba(Araba):
def calistir(self):
print(f'{self.marka} {self.model} elektrikle çalıştırılıyor.')
Bu sayede, ‘calistir’ metodu her iki sınıf için de uygun bir biçimde çalıştırılabilir.
Sonuç
Nesne yönelimli programlama, Python ile oluşturduğumuz projelerin hem karmaşıklığını hem de yönetilebilirliğini artıran önemli bir yaklaşımdır. Sınıflar ve nesneler ile kodunuzu modüler hale getirerek daha etkili ve sürdürülebilir yazılımlar geliştirebilirsiniz.
SSS (Sıkça Sorulan Sorular)
- Sınıf ve nesne arasındaki fark nedir? Sınıflar bir yapıdır; nesneler ise bu yapının örnekleridir.
- Polimorfizm nedir? Polimorfizm, aynı metot adının farklı sınıflarda farklı işlev göstermesidir.
- Kalıtımın avantajları nelerdir? Kalıtım, kodu yeniden kullanmayı sağlar ve programın genişletilebilirliğini artırır.