Sobes.tech
Junior — Middle

Obyekt yönümlü proqramlaşdırmada Liskov-un yerinə qoyma prinsipini nümayiş etdirən nümunə verə bilərsinizmi?

sobes.tech Süni İntellekt

AI-dan cavab

Liskov Əvəzetmə Prinsipi (Liskov Substitution Principle, LSP) deyir ki, alt sinifin obyektləri, proqramın düzgünlüyünü pozmadan, super sinifin obyektləri ilə əvəz edilə bilər.

Misal:

// Super sinif
class Bird {
    void fly() {
        System.out.println("Quş uçur");
    }
}

// Doğru şəkildə genişləndirilmiş alt sinif
class Sparrow extends Bird {
    @Override
    void fly() {
        System.out.println("Qorquş uçur");
    }
}

// LSP pozuntusu
class Ostrich extends Bird {
    @Override
    void fly() {
        throw new UnsupportedOperationException("Əjdaha uça bilmir");
    }
}

// İstifadə
void makeBirdFly(Bird bird) {
    bird.fly(); // Gözlənilir ki, quş uça bilər
}

// Əgər Ostrich verilsə, fly() metodu istisna atacaq və LSP pozulacaq.

LSP-ə riayət etmək üçün, hierarxiyanı bölmək daha yaxşıdır:

interface Flyable {
    void fly();
}

class Bird {}

class Sparrow extends Bird implements Flyable {
    public void fly() { System.out.println("Qorquş uçur"); }
}

class Ostrich extends Bird {
    // Flyable-i tətbiq etmir, çünki uça bilmir
}

Beləliklə, alt sinif obyektləri gözlənilməz davranışlar olmadan istifadə edilə bilər.