Open Closed (OCP) Prensibi

open-closed-principle

Bu makalede SOLID prensiplerinin ikinci ayağı olan ve Robert C. Martin’in en önemli prensip olarak kabul ettiği Açık Kapalı Prensibini ele alacağız. Bir önceki makalede Single Reponsibility Prensibini incelemiştik.

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 göre taşıma durumlara göre hesaplanması istenmekte, 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.

You may also like...

Bir cevap yazın

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