Ответ
Абстракция — это принцип объектно-ориентированного программирования, который позволяет скрыть сложную внутреннюю реализацию и предоставить пользователю (другому разработчику) только существенные характеристики и поведение объекта через четко определенный интерфейс.
Суть принципа: Работать с объектами на более высоком уровне, не вдаваясь в детали их внутреннего устройства.
Пример на 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) не требуют изменений клиентского кода. - Контроль доступа: Сокрытие внутреннего состояния защищает его от некорректного изменения.