S.O.L.I.D. Prensipleri Nelerdir?

Appcent Akademi
Appcent
Published in
3 min readOct 12, 2021

Bu yazıda size her yazılımcının bilmesi gereken S.O.L.I.D. Yazılım Prensipleri’nden kısaca bahsettik.

Robert C. Martin tarafından 2000 yılında öne sürülen prensipler bütününe SOLID Prensipleri adı verilir. S.O.L.I.D. beş temel yazılım mimarisi tasarım ilkelerini temsil eden bir kısaltmadır. Bu beş prensip nesne yönelimli yazılım geliştirmede kullanılan ve oldukça popüler olan yazılım ilkeleridir.

S.O.L.I.D. Yazılım Prensipleri; geliştirilen yazılımın yeniden kullanılabilir, esnek, anlaşılır ve sürdürülebilir olmasını sağlayan ve kod tekrarını önleyen prensipler bütünüdür. Bu prensiplerin temel amaçları:

  • Kodda herhangi bir değişikliğe gerek kalmadan yeni özellikler ekleyebilmek,
  • Zamanla ihtiyaç duyulabilecek yazılım değişiklikleri için yeniden düzenleme kolaylığı sağlamak,
  • Kodda yeniden yazma ve düzeltme gibi oldukça zaman kaybettiren süreçleri minimuma indirmek,
  • Yazılımınızın gelecekteki gelişmelere daha kolay uyum sağlamasını başarmak,
  • Hata ayıklama sürecini kısaltmak,
  • Kodun nispeten daha kolay okunup anlaşılmasını sağlamaktır.

1. Single Responsibility Principle

Bu prensibe göre, bir class yani sınıf tek bir sorumluluk almalıdır. Yazılımcılar bazen yoğun oldukları ve uğraşmak istemedikleri için tüm metotları aynı sınıfın içine doldurabiliyorlar. Temiz bir kod yazmak için her class veya metot tek bir sorumluluğa sahip olmalıdır. Her sınıfın değişmek için birer sebebi olmalıdır. Böylece yazılan kodların anlaşılabilmesi ve tekrar kullanılabilmesi mümkün olur.

2. Open Closed Principle

Açık Kapalı İlkesi’ne göre bir sınıf veya fonksiyon var olan tüm özelliklerini korumalı ve değişikliğe izin vermemelidir. Aynı zamanda davranışını değiştirmiyor olmalı ve yeni özellikler kazanabiliyor olmalıdır. Başka bir deyişle, bu prensip sınıfların genişletilmeye açık ve değişikliğe kapalı olmasını gerektirir.

Değişiklik, mevcut bir sınıfın kodunu değiştirmek anlamına gelirken genişletme, yeni işlevler eklemek anlamına gelmektedir. Bu ilkeye göre, sınıf için mevcut koda dokunmadan yeni işlevler ekleyebilmeliyiz çünkü mevcut koda yaptığımız her değişiklik hatalar oluşturma potansiyelini arttırır. “Sınıfa dokunmadan nasıl yeni işlevler ekleyeceğim?” diye sorabilirsiniz. Bu işlem genellikle arayüzler (interfaces) ve soyut sınıflar (abstract classes) yardımıyla yapılır.

3. Liskov Substitution Principle

S.O.L.I.D.’in üçüncü prensibine göre kod üzerinde herhangi bir değişiklik yapmaya gerek kalmadan alt sınıflar, üst sınıflar yerine kullanılabilmelidir. Başka bir deyişle, türetilen sınıflar, türeyen sınıfların tüm özelliklerini kullanmak zorundadır çünkü kullanmadığı durumda ortaya işlevsiz kodlar çıkacaktır. Böyle bir durum karşısında üst sınıfta if else blokları kullanarak tip kontrolü yapmamız gerekecektir.

4. Interface Segregation Principle

Bu prensibe göre sorumlulukların hepsini tek bir arayüze toplamaktansa özelleştirilmiş daha fazla arayüz oluşturmak gerekmektedir çünkü istemcilerin kullanmadıkları arayüzleri uygulamaya zorlamaması gerekir. Yani, bir arayüze gereğinden fazla kullanılmayacak özellik eklenmemelidir. Kullanılabilecek özellikler, metotlar eklenerek kullanılmalıdır. Her bir arayüzün belirli bir amacı olmalıdır. Birden fazla iş yapan arayüzlerden türetilen sınıflar tüm metotları kullanmak zorunda kalır. Bu durumun önüne geçmek için arayüzler daha küçük iş birimlerine ayrılmalıdır.

5. Dependency Inversion Principle

Çoğu zaman, karmaşık görevleri gerçekleştiren üst sınıfların, basit işlemler gerçekleştiren alt sınıflara bağımlılıkları vardır. Bu ilke, bu bağımlılıkları tersine çevirmeniz için hem üst hem de alt sınıfları soyut kavramlara bağımlı hale getirmenizi önerir. Yani, bir sınıf diğer sınıfa doğrudan bağımlı olmamalıdır. Aralarındaki bağ interface veya abstract class gibi ekstra bir katman üzerinden sağlanmalıdır. Bu ilke sayesinde üst sınıfları yeniden kullanmanız daha kolay hale gelir. Kod önemli ölçüde esnek olur. Böylece test edilmesi ve bakımı kolay hale gelir. Ayrıca ikinci ilkede belirtildiği gibi mevcut kodu bozmadan yeni işlevler ekleyebilirsiniz.

Bizi LinkedIn, Instagram, Twitter ve Kommunity sosyal medya hesaplarımızdan takip edebilirsiniz.

--

--

Appcent Akademi
Appcent
Writer for

Teknoloji ve dijitalleşen dünya ile ilgili bilgi ve deneyimlerimizi paylaşıyoruz