ВВЕДЕНИЕ В ПРИНЦИПЫ SOLID НА ПРИМЕРЕ С#. ЧАСТЬ 3 - LCP

Принцип подстановки Барбары Лисков

Этот принцип гласит, что объекты в программе должны быть заменяемыми своими наследниками без изменения свойств программы. Выражаясь иначе, дочерний класс может быть заменен на родительский, не вызывая проблем при выполнении программы.

В отличии от прошлых частей, сначала разберем пример правильного кода и только потом начнем нарушать принцип LCP. Возьмем кусочек кода из предыдущей части, а именно код, отвечающий за отправку сообщения клиенту.

ВВЕДЕНИЕ В ПРИНЦИПЫ SOLID НА ПРИМЕРЕ С#. ЧАСТЬ 3 - LCP

Данный код не нарушает принцип Барбары Лисков, так как при использовании upcast логика работы не будет нарушена, дочерние классы содержат в себе только те методы, что и интерфейс, который они реализуют, тоже самое справедливо и для абстрактных классов.

Теперь же изменим наши объекты так, чтобы они нарушили данный принцип. Например добавим в интерфейс метод, который будет отвечать за получение истории сообщений.

ВВЕДЕНИЕ В ПРИНЦИПЫ SOLID НА ПРИМЕРЕ С#. ЧАСТЬ 3 - LCP

Допустим, что данный функционал при отправке по WhatsApp не нужен, тогда код приведет к ошибке при нынешней реализации:

ВВЕДЕНИЕ В ПРИНЦИПЫ SOLID НА ПРИМЕРЕ С#. ЧАСТЬ 3 - LCP

Чтобы код соответствовал третьему принципу необходимо создать новый интерфейс, который будет отвечать за просмотр истории сообщений. Теперь код выглядит следующим образом:

ВВЕДЕНИЕ В ПРИНЦИПЫ SOLID НА ПРИМЕРЕ С#. ЧАСТЬ 3 - LCP

Теперь данный код соответствует принципу Барбары Лисков, так как при использовании upcast не будет возникать ошибок.

Правила контракта

Данные правила справедливы для классов, а не интерфейсов и звучат следующим образом:

  • Предусловие не может быть усилено дочерним классом. Например, имеется условие проверки баланса. При переопределении метода пользователь не имеет права вносить новые проверки баланса, например balance < 100, так как это может привести к ошибкам выполнения операции в определенных ситуациях.
ВВЕДЕНИЕ В ПРИНЦИПЫ SOLID НА ПРИМЕРЕ С#. ЧАСТЬ 3 - LCP
  • Постусловие не может быть ослаблено дочерним классом. Тоже самое, что и с предусловием, только теперь дочерние классы не имеют права исключать некоторые проверки из методов.
  • Инварианты - условия определённые в базовом классе должны остаться в классе наследнике

Заключение

Принцип подстановки Барбары Лисков позволяет переопределить методы родительского объекта таким образом, чтобы при выполнении функционала от родительского объекта не возникало исключений и ошибок.

Список использованных источников

  • Принципы SOLID. Принцип единственной обязанности. URL: https://metanit.com/sharp/patterns/5.1.php
  • S.O.L.I.D. Principles of Object-Oriented Programming in C#. URL: https://www.educative.io/blog/solid-principles-oop-c-sharp
  • Принципы SOLID в C#. URL: https://professorweb.ru/my/it/blog/net/solid.php
  • Опасность нарушения принципов SOLID в C#. URL: https://learn.microsoft.com/ru-ru/archive/msdn-magazine/2014/may/csharp-best-practices-dangers-of-violating-solid-principles-in-csharp
22
Начать дискуссию