OCP (Open/Closed Principle) Nedir?


Açık/Kapalı Prensibi, SOLID prensiplerinden biridir.

Tanım: “Bir yazılım bileşeni (sınıf, modül, fonksiyon), geliştirmeye açıkdeğişikliğe kapalı olmalıdır.”


Ne Demek Bu?

Yani mevcut bir sınıfın içini değiştirmeden, yeni özellikler ekleyebilmeliyiz.


(Kötü Örnek)

Yeni bir ödeme yöntemi eklemek istiyorsak sınıfın içine yine elseif eklememiz gerekir 

→ bu değişiklik demektir.


<?php
//Payment.php
class Payment {
public function pay($type) {
if ($type == 'credit') {
echo "Kredi kartı ile ödeme yapıldı";
} elseif ($type == 'paypal') {
echo "PayPal ile ödeme yapıldı";
}
}
}


Doğru OCP Kullanımı (PHP ile)

Adım 1: Önce bir Interface tanımlayalım:


<?php
interface PaymentMethod {
public function pay();
}


Adım 2: Her ödeme tipi kendi sınıfı içinde olsun:


<?php
class CreditCardPayment implements PaymentMethod {
public function pay() {
echo "Kredi kartı ile ödeme yapıldı";
}
}

class PaypalPayment implements PaymentMethod {
public function pay() {
echo "PayPal ile ödeme yapıldı";
}
}


Adım 3: Ana sınıf artık dışarıdan hangi strateji verilirse onu çalıştırır:


<?php
class PaymentProcessor {
private $paymentMethod;

public function __construct(PaymentMethod $method) {
$this->paymentMethod = $method;
}

public function process() {
$this->paymentMethod->pay();
}
}


Kullanım:


<?php
$payment = new PaymentProcessor(new PaypalPayment());
$payment->process(); // PayPal ile ödeme yapıldı

$payment = new PaymentProcessor(new CreditCardPayment());
$payment->process(); // Kredi kartı ile ödeme yapıldı

Nerelerde Kullanılır?

  • Laravel’de ödeme sistemleri, bildirim sistemleri (Mail/SMS/Slack)

  • E-ticaret sistemlerinde kampanya/indirim algoritmaları

  • Oyun geliştirmede puanlama/ödül sistemleri

  • Çok katmanlı yazılımlarda strateji/desen uygulamalarında


Avantajları:

  • Sınıflarınız daha sade olur.

  • Kod tekrarını azaltır.

  • Test yazmak kolaylaşır.

  • Yeni ihtiyaçlar için eski kodu bozmadan genişletebilirsiniz.


Özet:

  • Kodunuzu yazarken şunu sorun:
    "Bu sınıfa dokunmadan, yeni bir davranış nasıl eklerim?"

  • İşte bu düşünce sizi OCP’ye yaklaştırır



Related Posts

OCP (Open/Closed Principle) Nedir?
4/ 5
Oleh