Ответ
Абстракция — это принцип ООП, который позволяет скрыть сложную реализацию и показать пользователю (разработчику) только необходимый, упрощенный интерфейс для взаимодействия с объектом.
Цель: Управление сложностью путем разделения что объект делает и как он это делает.
Как реализуется:
- Абстрактные классы: Классы, которые не предназначены для создания экземпляров, а служат шаблоном для других классов. Они могут содержать абстрактные методы (без реализации).
- Интерфейсы: Контракты, которые определяют что должен делать класс, но не как. Класс, реализующий интерфейс, обязан предоставить реализацию всех его методов.
Практический пример на Python:
from abc import ABC, abstractmethod
# Абстракция: мы определяем общий интерфейс для всех устройств хранения
class StorageDevice(ABC):
@abstractmethod
def read(self, path):
"""Прочитать данные."""
pass
@abstractmethod
def write(self, path, data):
"""Записать данные."""
pass
# Конкретная реализация, скрывающая детали работы с файловой системой
class SSD(StorageDevice):
def read(self, path):
# Сложная логика обращения к контроллеру NAND-памяти
print(f"Чтение с SSD из {path}")
return "данные..."
def write(self, path, data):
# Логика wear leveling, записи блоков и т.д.
print(f"Запись на SSD в {path}: {data}")
# Другая реализация
class CloudStorage(StorageDevice):
def read(self, path):
# Логика HTTP-запроса к API облака
print(f"Загрузка из облака {path}")
return "данные..."
def write(self, path, data):
# Логика сериализации и отправки по сети
print(f"Выгрузка в облако {path}: {data}")
# Клиентский код работает с абстракцией, не зная деталей реализации
def backup_data(device: StorageDevice, data):
device.write("/backup/file.txt", data)
print("Резервная копия создана")
# Использование
ssd = SSD()
cloud = CloudStorage()
backup_data(ssd, "важные данные") # Работает с SSD
backup_data(cloud, "важные данные") # Работает с облаком, используя тот же интерфейс
Выгода: Код backup_data не зависит от типа хранилища. Мы можем добавить новый тип (например, TapeDrive), и клиентский код не потребует изменений, если новый класс реализует абстрактный класс StorageDevice.
Видео-ответы
▶
Джун был тимлидом, разрабатывал телеграм ботов и стал миддлом? / Техсобес Middle Python Developer
▶
Открытое интервью на Middle Go-разработчика
▶
РЕАЛЬНОЕ СОБЕСЕДОВАНИЕ НА BACKEND РАЗРАБОТЧИКА ПОЛУЧИЛ ЗП 280К ЗАВАЛИВ ПОЛОВИНУ ТЕХНИЧЕСКИХ ВОПРОСОВ
▶
Джун-самоучка получил оффер всего за день? / Техсобес Junior Python Developer / Mock interview
▶
Тестовое интервью Фёдора на позицию Junior Python-разработчик
▶
Собеседование Java Junior | История джуна который смог | Мои первые собеседования | Jetbulb
▶
Собеседование Java Junior | Артем М. vs. Максим Добрынин | Jetbulb
▶
Flutter. Открытое собеседование
▶
Техническое интервью Java Developer - Артем Никулин
▶
Техническое интервью Java Developer - Михаил Кончиц
▶
Тестовое собеседование Java разработчика #12 - Эдвард Левин