Ответ
Абстракция — один из ключевых принципов объектно-ориентированного программирования (ООП), который заключается в сокрытии сложной реализации и предоставлении простого интерфейса для взаимодействия с объектом.
Проще говоря, абстракция позволяет определить, что объект должен делать, не вдаваясь в подробности, как он это делает.
Ключевые цели абстракции:
- Упрощение сложности: Пользователю объекта не нужно знать его внутреннее устройство.
- Повышение модульности: Изменения во внутренней реализации объекта не затрагивают код, который его использует, пока интерфейс остается прежним.
- Создание «контракта»: Абстрактные классы и методы определяют обязательный набор поведений для всех дочерних классов.
Реализация в Python:
В Python абстракция реализуется с помощью модуля abc
(Abstract Base Classes).
- Абстрактный класс: Наследуется от
abc.ABC
. - Абстрактный метод: Помечается декоратором
@abstractmethod
. Такой метод не имеет реализации в родительском классе и должен быть обязательно переопределен во всех дочерних классах.
Пример:
from abc import ABC, abstractmethod
# Абстрактный класс "Транспортное средство"
# Он определяет контракт: любое транспортное средство должно уметь двигаться.
class Vehicle(ABC):
@abstractmethod
def move(self):
pass
# Конкретные реализации
class Car(Vehicle):
def move(self):
print("Машина едет по дороге")
class Boat(Vehicle):
def move(self):
print("Лодка плывет по воде")
# Функция, работающая с абстракцией Vehicle
# Ей не важно, что за объект ей передали (Car или Boat),
# главное, что он соответствует контракту и имеет метод move().
def start_trip(vehicle: Vehicle):
print("Начинаем путешествие...")
vehicle.move()
# Использование
my_car = Car()
my_boat = Boat()
start_trip(my_car) # Вывод: Машина едет по дороге
start_trip(my_boat) # Вывод: Лодка плывет по воде