SOLID Prensipleri: Nesne Yönelimli Programlamanın Beş Altın Kuralı
Robert C. Martin'in derlediği beş prensip, bir yazılımcının "iyi kod" yazmasını ayıran sınırı belirledi. Modern yazılım mühendisliğinin temeli.

"Kod yazmak kolay, iyi kod yazmak zor"
OOP herkes öğrenir ama iyi OOP ayrı bir disiplin. 2000'lerin başında Robert C. Martin ("Uncle Bob") beş prensibi bir araya getirdi:
S - Single Responsibility
O - Open-Closed
L - Liskov Substitution
I - Interface Segregation
D - Dependency Inversion
= SOLID.
Modern OOP eğitiminin vazgeçilmez köşe taşları.
S — Single Responsibility Principle
"Bir sınıfın değişme nedeni tek olmalı."
Yani: bir sınıf tek bir işten sorumlu olmalı.
Kötü:
class Kullanici:
def kaydet_db(self): ...
def gonder_email(self): ...
def loglog(self): ...
Üç farklı sebepten değişir.
İyi: ayrı sınıflar — Kullanici, KullaniciRepo, EmailServis, Logger.
O — Open-Closed Principle
"Genişlemeye açık, değişime kapalı."
Yeni özellik eklerken mevcut kodu değiştirme, yeni kod ekle.
Bertrand Meyer'in 1988 fikri.
Polimorfizm + soyut sınıflar bunu sağlar.
Kötü: if shape.type == 'kare', elif 'daire'...
İyi: Shape soyut sınıfı, alt sınıflar area() metodunu override eder.
L — Liskov Substitution Principle
Önceki yazıda detaylı.
"Alt sınıf üst sınıf yerine kullanılabilmeli."
Klasik ihlal örneği: Kuş → Pinguen. Kuş'un uc() metodu var, Pinguen uçamaz. LSP ihlali.
Çözüm: UcanKus ve UcmayanKus ayrı sınıflar.
I — Interface Segregation Principle
"İstemci kullanmayacağı arayüzlere bağımlı olmamalı."
Büyük arayüz → küçük parçalara böl.
Kötü:
class Worker:
def cali(self): ...
def ye(self): ...
Robot için ye() anlamsız.
İyi: Calisan ve Yiyen ayrı arayüzler.
D — Dependency Inversion Principle
"Yüksek seviye modüller düşük seviye modüllere bağımlı olmamalı. Her ikisi de soyutlamalara bağımlı olmalı."
Kötü:
class SaymaServisi:
def __init__(self):
self.db = PostgresDB() # somut bağımlılık
PostgreSQL'i değiştirmek felaket.
İyi:
class SaymaServisi:
def __init__(self, db: Veritabani): # soyut bağımlılık
self.db = db
Dependency Injection ile uygulanır.
Modern bağlam
Functional programlama
SOLID OOP'ye özgü. Functional programmingde benzer prensipler:
- Saf fonksiyonlar (S).
- Currying / composition (O).
- Type classes (L).
- Modüler tipler (I).
- Higher-order functions (D).
Microservices
SOLID sistem seviyesinde:
- Her servis tek sorumluluk.
- Olay tabanlı genişleme.
- API sözleşmesi.
- Küçük servisler.
- Servis discovery.
Modern AI mühendisliği
LLM agent mimarileri SOLID ihlal eder genelde. Çözüm: modular AI.
Faydaları
- Bakım kolaylığı: tek yer değişir.
- Test edilebilirlik: mock'lama kolay.
- Tekrar kullanım: parçalar bağımsız.
- Yeni özellik: mevcut kodu kırma.
- Takım çalışması: net sınırlar.
Aşırıya kaçma
Kötü uygulama: her sınıfa 5 prensip zorla yamamak → gereksiz karmaşıklık.
"Premature abstraction is the root of all evil." — Kent Beck.
Kural: prensiplere ihtiyaç duyana kadar uygulamayı erteleyin.
Tarihsel önem
- 1988: Bertrand Meyer Open-Closed.
- 1987: Liskov LSP.
- 2000'ler: Robert C. Martin SOLID acronyminı popülerleştirdi.
- "Clean Code" (2008) kitabı.
Türkçe yazılım dünyasında
- Bilkent, ODTÜ, İTÜ yazılım derslerinde mecburi konu.
- Yazılım Mimarisi sertifikalarında temel.
- Türk yazılım şirketlerinin code review pratiklerinde standart.
Uncle Bob tartışması
Robert C. Martin sürekli eleştirildi:
- "Aşırı normatif."
- "Modern paradigmaları (functional, async) ihmal ediyor."
- Politik açıklamaları nedeniyle bazı topluluklardan dışlandı.
Yine de SOLID prensipleri kendi başına ayakta.
Felsefe
SOLID temel mesajı: "Değişim kaçınılmaz, ona hazır ol".
Yazılım yaşar, evrilir. İyi tasarım gelecekteki değişimi kolay kılar.
Kapanış
SOLID, OOP'nin kuralsız tarafını disiplinli hale getirdi. Mükemmel değil — her durumda uygulanmaz — ama iyi başlangıç.
Bir yazılım mühendisinin olgunluk işareti: SOLID'i nerede uygulayacağını ve nerede uygulamayacağını bilmek.
Etiketler
Kendinizi Test Edin
Cevaplarınız profilinizde istatistik olarak saklanır.
1. SOLID'in S'si?
2. SOLID kim derledi?
3. L harfi?
4. D harfi ne yapar?
5. En büyük tehlike?
İlgili Yazılar
Kıyamet Argümanı: Olasılıkla İnsanlığın Ömrü Tahmin Edilebilir mi?
Sadece "sıradan bir insan" olduğunuz varsayımından yola çıkarak, insan türünün daha ne kadar süreceğini tahmin etmeye çalışan tuhaf bir akıl yürütme var. İkna edici mi, yoksa istatistiğin bir tuzağı mı?
MatematikManifold Nedir? Eğri Uzayları "Düzleştirerek" Anlamanın Matematiği
Dünya yuvarlaktır, ama elinizdeki harita düzdür ve gayet işe yarar. İşte manifold fikri tam olarak budur: küçük parçaları düz görünen, ama bütünüyle eğri olabilen uzaylar. Modern geometrinin ve fiziğin dili.
MatematikKasa Avantajı: Neden Kumarda Uzun Vadede Kasa Her Zaman Kazanır?
Kumarhaneler şansa dayalı görünür, ama aslında en güvenilir gelir kaynaklarından biridir. Sırrı hilede değil, her oyuna gömülü minik bir matematiksel eşitsizlikte ve büyük sayılar yasasında saklı.