Ответ
Инкапсуляция — это один из фундаментальных принципов объектно-ориентированного программирования, который заключается в объединении данных (полей) и методов, которые с ними работают, в единую структуру (класс), и в ограничении прямого доступа к внутреннему состоянию объекта извне.
Основные цели инкапсуляции:
- Сокрытие реализации (Information Hiding): Внутреннее устройство класса скрыто от пользователя. Можно изменять реализацию, не ломая внешний код, который использует публичный интерфейс класса.
- Защита целостности данных: Поля объявляются
private, а доступ к ним предоставляется через публичные методы (геттеры/сеттеры). Это позволяет добавлять проверки и логику при изменении состояния. - Упрощение взаимодействия: Пользователь класса работает с четко определенным публичным API, не вдаваясь в детали.
Практический пример:
public class BankAccount {
// Данные скрыты (инкапсулированы)
private String owner;
private double balance;
// Публичный конструктор — часть интерфейса
public BankAccount(String owner, double initialBalance) {
this.owner = owner;
this.balance = initialBalance;
}
// Публичные методы для доступа и модификации (интерфейс)
public double getBalance() {
return balance;
}
public void deposit(double amount) {
if (amount > 0) { // Валидация!
balance += amount;
}
}
public boolean withdraw(double amount) {
if (amount > 0 && amount <= balance) { // Валидация и бизнес-правило!
balance -= amount;
return true;
}
return false;
}
}
// Использование
BankAccount account = new BankAccount("Alice", 1000);
account.deposit(500); // OK
// account.balance = -1000; // ОШИБКА КОМПИЛЯЦИИ: поле private
Преимущества: Повышает надежность, безопасность и поддерживаемость кода, уменьшает связанность между компонентами системы.