Open/Closed Principle



Open/Closed Principle

Yazdığımız class  veya yazılım içinde bulunan varlıkların geliştirmeye açık değişime kapalı olmasıdır.

Bu prensip için en çok kullanılan ve internet üzerinde en çok bulunan örnek ile anlatacağım. Bu prensibi en iyi anlatan örneklerden biri olduğunu düşünüyorum.

Elimizde Rectangle adında bir class olduğunu düşünelim ve bu class width ve height adında iki tane property alsın. Birde elimizde AreaCalculator adında bir class olsun ve bu class içinde Area diye bir metot olduğunu düşünelim ve parametre olarak Rectangle dizisi alsın ve çevresini hesaplasın.


Gün geldi ve müşterimiz bizden Circle için bir hesaplama istedi. Hemen metoda geri dönüp parametremizi Rectangle tipinde değilde object tipinde bir dizi almasını sağlıyoruz ve kod bloğu içinde basit bir if else ile object içinden gelen type ile karşılaştırma yaparak işlemi hallediyoruz.



Ardından müşteri birde Triangle alanı istedi. Tekrar gidip kodu düzenledik ama kodumuzu sürekli değiştirmek zorunda kaldık. Bu durumda prensibe uymuyoruz hemde kendimize ekstra iş çıkarıyoruz.

Peki çözüm ne? Hemen kodumuzu bu prensibe göre düzenleyelim.

Öncelikle Shape adında bir abstract class oluşturalım ve içine area hesaplayan abstract bir metot oluşturalım. Artık bu class ile oluşturacağımız şekli soyutlayıp istediğimiz tipte türetebileceğiz. Bu şekilde kodumuzu gelişime açık, değişime kapalı hale getireceğiz.

Yorumlar