Solid Prensipleri
Yazılım tasarımlarını daha anlaşılır yapmayı amaçlar. Yazılımın bakımını kolaylaştırır ve genişletilmesini daha kolay hale getirir. 5 Prensibi vardır bu prensipler:
- Single Responsibility principle(SRP)
- Open/Closed principle(OCP)
- Liskov substitution principle(LSP)
- Interface segregation principle(ISP)
- Dependency inversion principle(DIP)
Single Responsibility Principle (SRP)
Her sınıfın tek sorumluluğu olmalı.
Tekli sorumluluk ilkesi, bu ilke de her bir metod veya class’ın tek bir sorumluluğu olmalıdır. Bir method veya sınıf birden fazla görevi üstlenmesi SRP ye karşı bir durumdur. Buradaki amaç her method veya class’ın tek bir görev üstlenerek tekil hale gelmesidir. Eğer birden fazla görev üstlenirse bu şekilde yazılan kodların anlaşılması ve tekrar kullanılabilmesi imkansız hale gelir.
Open Closed Principle (OCP)
Gelişimi açık değişime kapalı.
Bir metot veya sınıfın yeni davranışlar eklenmesine açık ancak temel yapısındaki değişikliklere kapalı olmasını, var olan yapının bozulmamasını gerektiren prensiptir. Open yeni geliştirmelere açık olması, Closed değiştirmeye kapalı olması anlamına gelir. Bu prensibin amacı geliştirilmiş yapıyı bozmadan istediğimiz şekilde yeni eklemeler yaparak sürekli yenilenmeye elverişli kodlar yazabilmektir.
Örnek olarak bu prensibi sağlayabilmek için OOP prensiplerini kullanıp birden fazla sınıf için ortak olan metotları abstract sınıf veya interface tanımlayarak diğer sınıflardaki metotları override edebiliriz. Bu şekilde yeni geliştirmelere açık hale getirmiş oluruz.
Aşağıdaki örnekte setPaymentType() her sınıf için kendine özgü çalışmaktadır. Yeni bir ödeme tipini kodda bir değişiklik yapmadan ekleyebileceğiz.
Liskov Substitution Principle (LSP)
Alt class’ta olmayan özellik üst class’ta da olmamalı.
Bir class başka bir class tan miras alıyorsa, bu alınan class’ın tüm özelliklerini kullanabilmeli. Bir class ta bulunan özellikler, kendisinden kalıtım alan class’ta kullanılmalı, kullanılmayacaksa bu durum LSP’ye aykırı bir durumdur.
Interface Segregation Principle (ISP)
Her interface’in tek sorumluluğu olmalı.
Interface ayrım prensibi, bu prensipte her interface in belirli bir amacı olmadı. Interface ler tek bir metoodu kapsamamalı, herbiri ayrı metod gruplarına hizmet vermeli.
Dependency Invasion Principle (DIP)
Alt seviye method ve sınıflar sıklıkla değişip geliştiği için üst seviyenin minimum seviyede hatta etkilenmemesi gerektiği ile ilgili prensiptir.
Bağımlılıkları tersine çevirme prensibi, bu prensipte High Level classların Low Level class lara olan bağımlılığını tersine çevirerek, Low Level class ları High Level class lara bağımlı hale getireceğiz. Bu ilişki abstraction veya interface kullanarak sağlanmalıdır. Abstraction detaylara bağlı olmamalıdır, tam tersi detaylar abstraction lara bağlı olmalıdır.
Bu yazımda bir çok web sitesinden faydalandım bunlar;