Курс 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. Переопределение метода len
  3. Объединение коллекций в Python
  4. Обработка исключений в Python
  5. Работа с множествами в Python
  6. Множественные конструкторы в Python
  7. Python Translator: создание локальных переводчиков
  8. Метод rename() для переименования файлов и каталогов
  9. Функция с *args.
  10. Оптимизация методов в Python 3.7
  11. Функция __init__ в Python
  12. Создание вложенного генератора
  13. Работа с изображениями Pillow
  14. Основные методы NumPy
  15. Оценка выражений генератора в Python
  16. Избегание изменяемых аргументов
  17. Использование подчеркивания в REPL
  18. Счетчик в Python: most_common()
  19. Удаление ресурса в Python
  20. Просмотр внешнего файла в Python
  21. Ограничение ресурсов в Python
  22. Метод __float__ в Python
  23. Ускорение обработки данных с %autoawait
  24. Отслеживание прогресса с tqdm
  25. Оператор @ для умножения матриц
  26. Работа с необработанными строками
  27. Генераторы в Python
  28. Создание итерируемых объектов
  29. Удаление символа из строки
  30. Виртуальные среды в Python
  31. Списки в Python: синтаксис представления
  32. Работа с утверждениями в Python
  33. Итераторы в Python
  34. Автоматизация с Python
  35. Работа с enumerate()
  36. Удаление элемента по индексу
  37. Печать календаря в Python
  38. CSV строка разделение в Python
  39. Установка random seed в Python
  40. Разделение строк в Python
  41. Проверка элемента в множестве.
  42. Пространство имен в Python
  43. Копирование и вставка текста в Python
  44. Объединение, распаковка и деструктуризация
  45. Проверка окончания строки с помощью str.endswith()
  46. Реверс строки и списка в Python.
  47. Профилирование с cProfile

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