Курс 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
- Обмен данными с asyncio.Queue
- Работа с NumPy.linalg
- Работа с срезами в Python
- Открытие, чтение и закрытие файла
- Работа с zip-архивами в Python
- Автоматизация скриптов на AWS Lightsail.
- Получение текущей даты и времени
- Переопределение оператора % для объектов
- Лямбда-функции в цикле
- Автоматизация действий с Pyautogui
- Форматирование строк в Python
- Бесконечные списки в Python
- Python itertools combinations() — группировка элементов
- Работа с enumerate()
- Функция с *args.
- Оптимизация поиска в словарях
- Преобразование чисел в Python
- Документация функции help() в Python
- Цикл for в Python
- Получение срезов итераторов
- Форматирование данных с помощью pprint
- Работа с массивами в Python
- Вычисление разности множеств в Python
- Улучшение читаемости кода в Python
- Подсчет элементов в Python
- Работа со списками
- Функции all() и any() в Python
- Форматирование заголовков в Python
- Поиск повторов в списке
- Объединение кортежей в Python
- Освоение Python
- Запуск внешнего кода в Jupyter
- Счетчик ссылок в Python
- Регулярные выражения: метод match
- Метод split() для разделения строк
- Метод getitem для доступа к элементам последовательности
- Транспонирование 2D-массива с помощью zip
- Генерация строк с .join()
- Игра «Виселица» на Python
- Установка Git и AWS CLI
- Подсчет количества элементов в списке
- Проверка наличия элемента в списке
- Объединение списков с использованием itertools.chain
- Импорт модулей и пакетов в Python















