Что такое инкапсуляция в объектно-ориентированном программировании?

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

Ответ

Инкапсуляция — это фундаментальный принцип ООП, который объединяет данные (поля) и методы для работы с ними в единую структуру (класс), скрывая внутреннюю реализацию и предоставляя контролируемый публичный интерфейс для взаимодействия.

Основные цели:

  1. Сокрытие сложности: Пользователь класса работает с простым API, не вникая в детали реализации.
  2. Защита целостности данных: Поля объявляются private, а их модификация возможна только через публичные методы (геттеры/сеттеры), где можно добавить валидацию.
  3. Снижение связанности: Внутреннюю логику можно изменять, не затрагивая код, который зависит только от публичного контракта класса.
  4. Упрощение использования: Сложная внутренняя логика упакована в понятные методы с говорящими именами.

Пример на Java:

public class TemperatureController {
    // 1. Данные скрыты (инкапсулированы)
    private double currentTemperature;
    private final double minSafeTemp = -10.0;
    private final double maxSafeTemp = 50.0;

    // 2. Контролируемый доступ через публичные методы
    public double getCurrentTemperature() {
        return currentTemperature;
    }

    public void setTemperature(double newTemp) {
        // 3. Валидация и защита целостности
        if (newTemp >= minSafeTemp && newTemp <= maxSafeTemp) {
            this.currentTemperature = newTemp;
            logTemperatureChange(newTemp);
        } else {
            throw new IllegalArgumentException("Температура вне безопасного диапазона.");
        }
    }

    // 4. Внутренняя реализация скрыта от внешнего мира
    private void logTemperatureChange(double temp) {
        System.out.println("Температура изменена на: " + temp);
    }
}

Итог: Инкапсуляция — это не просто использование private полей, а практика проектирования, направленная на создание надежных, поддерживаемых и безопасных модулей с четкими границами ответственности.