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!