Курс 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. Генераторы по генератору
  2. Возврат нескольких значений из функции
  3. Библиотека Rich: форматирование текста
  4. Хранение данных
  5. Объединение словарей в Python
  6. Создание GUI с Tkinter: Entry
  7. Метод get() в Python
  8. Оператор «or» в Python
  9. Динамическая типизация в Python
  10. PEP-401: оператор
  11. Проверка однородности элементов списка
  12. Пустой оператор pass в Python
  13. Оператор zip в Python
  14. Объединение, распаковка и деструктуризация
  15. Оператор in и not in в Python
  16. Основы Python
  17. Объединение объектов в Python
  18. Измерение времени выполнения с помощью time
  19. Генераторные функции в Python
  20. Python groupby() из itertools: работа с повторяющимися элементами
  21. Условное добавление элементов в список
  22. ChainMap.new_child() — добавление нового словаря
  23. Скрытие вывода данных
  24. Извлечение новостей с newspaper3k
  25. globals и locals
  26. Функции-генераторы в Python
  27. Работа с CSV файлами
  28. Импорт объектов из модулей
  29. Преобразование кортежа в словарь.
  30. Модуль subprocess: запуск внешних команд
  31. Метод ipow для возведения в степень
  32. Форматирование заголовков в Python
  33. Операции со строками в Python
  34. Создание уникального множества
  35. Python Translator: создание локальных переводчиков
  36. Работа с deque из collections
  37. Анонимные функции в Python
  38. Работа с функцией next() в Python
  39. Округление дробей в Python
  40. Циклы в Python
  41. Присвоение и ссылки
  42. Библиотека itertools: объединение списков
  43. Удаление URL-адресов в Python
  44. Операции с кортежами
  45. Регулярные выражения в Python
  46. Итераторы в Python

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