Курс Python → Принципы LSP и ISP в Python

Принцип подстановки Лискова (LSP) является одним из принципов объектно-ориентированного программирования, который утверждает, что объекты должны быть заменяемыми своими подтипами без измены свойств программы. Другими словами, подклассы должны быть взаимозаменяемы с их суперклассами без нарушения целостности программы. Например, если у нас есть класс «Самолет» и класс «Машина», то класс «Самолет» должен дополнять функциональность класса «Машина», а не заменять ее.

Принцип разделения интерфейса (ISP) предполагает, что интерфейсы не должны быть слишком объемными и должны разделяться на более мелкие части, чтобы клиенты могли реализовывать только те методы, которые им действительно нужны. В Python это может быть не так заметно из-за его динамической типизации и гибкости, но знание этого принципа всегда полезно для улучшения структуры кода. Правильное разделение интерфейсов способствует улучшению расширяемости и оптимизации программы.

Пример использования принципа подстановки Лискова в Python:


class Vehicle:
    def drive(self):
        pass

class Car(Vehicle):
    def drive(self):
        print("Driving a car")

class Airplane(Vehicle):
    def drive(self):
        print("Flying an airplane")

def travel(vehicle):
    vehicle.drive()

car = Car()
airplane = Airplane()

travel(car)
travel(airplane)

Пример использования принципа разделения интерфейса в Python:


class Printer:
    def print(self, document):
        pass

class Scanner:
    def scan(self, document):
        pass

class MultiFunctionDevice(Printer, Scanner):
    def print(self, document):
        print("Printing document")

    def scan(self, document):
        print("Scanning document")

device = MultiFunctionDevice()
device.print("Test document")
device.scan("Test document")

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

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Деление в Python
  2. Оператор морж в Python 3.8
  3. Правила именования переменных
  4. Подробная информация о %pinfo
  5. Получение текущего времени в Python
  6. Сравнение строк в Python
  7. Очистка списка от False, None, 0, «»
  8. Удаление специальных символов с помощью re.sub
  9. Работа со слайсами
  10. Хэш-функции и метод цепочек
  11. Проверка существования переменной с оператором :=
  12. Проблема сравнения словарей
  13. Модуль functools в Python
  14. Функция zip() в Python
  15. Ускоренный импорт библиотек
  16. Функции в одну строку
  17. Роль ключевого слова self
  18. Форматирование чисел в Python
  19. Объединение списков с использованием itertools.chain
  20. Курсы Яндекс Практикум
  21. Преобразование кортежа в словарь.
  22. Defaultdict в Python
  23. Метод ifloordiv для пользовательских классов
  24. Основные функции и модули Python
  25. Функция format() в Python
  26. Обход словаря в Python
  27. Получение срезов итераторов
  28. Обход дочерних элементов BeautifulSoup
  29. Модуль Operator в Python
  30. Метод init в Python
  31. Работа со словарями
  32. Работа с необработанными строками
  33. Метод gt в Python
  34. Поиск индексов подстроки
  35. Хэш-функции в Python
  36. Настройка нарезки списков
  37. Декораторы в Python
  38. Блок else в циклах Python
  39. Оператор «not» в Python
  40. Анализ кода — Python
  41. Работа с массивами в Numpy
  42. Итерации в Python

Marketello читают маркетологи из крутых компаний