Что такое принцип абстракции в ООП?

«Что такое принцип абстракции в ООП?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Суть принципа: Работать с объектами на более высоком уровне, не вдаваясь в детали их внутреннего устройства.

Пример на Python:

from abc import ABC, abstractmethod

# Абстрактный класс определяет интерфейс (контракт)
class DatabaseConnector(ABC):
    @abstractmethod
    def connect(self):
        """Установить соединение с БД."""
        pass

    @abstractmethod
    def execute_query(self, query: str):
        """Выполнить SQL-запрос."""
        pass

# Конкретная реализация скрывает детали
class PostgresConnector(DatabaseConnector):
    def __init__(self, host, port, user, password):
        self._host = host  # Детали реализации скрыты
        self._port = port
        # ... инициализация драйвера

    def connect(self):
        # Сложная логика установки соединения с PostgreSQL
        print(f"Connecting to {self._host}:{self._port}...")
        # ...

    def execute_query(self, query: str):
        # Логика выполнения запроса через psycopg2
        return "Query results"

# Клиентский код использует только абстрактный интерфейс
def run_report(connector: DatabaseConnector):
    connector.connect()
    data = connector.execute_query("SELECT * FROM reports")
    # Неважно, Postgres, MySQL или SQLite под капотом

Преимущества:

  • Снижение сложности: Позволяет мыслить на уровне предметной области.
  • Гибкость и расширяемость: Новые реализации (например, MySQLConnector) не требуют изменений клиентского кода.
  • Контроль доступа: Сокрытие внутреннего состояния защищает его от некорректного изменения.