Süleyman Ariş
2 min readMar 27, 2024

Open-Closed Principle (OCP), SOLID’in ikinci prensibidir. Bertrand Meyer’e göre “ Yazılım varlıkları (sınıflar, modüller, işlevler vb.) genişletilmeye açık, değiştirilmeye kapatılmalıdır ”. Robert C. Martin bu prensibi nesne yönelimli tasarımın en önemli prensibi olarak değerlendirdi .

Open/Closed Prensibi Nedir?

Open/Closed prensibi, yazılım bileşenlerinin değişikliklere kapalı, ancak yeni davranışları eklemeye açık olması gerektiğini belirtir. Bu prensip, varolan kodu değiştirmek yerine, yeni gereksinimleri karşılamak için kodu genişletebileceğimiz anlamına gelir. Bu sayede, mevcut kodun işlevselliğini bozmadan yeni davranışlar ekleyebiliriz.

Günlük Hayattan Örnek

Bir kıyafet dolabını düşünelim. Kıyafet dolabı, farklı giysileri depolamak için kullanılır ve giysileri düzenli tutmak için çeşitli bölmelere sahiptir.

Diyelim ki kıyafet dolabınızı düzenlemek istiyorsunuz ve her tür giysi için ayrı bir bölme oluşturmak istiyorsunuz. Başlangıçta sadece tişörtler ve pantolonlarınız için bölmeleriniz var.

İşte Open-Closed prensibini uygulamak için bu senaryoda nasıl ilerleyebilirsiniz:

Açık (Open) Yönü: Kıyafet dolabınızın genel yapısı değişmeye açık olmalıdır. Yani, yeni bir bölme eklemek veya var olan bir bölümü değiştirmek istediğinizde dolabın kendisini değiştirmeniz gerekmez. Dolap, gelişime ve değişime hazır olmalıdır.

Kapalı (Closed) Yönü: Mevcut dolabın bütünlüğünü bozmamalı ve sıfırdan yapmamalı.

Örneğin, bir gün kıyafet koleksiyonunuz büyüdü ve artık tişörtler, pantolonlar ve ceketler için ayrı bölmelere ihtiyacınız var. Open-Closed prensibini uygularsanız, mevcut bölümleri değiştirmek zorunda kalmazsınız. Sadece yeni bir bölme ekleyebilirsiniz (örneğin, “Ceketler” bölmesi) ve bu şekilde dolabınızı genişletebilirsiniz. Bu şekilde, mevcut düzeni bozmadan dolabınızı yeni kıyafetlerle genişletebilirsiniz. Bu, dolabınızın değişime açık (open) ancak mevcut düzeni koruyarak değişime kapalı (closed) olduğunu gösterir.

Örnek Bir Senaryo

Bir araba simülasyonu yazıyorsunuz ve farklı araba türlerinin farklı ivmelenme davranışlarına sahip olmasını istiyorsunuz. İlk başta, SportsCar ve OffroadVehicle adında iki araba türü tanımlıyorsunuz.

Open/Closed Prensibi Uygun Olmayan Kod:

Yukarıdaki kodda, iki araba türü için ayrı bir sınıf tanımlanmış ve her sınıf kendi ivmelenme davranışını içermektedir. Ancak, yeni bir araba türü eklemek istediğimizde, var olan kodu değiştirmemiz gerekecek, bu da prensibe aykırıdır.

Bu yapı, yeni bir araba türü eklemek istediğinizde, sadece ICar arayüzünü uygulamanız ve yeni araba türünün özel davranışını tanımlamanız gerektiği için “Open/Closed” prensibine uygundur. Mevcut kodda herhangi bir değişiklik yapmanıza gerek yoktur, sadece yeni sınıfı eklersiniz ve arayüzü uygularsınız. Bu, mevcut kodunuzu değiştirmeden genişletebilmenizi sağlar.

Sonuç

Open/Closed prensibi, yazılım geliştirme sürecinde kodun esnekliğini ve sürdürülebilirliğini artıran önemli bir prensiptir. Kodunuzu bu prensibe uygun bir şekilde tasarlayarak, gelecekteki değişikliklere daha kolay uyum sağlayabilir ve kod kalitenizi artırabilirsiniz. kolay uyum sağlayabilir ve kod kalitenizi artırabilirsiniz.