SOLID, yazılım geliştirme süreçlerinde iyi tasarım ilkelerini ifade eden bir kısaltmadır. Bu ilkeler, yazılımın esnek, sürdürülebilir, okunabilir ve kolayca değiştirilebilir olmasını sağlar. Her harf, belirli bir tasarım prensibini temsil eder:
1. S – Single Responsibility Principle (Tek Sorumluluk İlkesi)
- Bir sınıf yalnızca bir tek sorumluluğa sahip olmalıdır.
- Sınıfın yalnızca bir nedenle değişmesi gerekir.
- Örnek: Bir “Fatura” sınıfı, yalnızca fatura ile ilgili işlemleri yapmalı, PDF oluşturma veya veritabanı işlemleri gibi görevler başka sınıflara ayrılmalıdır.
2. O – Open/Closed Principle (Açık/Kapalı İlkesi)
- Yazılım varlıkları genişletmeye açık, ancak değişikliğe kapalı olmalıdır.
- Yeni özellikler eklemek için mevcut kodu değiştirmek yerine, yeni sınıflar veya metotlar oluşturulmalıdır.
- Örnek: Bir ödeme sisteminde yeni bir ödeme yöntemi eklemek için mevcut kodu değiştirmek yerine, mevcut yapıya uygun yeni bir ödeme yöntemi sınıfı eklenir.
3. L – Liskov Substitution Principle (Liskov Yerine Geçme İlkesi)
- Bir alt sınıf, türediği üst sınıfın yerine kullanılabilir olmalıdır.
- Alt sınıf, üst sınıfın davranışlarını bozmaz.
- Örnek: Bir “Kare” sınıfı, bir “Dikdörtgen” sınıfından türediğinde, dikdörtgenin tüm özelliklerini doğru bir şekilde sağlamalıdır.
4. I – Interface Segregation Principle (Arayüz Ayrımı İlkesi)
- Bir sınıf, ihtiyaç duymadığı yöntemlere sahip bir arayüzü implement etmek zorunda bırakılmamalıdır.
- Büyük arayüzler, daha küçük ve özelleşmiş arayüzlere bölünmelidir.
- Örnek: Bir “Uçak” sınıfı hem “Karada Giden” hem de “Havada Giden” gibi geniş bir arayüzü implemente etmek yerine, ayrı ayrı ilgili arayüzleri kullanmalıdır.
5. D – Dependency Inversion Principle (Bağımlılıkların Tersine Çevrilmesi İlkesi)
- Yüksek seviyeli modüller, düşük seviyeli modüllere bağımlı olmamalıdır. Her ikisi de soyutlamalara bağımlı olmalıdır.
- Detaylar, soyutlamalara bağımlı olmalıdır.
- Örnek: Bir “Sipariş İşlem” sınıfı, bir veritabanına doğrudan bağımlı olmamalı, bir “Veritabanı Bağlantı Arayüzü”ne bağımlı olmalıdır.
Bu ilkeler, yazılımın daha modüler, test edilebilir ve yeniden kullanılabilir olmasını sağlar. Özellikle Object-Oriented Programming (OOP) dillerinde sıkça uygulanır.
4o