Sobes.tech
Junior — Middle

Kas saaksite anda näidet, mis illustreerib Liskovi asenduspõhimõtet objektorienteeritud programmeerimises?

sobes.tech AI

Vastus AI-lt

Liskovi asenduspõhimõte (Liskov Substitution Principle, LSP) ütleb, et alamsüsteemi objektid peaksid olema asendatavad nende superklasside objektidega ilma, et see mõjutaks programmi õigsust.

Näide:

// Superklass
class Bird {
    void fly() {
        System.out.println("Lind lendab");
    }
}

// Õigesti laiendatud alamsüsteem
class Sparrow extends Bird {
    @Override
    void fly() {
        System.out.println("Varblane lendab");
    }
}

// LSP rikkumine
class Ostrich extends Bird {
    @Override
    void fly() {
        throw new UnsupportedOperationException("Struts ei saa lennata");
    }
}

// Kasutamine
void makeBirdFly(Bird bird) {
    bird.fly(); // Oodatakse, et lind lendab
}

// Kui antakse Ostrich, fly() meetod viskab erandi, rikkudes LSP.

LSP järgimiseks on parem jagada hierarhia:

interface Flyable {
    void fly();
}

class Bird {}

class Sparrow extends Bird implements Flyable {
    public void fly() { System.out.println("Varblane lendab"); }
}

class Ostrich extends Bird {
    // Ei rakenda Flyable, kuna ei saa lennata
}

Nii saab alamsüsteemi objekte kasutada ilma ootamatute käitumisteta.