Open Closed (OCP) Prensibi

open closed prensibi

Bu makalede SOLID prensiplerinin ikinci ayağı olan ve Robert C. Martin’in en önemli prensip olarak kabul ettiği Open Closed prensibi ele alınacaktır. Bir önceki makalede Single Reponsibility Prensibini incelemiştik.

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification. (Yazılımlar gelişime açık, değişime kapalı olmalıdır.)

Robert C. Martin

Bir yazılım projesinin geliştirilme ve destek süreçlerinde müşterilerden iteratif şekilde revizyon talepleri gelmektedir, başta istenen ile sonda istenen çoğunlukla aynı olmayacaktır. İşte tam bu noktada yapılacak değişikliklerin sisteme kolaylıkla ve sorunsuz şekilde bütünlük sağlaması ve sorun çıkartmaması için bu prensibi kullanmalıyız. Açıklamadan sonra bu prensip; yazılımı oluşturan her bir parçanın (sınıf, modül, fonksiyon v.b.) geliştirmelere açık, değişime kapalı olmasını ifade eder.

Bu prensibi uygulamanın en basit yolu mevcut işlevselliği koruyarak, yeni eklenecek işlevlerin türetilmiş (derived) sınıflar aracılığıyla sağlanması olacaktır. Bu prensip uygulanmadığında farklı işlevler tek merkezden yürütülmeye çalışılacağından Single Responsibility Prensibi de çiğnenmiş olacaktır.

Konuyu bir örnekle pekiştirelim. Senaryoya göre bizden bir kargonun gönderim ücretinin ağırlığına ve taşıma durumuna göre hesaplanması istenmektedir. Buna göre konu üzerine hiç düşünmeden aşağıdaki kodu yazdığımızı düşünelim.

Şu anda karayolu, denizyolu ve havayolu ile taşıma yapmaktayız, müşterimiz yarın demiryolu ile de taşımaya başlayınca kodumuzu -prensibi çiğneyerek- değiştirmemiz gerekecek ve if-else merdivenine yeni basamak eklememiz gerekecek. Şimdi yazdığımız bu kodu refoctor ederelim.

İlk olarak sınıfımızı soyutlayarak, tip alanını kaldıralım.

Daha sonra tip alanlarını geliştirme olarak ele alalım.

Kodumuzu refactor ederek değişime kapalı, geliştirmeye açık hale getirdik. Nasıl uygulayacağımızı da ele alıp makaleyi sonlandıralım.

Görüldüğü üzere kodumuz artık gelişime açık, değişime kapalı hale gelmiştir.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.