Что такое абстракция в ООП и как она реализуется в Python

Ответ

Абстракция — один из ключевых принципов объектно-ориентированного программирования (ООП), который заключается в сокрытии сложной реализации и предоставлении простого интерфейса для взаимодействия с объектом.

Проще говоря, абстракция позволяет определить, что объект должен делать, не вдаваясь в подробности, как он это делает.

Ключевые цели абстракции:

  • Упрощение сложности: Пользователю объекта не нужно знать его внутреннее устройство.
  • Повышение модульности: Изменения во внутренней реализации объекта не затрагивают код, который его использует, пока интерфейс остается прежним.
  • Создание «контракта»: Абстрактные классы и методы определяют обязательный набор поведений для всех дочерних классов.

Реализация в Python:

В Python абстракция реализуется с помощью модуля abc (Abstract Base Classes).

  1. Абстрактный класс: Наследуется от abc.ABC.
  2. Абстрактный метод: Помечается декоратором @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)  # Вывод: Лодка плывет по воде