Курс 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. Генераторы в Python
  5. Улучшенные подсказки для импорта в Python 3.12
  6. Роль ключевого слова self
  7. Работа с модулем random
  8. Python union() функция — объединение множеств
  9. Методы shutil для работы с файлами
  10. Получение атрибутов и методов класса
  11. Конкатенация списков в Python
  12. Сравнение def и lambda функций в Python
  13. Метод index() в Python
  14. Retrying в Python: повторные вызовы
  15. Создание словарей с defaultdict()
  16. Переопределение метода __lshift__
  17. Оформление кода на Python
  18. Функция enumerate() в Python
  19. Проверка класса объекта
  20. Получение значений из словарей
  21. Методы обработки строк в Python
  22. Непрерывная проверка в Python
  23. Генераторы словарей и множеств
  24. Настройка Cron
  25. Перегрузка операторов в Python
  26. Основы работы со списками
  27. Настройка шрифта и цвета в Tkinter
  28. Оператор «not» в Python
  29. Работа с функцией next() в Python
  30. Создание словарей с defaultdict
  31. Измерение времени выполнения кода
  32. Создание графиков в терминале
  33. Округление дробей в Python
  34. Подсчет элементов с помощью Counter
  35. Оператор in для Python
  36. Установка и использование pyshorteners
  37. Работа с deque из collections
  38. Импорт модулей в Python 3.12
  39. Разделение строки с регулярными выражениями
  40. Работа с файлами в Python
  41. Операции с кортежами
  42. Тестирование времени с Freezegun
  43. Группировка элементов Python
  44. Управление IP-адресами через прокси
  45. Именованные срезы в Python
  46. Освобождение памяти в Python
  47. Умножение строк и списков

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