Курс 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. Создание новых списков
  2. Python Translator: создание локальных переводчиков
  3. Операторы сравнения в Python
  4. Вызов внешних программ в Python с помощью sh
  5. Управление браузером с Selenium
  6. Функция enumerate в Python
  7. Объединение списков в Python
  8. Оператор «not» в Python
  9. Многострочные комментарии в Python
  10. Функции в одну строку
  11. List Comprehension Tutorial
  12. Тестирование времени с Freezegun
  13. Оболочка Python
  14. Генераторы в Python
  15. Объединение коллекций в Python
  16. Строки в Python: апострофы и кавычки
  17. Функция zip() в Python
  18. UserList в Python: Описание и примеры использования
  19. Поток данных в Python
  20. Изменение логики работы с временем
  21. Работа с утверждениями в Python
  22. Работа с collections.Counter
  23. Применение промокода в Много лосося
  24. Цепные операции в Python
  25. Объединение объектов в Python
  26. Использование обратной косой черты в f-строках
  27. Работа с процессами в Python
  28. PUT запрос для обновления данных
  29. Переопределение метода __lshift__
  30. Объединение словарей в Python
  31. Установка и использование модуля Wikipedia
  32. Работа с контекстными менеджерами
  33. Измерение времени выполнения кода с использованием time
  34. *args и **kwargs в Python
  35. Python Аргументы по умолчанию
  36. Транспонирование 2D-массива с помощью zip
  37. Генераторы по генератору
  38. Оператор Walrus в Python
  39. Работа с дробями в Python
  40. Именованные срезы в Python
  41. Установка Python3.7 и PIP
  42. Python Тесты и Гайды
  43. Использование функции product

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