Курс 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. Concrete Paths — метод .with_suffix()
  2. Обмен переменными в Jupyter
  3. Удаление специальных символов с помощью re.sub
  4. Решатель судоку на Python с pygame
  5. Функция product() в Python
  6. Управление контекстом выполнения
  7. Работа с модулем glob в Python
  8. Хеширование паролей с солью
  9. Удаление ключей из словаря
  10. Виртуальные среды в Python
  11. Округление дробей в Python
  12. Переопределение метода __pow__
  13. Принципы Zen of Python
  14. Измерение времени выполнения кода
  15. Вложенные циклы в Python
  16. Декораторы в Python
  17. Операторы объединения в Python 3.9
  18. Метод setdefault() в Python
  19. Ускорение выполнения кода в Python
  20. Метод rsub для пользовательских чисел
  21. Объединение кортежей в Python
  22. Удаление элементов из списка в Python
  23. Метод title() в Python
  24. Роль запятой в Python
  25. Инициализация переменных
  26. Обработка ошибок в Python
  27. Проверка кортежей.
  28. Метод classmethod
  29. Преобразование чисел в восьмеричную строку
  30. Операторы увеличения и уменьшения в Python
  31. Модуль math: константы π и e
  32. Именованные срезы в Python
  33. Retrying в Python: повторные вызовы
  34. Инвертирование словаря
  35. Получение текущей даты в Python
  36. Получение ID процесса
  37. Создание словарей и множеств в Python.
  38. Метод ipow для возведения в степень
  39. Pillow: работа с изображениями
  40. Цепные операции в Python
  41. Создание обратного итератора
  42. Поиск индекса элемента
  43. Установка Python — Простое руководство
  44. Конкатенация строк с join() в Python

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