Merhaba,
Elbette! OOP'nin (Nesne Yönelimli Programlama) dört temel prensibi vardır: encapsulation (kapsülleme), inheritance (kalıtım), polymorphism (çok biçimlilik) ve abstraction (soyutlama). Encapsulation ve polymorphism'i daha önce ele almıştık. Şimdi de kalıtım ve soyutlama konularına değinelim.
Inheritance (Kalıtım):
Kalıtım, bir sınıfın başka bir sınıftan özellikler ve metotlar miras almasını sağlar. Bu, kodun yeniden kullanımını artırır ve yazılım geliştirme sürecinde zaman kazandırır. Kalıtım, daha genel bir sınıfın daha özel sınıflar tarafından özelleştirilmesine olanak tanır.
Örneğin, temel bir Hayvan sınıfımız olduğunu düşünelim. Bu sınıftan türeyen Kedi ve Kopek sınıflarını oluşturabiliriz.
class Hayvan:
def __init__(self, ad, yas):
self.ad = ad
self.yas = yas
def ses_cikar(self):
pass
class Kedi(Hayvan):
def ses_cikar(self):
return "Miyav"
class Kopek(Hayvan):
def ses_cikar(self):
return "Hav hav"
# Nesne yaratımı
kedi = Kedi("Miskin", 2)
kopek = Kopek("Karabaş", 3)
print(kedi.ses_cikar()) # Çıktı: Miyav
print(kopek.ses_cikar()) # Çıktı: Hav hav
Burada Kedi ve Kopek sınıfları, Hayvan sınıfından türetilmiştir ve Hayvan sınıfının özelliklerini ve metotlarını miras almıştır. Türetilen bu sınıflar, ses_cikar metodunu kendi ihtiyaçlarına göre özelleştirebilir.
Abstraction (Soyutlama):
Soyutlama, gereksiz detayları gizleyerek, yalnızca gerekli işlevselliği ortaya çıkarmak için kullanılır. Bu, daha genel bir yapı sağlar ve kullanıcıların sınıfların iç detayları hakkında endişelenmeden onları kullanabilmelerine olanak tanır.
Soyutlama genellikle soyut (abstract) sınıflar ve arayüzler (interfaces) kullanılarak gerçekleştirilir. Python'da, soyut sınıflar oluşturmak için abc modülü kullanılabilir.
from abc import ABC, abstractmethod
class Sekil(ABC):
@abstractmethod
def alan(self):
pass
@abstractmethod
def cevre(self):
pass
class Dikdortgen(Sekil):
def __init__(self, genislik, yukseklik):
self.genislik = genislik
self.yukseklik = yukseklik
def alan(self):
return self.genislik * self.yukseklik
def cevre(self):
return 2 * (self.genislik + self.yukseklik)
class Daire(Sekil):
def __init__(self, yaricap):
self.yaricap = yaricap
def alan(self):
return 3.14 * self.yaricap * self.yaricap
def cevre(self):
return 2 * 3.14 * self.yaricap
# Nesne yaratımı
dikdortgen = Dikdortgen(5, 10)
daire = Daire(7)
print("Dikdörtgen Alan:", dikdortgen.alan()) # Çıktı: 50
print("Dikdörtgen Çevre:", dikdortgen.cevre()) # Çıktı: 30
print("Daire Alan:", daire.alan()) # Çıktı: 153.86
print("Daire Çevre:", daire.cevre()) # Çıktı: 43.96
Bu örnekte, Sekil adlı soyut bir sınıfımız var ve iki soyut metodu (alan ve cevre) içeriyor. Dikdortgen ve Daire sınıfları, Sekil sınıfından türetilmiş ve alan ve cevre metodlarını kendi gereksinimlerine göre uygulamışlardır.
Umarım bu bilgiler, OOP'nin diğer iki temel prensibi hakkında yıkıcı bir anlayış sağlamıştır. OOP, doğru uygulandığında kodun anlaşılabilirliğini ve sürdürülebilirliğini büyük ölçüde artırır.
Herkese iyi çalışmalar ve başarılı projeler dilerim. İyi günler!