Курс 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"
- Наиболее частотные элементы с помощью Counter
- Подчеркивание в REPL
- Создание объекта timedelta
- Печать списка с помощью метода join
- Сортировка в Python
- Проверка типа данных
- Распаковка с оператором *
- Модуль itertools: эффективная работа с итераторами
- Обмен значений переменных в Python
- IPython и Jupyter Notebook: руководство
- Списки в Python: синтаксис представления
- Создание и обучение модели с Keras
- Генерация ключей RSA
- Методы Python для работы с данными
- Срезы в Python
- Преобразование объекта в строку
- Декораторы классов
- Создание инструмента обнаружения плагиата
- Работа с датой и временем в Python
- Настройка вывода в Numpy
- Python Метод sleep() времени
- Подсказки типов в Python
- Метод rpow в Python
- Делегирование в Python
- Регулярные выражения: метод match
- Функции классификации комплексных чисел
- Измерение времени выполнения
- Применение команды break
- Метод rmatmul для обратного матричного умножения
- Названия столбцов в Python таблицах
- Оператор match в Python
- Создание обратного итератора
- Тестирование времени с Freezegun
- Основы слова
- Создание лямбда-функций
- Преобразование чисел в слова
- Оператор деления для класса Rational
- Определение локальных переменных в Python
- Defaultdict в Python
- Метод join для объединения строк
- Работа с классами данных
- Многоточие в Python
- Выражения-генераторы в Python
- None в Python: использование и особенности
- Преобразование вложенного списка















