SOLID prensiplerini örneklerle açıklayın.
Cevap
S: Single Responsibility
Bir sınıfın değişmek için tek bir nedeni olmalı. UserService hem kullanıcı kaydı yapıp hem e-posta HTML'i oluşturup hem de PDF rapor üretiyorsa üç ayrı sınıfa bölünmelidir.
O: Open/Closed
Sınıflar genişlemeye açık, değişikliğe kapalı olmalı. Yeni ödeme yöntemi eklemek için mevcut if/else zincirini değiştirmek yerine yeni bir sınıf eklenmeli.
class PaymentMethod:
def pay(self, amount): ...
class CreditCard(PaymentMethod):
def pay(self, amount): ...
class Papara(PaymentMethod): # yeni yöntem: mevcut kod değişmez
def pay(self, amount): ...
def checkout(method: PaymentMethod, amount):
method.pay(amount)L: Liskov Substitution
Alt sınıf, üst sınıfın yerine kullanıldığında programın doğruluğu bozulmamalı. Klasik ihlal: Square extends Rectangle. setWidth(5) çağrısı karede yüksekliği de değiştirir ve Rectangle bekleyen kod şaşırır. Alt sınıfta NotImplementedError fırlatmak da bir ihlal işaretidir.
I: Interface Segregation
İstemciler kullanmadıkları metotlara bağımlı olmamalı. Dev bir Worker { work(); eat(); sleep(); } arayüzü yerine Workable, Eatable gibi küçük arayüzler; robot sınıfı eat()'i boş implemente etmek zorunda kalmaz.
D: Dependency Inversion
Üst seviye modüller alt seviye modüllere değil, soyutlamalara bağımlı olmalı.
class OrderService:
def __init__(self, repo: OrderRepository): # soyut arayüz
self.repo = repo
# Üretimde PostgresOrderRepository, testte InMemoryOrderRepository verilirPratikte SOLID bir kural listesi değil, değişime dayanıklı ve test edilebilir kod için yol göstericidir; aşırı uygulanması gereksiz soyutlamaya yol açabilir.
İlgili OOP & Tasarım Desenleri soruları
- Clean code nedir? Yaygın code smell'ler nelerdir?
- Dependency Injection nedir? IoC container ne işe yarar?
- Strategy deseni nedir? if/else zincirlerini nasıl ortadan kaldırır?
- Observer deseni nedir? Gerçek hayatta nerelerde karşımıza çıkar?
- Factory deseni nedir? Ne zaman kullanılır?
- Singleton deseni nedir? Neden bazen anti-pattern olarak görülür?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.