Tasarım Prensipleri

@ 29 Eylül 2009 tarihinde yazdı. Yazıya yorum yazın.

tasarim-prensipleri-solid

Design Principles kavramı, kötü tasarımdan uzak durmak için belirlenmiş belli kurallardan oluşan bir kurallar zinciridir.

Principles of Class Design kavramı ise sınıflar üzerinde ki modellemede uymamız gereken prensipleri belirlemiştir. Bunun dışında ayrıca paketlerin nasıl tasarlanması gerektiğini belirten prensipler de vardır. Biz bu yazı dizimizde sınıflar için belirlenmiş prensipleri tanıyacağız.

Sınıflar için uyulması gereken bu prensipler, kötü tasarıma neden olabilecek 3 ana unsuru ortadan kaldırmak amacıyla geliştirilmiştir. Peki nedir bu unsurlar ? Robert Martin bunları şöyle sıralamıştır;

Rigidity (Esnemezlik) : Kullanılan tasarımın esnek olmadığını gösterir. Yani kullanılan tasarımın geliştirmeye ve plug-in mimarisine uygun olmadığını gösterir.

Fragility (Kırılganlık) : Sistemin bir yerinde yaptığınız bir değişikliğin, sistemin bir başka yerinde sorun çıkarmasıdır.

Immobility (Sabitlik) : Geliştirdiğiniz bir modülün tekrar kullanılabilir olmadığını gösterir.

Bu 3 ana unsurun aslında ortak bir paydada buluştuğunu ve buna çözüm bulmak için prensipler geliştirildiğini söyleyebiliriz. Şöyle ki; bu durumların her birinin ortaya çıktığı nokta bağımlılık seviyesi yüksek sınıflarda görülür. Sınıf tasarımları eğer birbirlerine sıkı sıkıya bağlı ise, bu tasarım ne esnek, ne sağlam ne de taşınabilir olur. Buradan şunu söyleyebiliriz ki tüm prensiplerin çözüm ararken yapmaya çalıştığı şey, mümkün olduğu kadar sınıfların birbirlerine olan bağımlılıklarını azaltmaktır. Bunların nasıl yapılacağını yazı dizimizin sonraki bölümlerinde tek tek göreceğiz zaten. Fakat bundan önce şimdi dilerseniz bu sorunları ortadan kaldırmak için uymamız gereken prensiplere çok kısa bir şekilde bakalım.

Single Responsibility Principle : Her modülün bir tek sorumluluğa sahip olmasını ve ilerde olası bir değişiklikğin de tek bir nedene dayandırılması gerektiğini belirtir.

Open/Closed Principle : Genişlemelere açık, modifikasyonlara kapalı bir tasarım kullanılması gerektiğini belirtir.

Liskov ‘s Substitution Principle : Türeyen sınıfın üyeleri, temel sınıfın üyeleri ile tamamen yer değiştirebilir olmalıdır.

Interface Segregation Principle : Interface’ lerin mümkün olduğu kadar birbirlerinden ayrıştırılması gerektiğini belirtir.

Dependency Inversion Principle : Yüksek seviye sınıfların, düşük seviye sınıflara direkt olarak bağımlı olmaması gerektiğini belirtir. Bunu da araya bir abstract sınıf veya Interface koyarak yaparız.

Kaynak : http://www.oodesign.com

Mehmet Aydın Ünlü
aydinunlu85@gmail.com
http://www.aydinunlu.blogspot.com