Sobes.tech
Junior — Middle

Ar galite pateikti pavyzdį apie Liskovo pakaitos principą objektinio programavimo srityje?

sobes.tech AI

Atsakymas iš AI

Liskovo pakaitinio principo (Liskov Substitution Principle, LSP) teiginys yra tas, kad pogrupių objektai turi būti pakeičiami pagrindinės klasės objektais be programos teisingumo pažeidimo.

Pavyzdys C#:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("Paukštis skraido");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("Gervė skraido");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("Strutis negali skristi");
    }
}

void MakeBirdFly(Bird bird) {
    bird.Fly();
}

// Naudojimas:
MakeBirdFly(new Sparrow()); // teisinga
MakeBirdFly(new Ostrich()); // pažeidžia LSP, nes meta išimtį

Šiame pavyzdyje, Ostrich klasė pažeidžia Liskovo pakaitinio principo taisyklę, nes ji nepalaiko pagrindinės klasės Bird elgesio (Fly metodo), ir meta išimtį. Laikantis LSP, reikėtų keisti klasių hierarchiją arba skaidyti sąsajas, kad pogrupiai nebūtų priversti įgyvendinti nepalaikomą elgesį.