Курс 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. Создание и удаление объектов
  3. Конструктор в Python
  4. Измерение времени выполнения
  5. Создание словарей и множеств в Python
  6. Метод lt для сортировки объектов
  7. Получение частей дроби
  8. Область видимости переменных
  9. Создание словаря с значением по умолчанию
  10. Проверка файла .py на синтаксис.
  11. Распаковка аргументов в Python
  12. Работа со строками
  13. Утечки переменных цикла в Python 3.x
  14. Метод rsub в Python: расширение функциональности вычитания
  15. Метод сравнения объектов в Python
  16. Создание именованных кортежей в Python
  17. Работа с CSV файлами в Python
  18. Конкатенация строк с join() в Python
  19. Форматирование строк в Python
  20. Проверка вхождения подстроки
  21. Вывод символов строки в Python
  22. Доступ к локальным переменным
  23. OrderedDict — упорядоченный словарь
  24. Оптимизация памяти с __slots__
  25. Форматирование строк с помощью f-строк
  26. Функция enumerate() в Python
  27. Возведение в квадрат с помощью itertools
  28. Работа с классами данных
  29. Импорт объектов из модулей
  30. Игра «Угадывание чисел»
  31. Оптимизация сравнения в Python
  32. Замена текста с помощью sub
  33. Генераторы списков
  34. Возврат значений из генератора
  35. Функции all() и any() в Python
  36. Кортежи в Python: особенности и преимущества
  37. Работа с CSV в Python
  38. Функция reversed() в Python
  39. Проверка существования переменной с оператором :=
  40. Генераторы в Python
  41. Создание треугольника Паскаля
  42. Манипуляция формой массива в Numpy
  43. Отображение графиков в Jupyter с Matplotlib
  44. Преобразование документов в PDF с помощью Spire.Office

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