Sobes.tech
Junior — Middle

Vai jūs varat sniegt piemēru, kas ilustrē Liskova aizvietošanas principu objektorientētajā programmēšanā?

sobes.tech AI

Atbilde no AI

Liskovo podvietības princips (Liskov Substitution Principle, LSP) nosaka, ka apakšklases objektiem jābūt aizvietojamiem ar virsklases objektiem, nemainot programmas pareizību.

Piemērs:

// Virsklase
class Bird {
    void fly() {
        System.out.println("Putns lido");
    }
}

// Pareizi paplašināta apakšklase
class Sparrow extends Bird {
    @Override
    void fly() {
        System.out.println("Vārna lido");
    }
}

// LSP pārkāpums
class Ostrich extends Bird {
    @Override
    void fly() {
        throw new UnsupportedOperationException("Ostrich nevar lidot");
    }
}

// Izmantošana
void makeBirdFly(Bird bird) {
    bird.fly(); // Sagaidāms, ka putns lidos
}

// Ja tiek nodots Ostrich, fly() metode izmet izņēmumu, pārkāpjot LSP.

Lai ievērotu LSP, ir labāk sadalīt hierarhiju:

interface Flyable {
    void fly();
}

class Bird {}

class Sparrow extends Bird implements Flyable {
    public void fly() { System.out.println("Vārna lido"); }
}

class Ostrich extends Bird {
    // Neīsteno Flyable, jo nevar lidot
}

Tādējādi apakšklases objekti var tikt izmantoti bez negaidītas uzvedības.