Курс 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. Синтаксис переменных цикла в Python
  3. Обработка исключений
  4. Метод ne для сравнения объектов
  5. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  6. Вызов внешних программ в Python с помощью sh
  7. Делегирование в Python
  8. Обработка исключений в Python
  9. Оператор «is not» в Python
  10. Измерение времени выполнения кода с помощью time
  11. Метод setdefault() в Python
  12. Преобразование символов в нижний регистр
  13. Замер времени выполнения кода
  14. Сравнение строк в Python
  15. Создание словаря и множества
  16. Аннотации типов в Python
  17. Python-dateutil — работа с датами
  18. Ввод нескольких значений
  19. Бесконечные списки в Python
  20. Бесконечная проверка в Python
  21. Подчеркивание в REPL
  22. Создание вложенных циклов for
  23. Отображение HTML кода в Python
  24. Отступы в Python
  25. Метод __imod__ для Python
  26. Работа с файлами и директориями в Python.
  27. Python: Splat-оператор и splatty-splat
  28. Область видимости переменных
  29. Атрибуты класса и экземпляра
  30. Кортежи в Python: особенности и преимущества
  31. Замена элементов в списке с помощью генераторов списков
  32. Метод __irshift__ для Python
  33. Освобождение памяти в Python
  34. Отправка POST-запроса в REST API
  35. Оператор del в Python
  36. Управление доступом к модулю
  37. Вставка переменных в шаблоны Flask
  38. Фильтрация данных в Python.
  39. Изменение объектов в Python
  40. Преобразование вложенного списка
  41. Работа со строками в Python
  42. Получение списка файлов в директории с использованием os
  43. Подробная информация о %pinfo
  44. GitHub в Telegram: подписка на уведомления
  45. Функция product() в Python
  46. Декораторы с @wraps
  47. Аннотации типов в Python

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