18 Şubat 2015 Çarşamba

SOLID Prensipleri (SOLID Principles)

OOP(Object Oriented Programming) Gerçek anlamda Nesne yönelimli programlama yapabilmek için SOLİD prensiplerine uygun olarak projemizi geliştirmemiz gerekmektedir.  Eğer bu prensiplere uygun olarak projemizi geliştiriyorsak gerçek manada nesne yönelimli programlama yapıyoruz diyebiliriz. Esnemezlik Kırılganlık ve Sabitlik sorunlarının çözümü için ortaya çıkmıştır.
Esnemezlik: Kullanilan tasarımın geliştirilememesi ve eklemelerin yapılamıyor olmasi
Kırılganlık: Projemizin bir modülünde yaptığımız değişiklik diğer modüllerde hatalara yol acması
Sabitlik: Yazılan modülün farklı yerlerde tekrardan kullanılamamasıdır.

1.S   - Single Responsibility Principle
2.O  -Open/Closed Principle
3.L   -Liskov’s Subsitution Principle
4.I    -Interface Segregation Principle
5.D   -Dependency Inversion Principle

Şimdi her bir prensibin ne anlama geldiğini açıklayalım.
1.       Single Responsibility Principle
Her modülün(method,nesne..) tek bir görevi ve tek bir sorumluluğu olma zorunluluğudur. Yani her bir nesne proje içerisinde bir görev almalıdır. Sadece o görev değişikliği sırasında nesnemizi değiştirmeliyiz eğer başka bir nedenden dolayıda bir değişiklik yapıyorsak bizim birinci kuralımıza uymayan bir kullanım söz konusudur diyebiliriz.

2.       Open/Closed Principle
Projemizde kullandiğimiz modüllerimizin değişime kapalı fakat gelişime açık olmalıdır. Örneğin projemizin ikinci bir sürümünü yapıyoruz ve bizden bir modülde ek bir kaç özellik daha eklememizi istediler. İşte bu durumda biz modülümüzün sadece belli bir kısmına dokunur ve onu geliştirebildiysek O/C prensibine uygun davranmiş oluruz. Fakat biz bu eklemeyi modülde çoğu yerde değişiklik yaparak yapıyorsak projemiz O/C prensibine uygun değildir diyebiliriz.

3.       Liskov’s Subsitution Principle
Solid prensiplerinin içerisinde daha karmaşık olarak gorunen iki prensipten biridir. Amacımız turettiğimiz nesnelerimizin tum alt sınıf örnekleri aynı davranisi göstermesidir.Diğer bir deyişle türüyen sınıfın nesneleri temel sınıfın nesneleri ile yer değiştirebiliyor olmasıdır.

4.       Interface Segregation Principle
Solid prensipleri içerisinde karmaşık olarak görülen diğer prensiptir.
Gokhan hocamizin dediği gibi: “ ilgili bağımlı nesnelerin örneklenmesi görevi ayrık bir bileşene(Component) veya Framework’e verilir. Bu sayede bağımlı nesnelerin üretilip controller’a  enjekte edilmesi sağlanır.” Yani benzer özellikleri olan sınıfları bir interface altında topladıktan sonra bu sınıflardan bazılarını kesin olarak kullanmıyorsak bu yanlış kullanım şeklidir. Kesin olarak kullanmıyorsak biz bunlarıda kesin olan en küçük parcacıklara ayrıştırmalıyız.

5.        Dependency Inversion Principle
Somut sınıflarımıza olan bağımlılıklarımızı soyut sınıflar kullanarak aradaki bağı kırmamızdır. Diğer bir deyişle yüksek seviyeli sınıflar düşük seviyeli sınıflara direkt olarak bağımlı olmamalıdır. Bağımlılığı kırmak için arada soyut sınıflara bağlamamız gerekir.

Kaynaklar:  
                                                                                                              
                                                                                      Şahin YARAL





Hiç yorum yok:

Yorum Gönder