Курс 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. Обмен данными с asyncio.Queue
  3. Работа с NumPy.linalg
  4. Работа с срезами в Python
  5. Открытие, чтение и закрытие файла
  6. Работа с zip-архивами в Python
  7. Автоматизация скриптов на AWS Lightsail.
  8. Получение текущей даты и времени
  9. Переопределение оператора % для объектов
  10. Лямбда-функции в цикле
  11. Автоматизация действий с Pyautogui
  12. Форматирование строк в Python
  13. Бесконечные списки в Python
  14. Python itertools combinations() — группировка элементов
  15. Работа с enumerate()
  16. Функция с *args.
  17. Оптимизация поиска в словарях
  18. Преобразование чисел в Python
  19. Документация функции help() в Python
  20. Цикл for в Python
  21. Получение срезов итераторов
  22. Форматирование данных с помощью pprint
  23. Работа с массивами в Python
  24. Вычисление разности множеств в Python
  25. Улучшение читаемости кода в Python
  26. Подсчет элементов в Python
  27. Работа со списками
  28. Функции all() и any() в Python
  29. Форматирование заголовков в Python
  30. Поиск повторов в списке
  31. Объединение кортежей в Python
  32. Освоение Python
  33. Запуск внешнего кода в Jupyter
  34. Счетчик ссылок в Python
  35. Регулярные выражения: метод match
  36. Метод split() для разделения строк
  37. Метод getitem для доступа к элементам последовательности
  38. Транспонирование 2D-массива с помощью zip
  39. Генерация строк с .join()
  40. Игра «Виселица» на Python
  41. Установка Git и AWS CLI
  42. Подсчет количества элементов в списке
  43. Проверка наличия элемента в списке
  44. Объединение списков с использованием itertools.chain
  45. Импорт модулей и пакетов в Python

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