Ответ
Это принцип инкапсуляции. Он скрывает внутреннее состояние объекта и предоляет доступ к нему только через публичные методы (геттеры/сеттеры).
Основные цели:
- Защита данных: Предотвращение некорректного изменения состояния. Валидация происходит в сеттерах.
- Снижение связанности: Клиентский код зависит от интерфейса (публичных методов), а не от реализации. Это позволяет менять внутреннюю логику без влияния на использующий код.
- Упрощение поддержки: Локализация изменений и логики валидации внутри класса.
Пример на Java:
class BankAccount {
// Внутреннее состояние скрыто (private)
private double balance;
// Публичный интерфейс для работы с состоянием
public void deposit(double amount) {
if (amount > 0) { // Валидация внутри класса
balance += amount;
}
}
public double getBalance() {
return balance;
}
}
// Использование
BankAccount account = new BankAccount();
account.deposit(100); // Корректное изменение
// account.balance = -500; // Невозможно — поле private
Без инкапсуляции прямое изменение поля balance могло бы привести к нарушению инвариантов (например, отрицательный баланс).