SOLID Prensipleri

SOLID prensipleri, nesne tabanlı programlamada (OOP) ve tasarım mimarisinde kullanılan 5 tane prensiptir. Bu prensiplerin baş harfleri ile SOLID tanımı oluşmuştur. Kodun kolay anlaşılmasını sağlar. Bu prensipler ile loosely coupled (az bağımlı), reusability (yeniden kullanılabilinir) ve extendable (geliştirilebilir) mimari oluşturmamızı sağlar. Yazdığımız proje her zaman aynı kalmamaktadır. Projenin gelişime açık olması önemlidir. SOLID prensiplerine uygun yazılım projesi geliştirirsek projelerimiz her zaman esnek olur. Projenin kod bakımından ağırlaşmasının önüne geçer.

Bu prensipler bir hedef olarak düşünülebilir. Yaptığımız projeyi bu prensiplere mümkün olduğunca bağlı kalarak yazmaya çalışmalıyız.Aşağıda gösterilen resimde bu 5 prensip gösterilmektedir. Bunları kısaca anlatmayı düşünüyorum. Daha sonrasında her prensip ile ilgili örnekleri barındıran linkleri yazıya ilave edeceğim.

solid

  •   Single Responsibility Principle = Yaptığımız tasarım sade ve anlaşılır olmalıdır. Her sınıfın sadece tek bir görevi olmalı ve sadece o görevden sorumlu olmalıdır. Eğer bir sınıf için birçok görev tanımı yaparsak, ileride yapmak istediğimiz değişiklikler olunca işimiz zorlaşacaktır. SRP örnek

srp

 

  •  Open-Closed Principle = Bu prensip tanımına göre, tasarımımız gelişime açık değişime kapalı olmalıdır. Yarattığımız modüllerde kalıcı büyük değişiklikler yapmaktan ziyade hata düzeltme gibi kontrollü işlemler yapmalıyız. Büyük çaplı değişiklikler yapmak istediğimiz zaman mevcut kodda değilde o değişimi farklı bir modül üzerinden yapabiliriz. SRP ve OCP prensiplerini birbirlerinin tamamlayıcısı olarak görebiliriz. Her zaman bu değişimleri abstract sınıf veya interface sınıf kullanarak yapmalıyız. OCP örnek

openclosedprinciple

 

  • Liskov Substitution Principle = Liskov yerine geçme prensibi olarak adlandırılır. Bu prensibe göre alt sınıflardan oluşturulan nesnelerin, üst sınıfların nesneleriyle yer değiştirdiklerinde aynı davranışı göstermek zorundadır. Child sınıflar, base sınıfların tüm özelliklerini kullanmak zorundadır. Bu örnekte kapsamlı olarak anlatılmaktadır.

image

  • Interface Segregation Principle = Interface (Arayüz) ayırım prensibi olarak adlandırılır. Kullandığımız arayüze gereğinden fazla özellik eklersek, oluşturduğumuz modüller bunların hepsini kullanmaya ihtiyaç duymayabilir. Bazı özelliklere ihtiyaç duymayan modüller bu özellikleri gereksiz olarak eklersek kullanışsız bir tasarım olacaktır. Interface yapısında her modülün kullanmadığı özellikler bulunuyorsa yapmamız gereken oluşturduğumuz interface yapısını bölmektir. ISP örnek

oop-principles-14-638

 

  • Dependency Inversion Principle = Bağımlılığı tersine çevirme prensibidir. Üst seviye modüller alt seviyeli modüllere bağımlı olmamalıdır. Alt sınıflarda yapılan değişimler üst sınıfları etkilememelidir. Her iki seviyeli modülde soyutlamalara bağlı olmalıdır. Ayrıca soyutlamalar fazlaca detaya boğulmamalıdır. Üst seviyeli modüller, alt seviyeli modüller ile abstract yapılar veya interface yapıları ile ilişki kurmalıdır. DIP örnek.

 

 

Kaynaklar

Design principles , Overview of SOLID Principles in C# , Wikipedia , SOLID–Adım Adım Tanımak (video anlatım),

Dependency kavramı ile ilgili detaylı bir yazı

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s