Python ile SOLID Prensipleri Örneği

S – Tek Sorumluluk İlkesi (Single Responsibility Principle): Bir sınıfın ya da modülün tek bir sorumluluğu olmalıdır. Bu prensip, bir bileşenin değişmesi gerektiğinde diğerlerini etkileme olasılığını azaltır ve kodun bakımını ve anlaşılabilirliğini artırır.

class FileHandler:
def read_file(self, filename):
# Dosyayı oku ve içeriği döndür
pass

def write_file(self, filename, data):
    # Dosyaya veriyi yaz
    pass
class DataProcessor:
def process_data(self, data):
# Veriyi işle
pass

O – Açık/Kapalı Prensibi (Open/Closed Principle): Yazılım varlıkları (sınıflar, modüller, fonksiyonlar vb.), genişletmeye açık ancak değişime kapalı olmalıdır. Yani, mevcut kodu değiştirmeden yeni davranışlar ekleyebilmelisiniz.

class Shape:
def area(self):
pass

class Rectangle(Shape):
def init(self, width, height):
self.width = width
self.height = height

def area(self):
    return self.width * self.height

class Circle(Shape):
def init(self, radius):
self.radius = radius

def area(self):
    return 3.14 * self.radius * self.radius

L – Liskov Yerine Geçme Prensibi (Liskov Substitution Principle): Alt sınıflar, üst sınıfların yerine kullanılabilmelidir. Yani, alt sınıflar, üst sınıfların tüm yerine geçmelidir ve beklenen sonuçlar aynı olmalıdır.

class Bird:
def fly(self):
pass

class Duck(Bird):
def fly(self):
# Duck uçar
pass

class Penguin(Bird):
def fly(self):
raise NotImplementedError(“Penguins can’t fly”)

Liskov Yerine Geçme Prensibine uygun kod:

def make_bird_fly(bird):
bird.fly()

I – Arayüz Ayrım Prensibi (Interface Segregation Principle): İstemciler, ihtiyaç duymadıkları arayüzlerden bağımsız olmalıdır. Yani, genel arayüzler, belirli kullanım senaryoları için daha küçük ve spesifik arayüzler haline getirilmelidir.

class Printer:
def print(self, document):
pass

class Scanner:
def scan(self, document):
pass

class Fax:
def fax(self, document):
pass

İstemci, Printer’ın sadece print metodu ile ilgileniyor:

class SimplePrinter(Printer):
def print(self, document):
# Belgeyi yazdır
pass

D – Bağımlılıkların Tersine Çevrilmesi Prensibi (Dependency Inversion Principle): Yüksek seviyeli modüller, düşük seviyeli modüllere bağımlı olmamalıdır. İkisi de soyuta bağımlı olmalıdır. Bu, kodun daha esnek ve yeniden kullanılabilir olmasını sağlar.

class DBConnection:
def connect(self):
pass

class MySQLConnection(DBConnection):
def connect(self):
# MySQL veritabanına bağlan
pass

class OracleConnection(DBConnection):
def connect(self):
# Oracle veritabanına bağlan
pass

class DataManager:
def init(self, db_connection):
self.db_connection = db_connection

def fetch_data(self):
    # Veriyi veritabanından al
    self.db_connection.connect()
    pass

Önerilen yazılar

Bir yanıt yazın

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