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