Курс 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. Наиболее частотные элементы с помощью Counter
  2. Подчеркивание в REPL
  3. Создание объекта timedelta
  4. Печать списка с помощью метода join
  5. Сортировка в Python
  6. Проверка типа данных
  7. Распаковка с оператором *
  8. Модуль itertools: эффективная работа с итераторами
  9. Обмен значений переменных в Python
  10. IPython и Jupyter Notebook: руководство
  11. Списки в Python: синтаксис представления
  12. Создание и обучение модели с Keras
  13. Генерация ключей RSA
  14. Методы Python для работы с данными
  15. Срезы в Python
  16. Преобразование объекта в строку
  17. Декораторы классов
  18. Создание инструмента обнаружения плагиата
  19. Работа с датой и временем в Python
  20. Настройка вывода в Numpy
  21. Python Метод sleep() времени
  22. Подсказки типов в Python
  23. Метод rpow в Python
  24. Делегирование в Python
  25. Регулярные выражения: метод match
  26. Функции классификации комплексных чисел
  27. Измерение времени выполнения
  28. Применение команды break
  29. Метод rmatmul для обратного матричного умножения
  30. Названия столбцов в Python таблицах
  31. Оператор match в Python
  32. Создание обратного итератора
  33. Тестирование времени с Freezegun
  34. Основы слова
  35. Создание лямбда-функций
  36. Преобразование чисел в слова
  37. Оператор деления для класса Rational
  38. Определение локальных переменных в Python
  39. Defaultdict в Python
  40. Метод join для объединения строк
  41. Работа с классами данных
  42. Многоточие в Python
  43. Выражения-генераторы в Python
  44. None в Python: использование и особенности
  45. Преобразование вложенного списка

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