← Назад к вопросам

Объясни абстракцию с точки зрения одного экземпляра магазина у которого есть множество отделов

1.0 Junior🔥 141 комментариев
#ООП#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Абстракция на примере магазина и его отделов

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

Пример магазина

Представьте большой супермаркет:

  • В магазине есть отдел продуктов, отдел одежды, отдел электроники
  • Каждый отдел имеет manager'а, который управляет товарами
  • Каждый отдел знает свой инвентарь
  • Покупатель не волнует, как именно организован отдел — он просто подходит и покупает

Как это работает в коде

// ВАЖНЫЙ УРОВЕНЬ: интерфейс для всех отделов
public interface Department {
    void addProduct(Product product);
    Product findProduct(String name);
    double getTotalValue();
    void applyDiscount(double percentage);
}

Этот интерфейс скрывает сложность каждого отдела. Покупателю (клиенту кода) не важно, электроника это или продукты — они работают с одним методом findProduct().

Конкретные реализации

// Отдел продуктов
public class FoodDepartment implements Department {
    private List<Product> inventory;
    private Manager manager;
    private Temperature storageTemp;
    
    @Override
    public void addProduct(Product product) {
        // Логика проверки истечения срока
        // Логика хранения при определённой температуре
        inventory.add(product);
    }
    
    @Override
    public Product findProduct(String name) {
        return inventory.stream()
            .filter(p -> p.getName().equals(name))
            .findFirst()
            .orElse(null);
    }
}

// Отдел электроники
public class ElectronicsDepartment implements Department {
    private List<Product> inventory;
    private Manager manager;
    private Warranty warrantyProvider;
    
    @Override
    public void addProduct(Product product) {
        // Логика проверки целостности
        // Логика регистрации в warranty программе
        inventory.add(product);
    }
}

Магазин как точка входа

public class Store {
    private List<Department> departments;
    private String storeName;
    
    public Store(String storeName) {
        this.storeName = storeName;
        this.departments = new ArrayList<>();
        departments.add(new FoodDepartment());
        departments.add(new ElectronicsDepartment());
    }
    
    public Product findProductInAllDepartments(String productName) {
        for (Department dept : departments) {
            Product product = dept.findProduct(productName);
            if (product != null) {
                return product;
            }
        }
        return null;
    }
    
    public double getTotalStoreValue() {
        return departments.stream()
            .mapToDouble(Department::getTotalValue)
            .sum();
    }
}

Почему это абстракция

Скрытие сложности — каждый отдел может иметь сложную логику, но для клиента это одна операция.

Полиморфизм — Store работает с Department интерфейсом, не зная конкретных реализаций.

Легкость расширения — можно добавить новый отдел без изменения Store.

Это суть абстракции в Java!

Объясни абстракцию с точки зрения одного экземпляра магазина у которого есть множество отделов | PrepBro