Junior — Middle
Можете ли да дадете пример за принципа на Лисков в обектно-ориентираното програмиране?
sobes.tech AI
Отговор от AI
Принципът на Лисков за заместване (Liskov Substitution Principle, LSP) гласи, че обектите на подклас трябва да могат да заместят обектите на базовия клас без да нарушават коректността на програмата.
Пример на C#:
class Bird {
public virtual void Fly() {
Console.WriteLine("Птицата лети");
}
}
class Sparrow : Bird {
public override void Fly() {
Console.WriteLine("Пъстрият лети");
}
}
class Ostrich : Bird {
public override void Fly() {
throw new NotSupportedException("Страусът не може да лети");
}
}
void MakeBirdFly(Bird bird) {
bird.Fly();
}
// Използване:
MakeBirdFly(new Sparrow()); // правилно
MakeBirdFly(new Ostrich()); // нарушава LSP, тъй като хвърля изключение
В този пример класът Ostrich нарушава принципа на Лисков, тъй като не поддържа поведението на базовия клас Bird (метода Fly), като хвърля изключение. За да спазваме LSP, трябва да променим йерархията на класовете или да разделим интерфейсите, така че подкласовете да не са принудени да реализират неподдържано поведение.