SOLID Prensipleri Nedir?
SOLID Prensipleri etkili, esnek ve doğru kodlama standartlarının sağlanması için takip edilen prensipler bütününe verilen addır. SOLID temel olarak 5 prensibin oluşturduğu baş harflerden meydana gelir.
Bunlar;
Single-responsibility principle
Open-closed principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
SOLID Prensiplerinin Amacı
- Kodun güncelleme ve düzenlemelere kolayca adapte olması
- Kod değişikliğini en kısa ve kolay seviyeye indirmek
- Temiz kod yazmayı sağlamak
- Karmaşık kodlardan kaçınmak
- Kodu esnek bir şekilde kullanmak
- Yazılan kodu okuyan ve geliştiren her kişi tarafından yeterince anlaşılır kılmak
Single Responsibility Principle
Bu prensibe göre amaç bir sınıfın yalnızca tek bir sorumluluğu olmalıdır. Yazılımınızın içinde birden fazla sorumluluğa sahip bir kısım bulunmamalıdır. Bu prensip, yazılım kodunda her bir sınıfın, modülün veya metodun yalnızca bir sorumluluk yapması gerektiğini savunur.
Görev ve sorumluluk birbiri ile çok karıştırılan iki kavram olduğu için türkay ürkmez hocamın klavyesinden ufak bir dipnot eklemek istiyorum.
Sorumluluk; görevleri tek bir çatı altında toplayan bir kavramdır. Bir öğretmenin sorumluluğu; öğrencilerine konuyu en ideal bir biçimde anlatmak, öğrenme materyallerini hazırlamak ve öğrencinin öğrenme durumunu ölçmek görevlerinin birleşmesi ile oluşur.
Open Closed Principle
Yazılan kodlar ekleme ve geliştirilme için açık ancak köklü değişiklikler için kapalı olmalıdır. Open Closed geniş çapta uygulanabilen ancak değişmeden kalan varlıklar gerektirir. Bu noktada çok biçimlilik (polymorphism) ile özel davranışlara sahip yinelenen varlıklar yaratmamız gerekir.
Liskov Substitution Principle
Bir programdaki nesneler o programın doğruluğunu değiştirmeden alt türlerinin örnekleriyle değiştirilebilir olmalıdır yani her alt sınıf, alt sınıfa özgü tüm yeni davranışlarla birlikte temel sınıftaki tüm davranışları korumalıdır. Alt sınıf, aynı istekleri işleyebilmeli ve üst sınıfıyla aynı görevleri tamamlayabilmelidir
Inteface Segregation Principle
İsteme özel birden fazla arayüz , tek bir genel amaçlı arayüzden daha iyidir. ISP’de sınıfların kullanmadıkları davranışları içermesi istenmez.
ISP Sayesinde;
Daha az kod taşıyan metotlar elde edilir. Kodun ihtiyaç durumunda güncellemesi hızlanır
Davranıştan bir metot sorumlu olduğu için davranışta karşılaşılan problem hızlı bir şekilde çözülür
Dependency Inversion Principle
Sınıf ve doğru özellekliklerin sınıfa eklenmesi açısından en önemli Nesne Yönelimli Programla konularından biriside Abstraction (Soyulama) konusudur.
Yüksek seviyeli modüller, düşük seviyeli modüllere bağlı olmamalıdır. Bunun yerine, her ikisi de abstraction veya interfacelere bağlı olmalıdır.
Abstraction detaylara bağlı olmalıdır tam tersine detaylar soyutlamaya bağlı olmalıdır.
SOLID Prensibleri Özetle;
Single Responsibility: Sınıflar iyi tanımlanmış tek bir sorumluluk almalı.
Open/Closed: Sınıflar değişikliğe kapalı geliştirilmeye açık olmalıdır.
Liskov Substution: Kodumuzda herhangi bir değişiklik yapmaya gerek kalmadan türetilmiş sınıfları ata sınıf yerine kullanabilmeliyiz.
Interface Segregation: Genel kullanım amaçlı tek bir arayüz yerine özelleşmiş birden çok arayüz oluşturma tercih edilmeli.
Dependecy Inversion: Katmanlı mimarilerde üst seviye modüller alt seviyedeki modüllere doğrudan bağımlı olmamalıdır.