Курс 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. Метод classmethod
  2. Работа с пользовательским вводом
  3. Возврат нескольких значений
  4. Удаление дубликатов из списка с помощью dict.fromkeys
  5. Удаление знаков препинания в Python
  6. Создание Telegram-бота на Python
  7. Переворот списка в Python
  8. Удаление дубликатов из списка
  9. Блок else в Python
  10. Генераторы в Python
  11. Функция print() — вывод информации
  12. Извлечение аудио из видео
  13. Объединение списков с помощью zip
  14. Константы в модуле cmath
  15. Функции с необязательными аргументами
  16. Использование type hints
  17. Combobox в Tkinter
  18. Python Метод Union Множеств
  19. Лямбда-функции в Python
  20. Декораторы в Python
  21. Генератор бросков кубиков
  22. Python Тесты и Гайды
  23. Обновление ключей в Python
  24. Работа с контекст-менеджером «with»
  25. Объединение Python и Shell
  26. Метод ne для сравнения объектов
  27. Преобразование объекта в строку
  28. Освобождение памяти в Python
  29. Solidity для DeFi Ethereum
  30. Сложение матриц в NumPy
  31. Подсчет количества элементов в списке
  32. Работа с IP-адресами в Python
  33. Работа с файлами и директориями в Python.
  34. Работа со временем в Python
  35. Управление контекстом выполнения кода
  36. Настройка шрифта и цвета в Tkinter
  37. Транспонирование 2D-массива с помощью zip
  38. Метод join() с набором
  39. Принцип одной функции
  40. Удаление ссылок в Python
  41. Метод rsub для пользовательских чисел
  42. Big O оптимизация
  43. Множественные конструкторы в Python
  44. Форматирование данных с помощью pprint
  45. Ограничение итераций в Python
  46. Получение текущей даты и времени
  47. Частичное совпадение ввода
  48. Глобальные переменные в Python

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