.Net Review
.Net Review
Канал о технологиях .Net и не только. Здесь вы найдете разборы, уроки, фишки технологий и языков программирования... https://t.me/dotnetreview
Lis 1 minute

Принципы SOLID. Принцип подстановки Лисков

Image for post

Третий принцип SOLID, принцип подстановки Барбары Лисков(Liskov Substitution Principle) можно описать следующим образом: должна быть возможность вместо базового типа использовать любой его подтип. Как это реализовать и что это значит, подробнее в этой статье.

Зачем придерживаться принципа?

Объяснение на примере будет нагляднее. Напишем класс постройки автомобиля, в который передаем кол-во колес. Далее напишем класс постройки тягачей, который наследуется от автомобиля.

Image for post

Допустим в процессе работы программы нам необходимо использовать автомобили или тягачи. Программа ожидает похожего поведения от первого и второго класса.

Image for post

Однако, если мы используем общий метод работы с автомобилем (в нашем случае получение кол-во осей), то программа выдаст ошибку, т.к. ожидается поведение автомобиля, а выходит, что тягач не выполняет эти требования.

Вывод следующий: нельзя допускать разное поведение классов наследников.

Как решить проблему?

Для решения проблемы необходимо придерживаться нескольких правил:

  • Предусловия. Проверки в начале методов должны быть идентичны классу родителю. Нельзя добавлять дополнительные, убирать и изменять.
  • Постусловия. Проверки результатов методов должны быть идентичны классу родителю. Нельзя добавлять дополнительные, убирать и изменять.
  • Инварианты. Проверки свойств класса должны соответствовать проверкам свойств класса родителя.

Итог

Всё нельзя, а как можно? Если возникла такая ситуация, когда условия Лисков не соблюдается, это может свидетельствовать о неправильно разработанной архитектуре или о неправильном использовании класса. Тем не менее, важно помнить, что принципы SOLID это рекомендации.

В следующих статьях подробнее о других принципах. Спасибо за внимание!

Исходный код: pastebin.

Больше информации по .Net в нашем телеграмм канале.

321 vues
Ajouter
Plus
.Net Review
Канал о технологиях .Net и не только. Здесь вы найдете разборы, уроки, фишки технологий и языков программирования... https://t.me/dotnetreview
S'abonner