Курс 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. Запрос пароля с помощью getpass
  3. Beautiful Soup — извлечение данных из HTML
  4. Генераторы в Python
  5. Декоратор Property в Python
  6. Декоратор total_ordering для класса Point
  7. Создание веб-приложения с Flask
  8. Активация Matplotlib в Jupyter
  9. Создание новых списков в Python
  10. Принципы Zen of Python
  11. Метод сравнения объектов в Python
  12. Управление мышью и клавиатурой с Pyautogui
  13. Логирование с Loguru
  14. Сравнение строк в Python
  15. Метод setdefault() в Python
  16. Методы работы со списками
  17. Глубокое копирование объектов
  18. Метод __iand__ для пользовательских классов
  19. Расширение операции побитового «и» в Python
  20. Проверка подстроки в строке
  21. Подсказки типов в Python
  22. Big O оптимизация
  23. Экспорт данных с помощью writefile
  24. Установка и обучение ChatterBot
  25. Работа со словарями в Python
  26. Статическая типизация в Python
  27. Ввод нескольких значений
  28. Проверка кортежей.
  29. Создание копии списка в Python
  30. Хранение данных
  31. Работа с исключениями в Python
  32. Вставка переменных в шаблоны Flask
  33. Отладка производительности Python
  34. Работа с getopt
  35. Работа с JSON данными в Python
  36. Оператор is в Python
  37. Функциональное программирование.
  38. Скачать видео с YouTube
  39. Переопределение метода divmod
  40. Обработка ошибок в JSON данных
  41. Defaultdict в Python
  42. F-строки в Python
  43. Создание графики с черепахой
  44. Экспорт внешнего файла с помощью writefile
  45. lru_cache оптимизация функций

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