Open/Closed Prensibi

Herkese merhaba, C# yazılarımıza kaldığımız yerden devam ediyoruz. Bu yazımızda SOLID Prensiplerinden biri olan Open/Closed Prensibi’ni anlatacağım. Hadi başlayalım !
Table of Contents
Yazıyı C# kategorisinde yazdım fakat aslında Open/Closed Prensibi, C# diline özgü bir şey değil. Dünya genelinde kod yazımında bir standart oluşturmak için oluşturulmuş yazılı olmayan kurallar diyebileceğimiz SOLID Prensipleri’nden bir tanesi. Yani sadece C# dilinde değil; Python, Java, Visual Basic gibi nesne tabanlı olan tüm programlama dillerinde Open/Closed Prensibi’ni uygulayabilirsiniz.
Open/Closed Prensibi (OCP) nedir?
Open/Closed Prensibi (Açık/Kapalı İlke) yazılım geliştirme dünyasında sıklıkla kullanılan SOLID prensiplerinden biridir. Bu prensibe göre, bir yazılım bileşeni (class, method, modül vb.) değişime kapalı (closed) olmalı ancak uzantıya açık (open) olmalıdır.
Bu ilke, bir yazılım bileşeninin işlevselliğini değiştirmek yerine, var olan işlevselliğini genişletmek için yeni özellikler eklemeye olanak tanır. Yani, mevcut bir bileşeni değiştirmeden yeni bir özellik ekleyebilirsiniz.
Örneğin, bir ödeme işlemi sınıfı düşünelim. Bu sınıf, farklı ödeme yöntemlerini desteklemek üzere tasarlanmıştır. Şu an için, sadece kredi kartı ödemelerini desteklediğimizi varsayalım. Ancak ileride, başka ödeme yöntemleri eklemek isteyebiliriz. Open/Closed Prensibi’ne göre, mevcut kodu değiştirmeden yeni bir ödeme yöntemi eklememiz gerekiyor.
Bu amaçla, ödeme işlemi sınıfını genişletmek yerine, yeni bir ödeme işlemi sınıfı oluşturabiliriz. Bu yeni sınıf, ödeme işleminin temel özelliklerini miras alırken, yeni ödeme yöntemlerini desteklemek için gerekli işlevleri ekler.
Örneğin;
public abstract class PaymentProcessor
{
public abstract void ProcessPayment();
}
public class CreditCardPaymentProcessor : PaymentProcessor
{
public override void ProcessPayment()
{
// kredi kartı ödeme işlemleri
}
}
public class PayPalPaymentProcessor : PaymentProcessor
{
public override void ProcessPayment()
{
// PayPal ödeme işlemleri
}
}
Bu örnekte, PaymentProcessor adlı bir soyut sınıf tanımlıyoruz. Bu sınıf, temel ödeme işlemi işlevselliğini içerir. Daha sonra, CreditCardPaymentProcessor adlı bir sınıf tanımlıyoruz. Bu sınıf, PaymentProcessor sınıfından kalıtım alır ve kredi kartı ödeme işlemlerini işlemek için gerekli kodu ekler. Son olarak, PayPalPaymentProcessor adlı bir sınıf daha tanımlıyoruz. Bu sınıf da PaymentProcessor sınıfından kalıtım alır ve PayPal ödeme işlemlerini işlemek için gerekli kodu ekler.
Bu şekilde, yeni bir ödeme yöntemi eklemek istediğimizde, sadece PaymentProcessor sınıfından kalıtım alan bir sınıf oluşturarak yeni ödeme yöntemini desteklemiş oluyoruz. Böylece, mevcut kodu değiştirmemize gerek kalmadan, yeni bir özellik ekleyebiliriz.
Open/Closed Prensibi neden önemlidir?
Open/Closed Prensibi’nin temel amacı, yazılım bileşenlerinin esnekliğini artırmak ve bakım maliyetini azaltmaktır. Bu prensip, yazılım bileşenlerinin uzun süreli bakımını kolaylaştırır ve geliştirme sürecini hızlandırır. Ayrıca, yazılım bileşenlerinin yeniden kullanılabilirliğini artırır ve daha iyi bir kod kalitesi sağlar. Aynı zamanda, yazılım bileşenlerinin diğer bileşenlerle olan bağımlılığını azaltır ve sınıflar arasındaki bağımlılıkları en aza indirir. Bu da, yazılım bileşenlerinin daha az kırılgan olmasını sağlar ve değişikliklerin sistemdeki diğer bileşenlere olan etkisini azaltır.
Sonuç olarak, Open/Closed Prensibi, yazılım geliştirme sürecindeki bakım maliyetlerini azaltırken, kod kalitesini ve esnekliği artırır. Bu prensibi uygulamak, daha sağlam ve uzun ömürlü yazılım bileşenleri oluşturmaya yardımcı olur.
Evet Open/Closed Prensibi’nin mantığı ve uygulanışı bu şekilde olmakta. Tüm C# yazılarımıza buraya, SOLID prensipleri yazılarımıza ise buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.