Что такое принцип подстановки Liskov

155
24 января 2019, 11:00

Изучаю подходы к SOLID принципам.

Не могу понять, на нормальном примере, что такое принцип подстановки Liskov. Я его понял так, если ваша конструкция использует определенные типы данных, то эта же конструкция должна так же свободно работать с производными от исходного типа, типами. Или я как то не правильно понимаю, подскажите с примером. Можно ли увидеть самый простой пример из возможных, который иллюстрирует этот принцип

Answer 1

Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа, не зная об этом.

Давайте рассмотрим пример на 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

READ ALSO
Наследование TreeNode

Наследование TreeNode

Хочу создать свою TreeNode - TreeINodeНаследую TreeNode в TreeINode

181