Изучаю подходы к SOLID принципам.
Не могу понять, на нормальном примере, что такое принцип подстановки Liskov. Я его понял так, если ваша конструкция использует определенные типы данных, то эта же конструкция должна так же свободно работать с производными от исходного типа, типами. Или я как то не правильно понимаю, подскажите с примером. Можно ли увидеть самый простой пример из возможных, который иллюстрирует этот принцип
Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.
Давайте рассмотрим пример на c#:
public class Bird
{
public void Fly() { }
}
public class Duck : Bird { }
Утка может летать, потому что она является птицей. Но что, если есть еще один класс:
public class Ostrich : Bird { }
Страус - это птица, но она не может летать. Ostrich
подкласс Bird
- однако не может использовать метод Fly
, что означает нарушение LSP.
public class Bird { }
public class FlyingBirds : Bird
{
public void Fly() { }
}
public class Duck : FlyingBirds { }
public class Ostrich : Bird { }
вольный перевод ответа @MaysaraAlhindi
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты