Курс 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"
- Генераторы по генератору
- Возврат нескольких значений из функции
- Библиотека Rich: форматирование текста
- Хранение данных
- Объединение словарей в Python
- Создание GUI с Tkinter: Entry
- Метод get() в Python
- Оператор «or» в Python
- Динамическая типизация в Python
- PEP-401: оператор
- Проверка однородности элементов списка
- Пустой оператор pass в Python
- Оператор zip в Python
- Объединение, распаковка и деструктуризация
- Оператор in и not in в Python
- Основы Python
- Объединение объектов в Python
- Измерение времени выполнения с помощью time
- Генераторные функции в Python
- Python groupby() из itertools: работа с повторяющимися элементами
- Условное добавление элементов в список
- ChainMap.new_child() — добавление нового словаря
- Скрытие вывода данных
- Извлечение новостей с newspaper3k
- globals и locals
- Функции-генераторы в Python
- Работа с CSV файлами
- Импорт объектов из модулей
- Преобразование кортежа в словарь.
- Модуль subprocess: запуск внешних команд
- Метод ipow для возведения в степень
- Форматирование заголовков в Python
- Операции со строками в Python
- Создание уникального множества
- Python Translator: создание локальных переводчиков
- Работа с deque из collections
- Анонимные функции в Python
- Работа с функцией next() в Python
- Округление дробей в Python
- Циклы в Python
- Присвоение и ссылки
- Библиотека itertools: объединение списков
- Удаление URL-адресов в Python
- Операции с кортежами
- Регулярные выражения в Python
- Итераторы в Python















