Курс 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"
- Python Менеджер контекста
- Синтаксис переменных цикла в Python
- Обработка исключений
- Метод ne для сравнения объектов
- Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
- Вызов внешних программ в Python с помощью sh
- Делегирование в Python
- Обработка исключений в Python
- Оператор «is not» в Python
- Измерение времени выполнения кода с помощью time
- Метод setdefault() в Python
- Преобразование символов в нижний регистр
- Замер времени выполнения кода
- Сравнение строк в Python
- Создание словаря и множества
- Аннотации типов в Python
- Python-dateutil — работа с датами
- Ввод нескольких значений
- Бесконечные списки в Python
- Бесконечная проверка в Python
- Подчеркивание в REPL
- Создание вложенных циклов for
- Отображение HTML кода в Python
- Отступы в Python
- Метод __imod__ для Python
- Работа с файлами и директориями в Python.
- Python: Splat-оператор и splatty-splat
- Область видимости переменных
- Атрибуты класса и экземпляра
- Кортежи в Python: особенности и преимущества
- Замена элементов в списке с помощью генераторов списков
- Метод __irshift__ для Python
- Освобождение памяти в Python
- Отправка POST-запроса в REST API
- Оператор del в Python
- Управление доступом к модулю
- Вставка переменных в шаблоны Flask
- Фильтрация данных в Python.
- Изменение объектов в Python
- Преобразование вложенного списка
- Работа со строками в Python
- Получение списка файлов в директории с использованием os
- Подробная информация о %pinfo
- GitHub в Telegram: подписка на уведомления
- Функция product() в Python
- Декораторы с @wraps
- Аннотации типов в Python















