O-Open Closed Principle Nedir

Tuba Saday
What is that  ‘SOLID’?
2 min readOct 14, 2021

Hayatınızda hiç şuramı değiştirebilseydim keşke dediğiniz oldu mu. Mesela saçınızı, göz renginizi, boyunuzu, ten renginizi?

Bu yüzyılda malesef bedenimiz konusunda böyle bir yeteneğimiz yok, ama çok özendiğimiz bu yeteneği kodlarımıza kazandırabiliriz.

OCP’nin kökeni:

Bertrand Meyer 1988 yılında, Object Oriented Software Construction kitabında bu ilkeyi tanımlamıştır. Meyer OCP prensibini abstract classlar aracılığı ile inherit edilerek uygulanması gerektiğini savunmuştur. 1996 yılında ise Meyer’in aksine Robert Martin OCP’nin interfaceler aracılığıyla implementasyon ile uygulanması gerektiğini çünkü inheritance’ın sıkı bağlanma yarattığını savunurak kitabında bahsetmiştir.

Peki nedir bu Open ve Close?

Bir modül içeriği genişlemeye uygun ise (veri yapılarına alanlar veya yeni bir işlev eklemek mümkün ise) açık, ve bu modülü diğer modüller tarafından herhangi bir değişiklik yapmadan kullanabiliyor isek de bu modül kapalıdır. (https://blog.ndepend.com/solid-design-the-open-close-principle-ocp/)

“Yazılım parçaları (sınıflar, modüller, fonksiyonlar, vb.) genişletmeye açık ama değişiklik için kapalı olmalıdır.” — Robert Martin.

Bir Employee sınıfımız olduğunu düşünelim ve bu employee sınıfının içinde work diye bir methodumuz var. İçerisinde bir çeşit iş yapma akışı mevcut. Bu akış bir yazılım mühendisine ait, peki işe bir tester aldık diyelim, bu testerın yapması gerekenleri de bu work methoduna yazmamız gerekecek, daha sonra bir analizci aldık ve yine work metodumuzu değiştirdik. Bu, bu şekilde sürüp gidecek, bir yerden sonra work methodumuza yeni bir sorumluluk kazandıracağımız zaman ya da bir bug’ı fixleyeceğimiz zaman bu kodun nereyi etkileyeceğini asla bilemeyeceğiz ve eskiden work metoduna yaptığımız geliştirmeler 1x zaman alıyor ise zaman geçtikçe bu geliştirme süresi artacak.

OCP nasıl uygulanır:

OCP’yi 3 farklı şekilde uygulanabilir.

Öncelikle kötü kodumuzu bir görelim:

1 — Parametrik Yöntem Çözümü:

2 — Inheritance Çözümü:

3 — Injection Çözümü:

Kötü kod tasarımımızı OCP ye göre düzenlediğimizde gördüğünüz gibi switch case’i ortadan kaldırmış olduk. Artık yeni bir çalışan tipi eklendiğinde Work methodumuzdaki switch case’i düzenlememize gerek kalmayacak (değişikliğe kapalı) ve Employee sınıfı veya IEmployee arayüzü yeni eklenen çalışan tiplerinde herhangi bir bozulmaya neden olmaksızın kullanılabilecek ve eğer isteniliyor ise hala Employee sınıfına veye IEmployee arayüzüne yeni sorumluluklar eklenebilecek(genişlemeye açık).

--

--

Tuba Saday
What is that  ‘SOLID’?

It’s a non stoppable learner and an insane developer.