Soru, görüş ve önerileriniz için;

contact@fatih-karakus.com

Liskov's Substitution Prensibi

Liskov's Substitution Prensibi

Yazılım geliştirmede, kodun sürdürülebilirlik, esneklik ve yeniden kullanılabilirlik açısından yüksek kalitede olması önemlidir. Bu noktada SOLID prensipleri büyük bir rol oynamaktadır.

Liskov'un Yerine Koyma Prensibi (LSP), alt sınıfların, temel sınıfların yerine geçebilmesini ve beklenen davranışı aynı şekilde sergilemesini vurgular. Bu prensip, kodun düzgün çalışmasını ve esnekliğini sağlar.

Liskov'un Yerine Koyma Prensibi (LSP), SOLID prensiplerinden biridir ve Barbara Liskov tarafından ortaya konulmuştur. LSP, bir alt sınıfın, temel sınıfın yerine geçebilmesi gerektiğini ve beklenen davranışı aynı şekilde sergilemesi gerektiğini ifade eder. Bu prensip, kodun esnek, sürdürülebilir ve yeniden kullanılabilir olmasını sağlar. LSP'yi uygulayan kodlar, sorunsuz bir şekilde çalışır ve değişikliklere karşı daha dayanıklı hale gelir.

Php üzerinden örneklendirecek olursak, bunu iki farklı yöntem ile kullanabiliriz.

Alt Sınıfların Beklenen Davranışı Sergilemesi

Bu  örnekte, Shape sınıfı temel bir sınıftır ve setArea() ve getArea() metotlarını içerir. Rectangle ve Square sınıfları, Shape sınıfını genişletir ve beklenen davranışı sergilemek için gerekli metotları içerir. printArea() fonksiyonu, Shape sınıfını parametre olarak kabul eder ve calculateArea() metodu çağrılarak alan hesaplanır ve sonuç yazdırılır. Bu sayede, Rectangle ve Square sınıfları, Shape sınıfının yerine geçebilir ve beklenen davranışı sergileyebilir.

class Shape {
    protected $area;

    public function setArea($area) {
        $this->area = $area;
    }

    public function getArea() {
        return $this->area;
    }
}

class Rectangle extends Shape {
    private $width;
    private $height;

    public function setWidth($width) {
        $this->width = $width;
    }

    public function setHeight($height) {
        $this->height = $height;
    }

    public function calculateArea() {
        $this->area = $this->width * $this->height;
    }
}

class Square extends Shape {
    private $side;

    public function setSide($side) {
        $this->side = $side;
    }

    public function calculateArea() {
        $this->area = $this->side * $this->side;
    }
}

function printArea(Shape $shape) {
    $shape->calculateArea();
    echo "Area: " . $shape->getArea();
}

$rectangle = new Rectangle();
$rectangle->setWidth(5);
$rectangle->setHeight(3);
printArea($rectangle); // Çıktı: Area: 15

$square = new Square();
$square->setSide(4);
printArea($square); // Çıktı: Area: 16

Önkoşulların ve Sonuçların Korunması

Bu örnekte, FileManager sınıfı dosya işlemleri için genel bir işlevselliği temsil eder. SecureFileManager sınıfı, FileManager sınıfını genişletir ve openFile() metodu üzerine önkoşullar ekler. Bu durumda, kullanıcının giriş yapmış olması gerekliliği eklenmiştir. Eğer kullanıcı giriş yapmamışsa, bir istisna fırlatılır. Böylece alt sınıf, temel sınıfın yerine geçebilir ve beklenen önkoşulları sağlar.

class FileManager {
    public function openFile($filename) {
        // Dosya açma işlemleri
    }

    public function closeFile($filename) {
        // Dosya kapatma işlemleri
    }
}

class SecureFileManager extends FileManager {
    private $user;

    public function setUser($user) {
        $this->user = $user;
    }

    public function openFile($filename) {
        if (!$this->user->isLoggedIn()) {
            throw new Exception("Kullanıcı giriş yapmadı!");
        }

        parent::openFile($filename);
    }
}

$fileManager = new SecureFileManager();
$fileManager->setUser($loggedInUser);
$fileManager->openFile("example.txt");
$fileManager->closeFile("example.txt");

Sonuç olarak Liskov'un Yerine Koyma Prensibi, alt sınıfların, temel sınıfların yerine geçebilmesini ve beklenen davranışı aynı şekilde sergilemesini vurgular. Bu prensip, kodun sürdürülebilirliğini, esnekliğini ve yeniden kullanılabilirliğini artırır. PHP'nin sunduğu araçlar ve yaklaşımlar sayesinde LSP'yi uygulamak mümkündür. Alt sınıfların beklenen davranışı sergilemesi, önkoşulların ve sonuçların korunması gibi yöntemler, LSP'nin PHP ile nasıl başarıyla uygulanabileceğini göstermektedir. LSP'yi benimseyerek yazılım projelerinizde daha güvenilir ve esnek bir kod tabanı oluşturabilirsiniz.

Umarım yararlı bir yazı olmuştur.