Курс 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. Dict Comprehension в Python
  2. Конструктор в Python
  3. Генераторы данных
  4. Вычисление времени выполнения
  5. Подсчет частотности элементов в Python
  6. Декораторы в Python
  7. Функция zip() в Python
  8. Сложение матриц в NumPy
  9. Уникальность ключей в словаре
  10. Работа с итераторами через срезы
  11. Создание словаря и множества
  12. Склеивание строк через метод join()
  13. Списковое включение в Python
  14. Основы Python за 14 дней
  15. Переменная с нижним подчеркиванием
  16. Множественное присваивание в Python
  17. Метод ior для битовых операций
  18. Подсказки при вводе данных в Python
  19. Управление сессиями в Python
  20. Разбиение текста в Python
  21. Сортировка элементов с OrderedDict
  22. Многострочные комментарии в Python
  23. Замена элементов в списке с помощью генераторов списков
  24. Подсчет часто встречающихся элементов
  25. Списки в Python: основы
  26. Преобразование чисел в Python
  27. Работа с IP-адресами в Python
  28. Оператор in в Python
  29. Подсказки типов в Python
  30. Метод rsub для пользовательских чисел
  31. Работа с модулем Calendar
  32. Установка максимального количества цифр
  33. Python enumerate() для работы с индексами
  34. Работа с WindowsPath()
  35. Повторение и перенос строки
  36. Метод rename() для переименования файлов и каталогов
  37. Генераторы в Python
  38. Сортировка с помощью параметра key
  39. Методы в Python
  40. Импорт модулей в Python 3.12
  41. Модуль subprocess: запуск внешних команд
  42. Любовь к Python
  43. Документация функции help() в Python
  44. Возврат нескольких значений

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