Ответ
Инкапсуляция — это один из ключевых принципов объектно-ориентированного программирования (ООП), который заключается в объединении данных (атрибутов) и методов для их обработки внутри одного объекта (класса), с сокрытием деталей реализации от внешнего мира.
Основные цели инкапсуляции:
- Защита данных: Предотвращение прямого, неконтролируемого доступа к внутреннему состоянию объекта. Доступ к данным осуществляется только через публичные методы (геттеры и сеттеры), что позволяет добавить логику валидации.
- Сокрытие реализации: Пользователю класса предоставляется только публичный интерфейс (набор методов), а внутренняя "кухня" остается скрытой. Это упрощает использование класса и снижает сложность системы.
- Повышение гибкости и сопровождаемости: Внутреннюю реализацию класса можно изменить в любой момент, не затрагивая код, который его использует, при условии, что публичный интерфейс остается неизменным.
Пример на Python:
class BankAccount:
def __init__(self, initial_balance: float):
# Атрибут __balance "приватный" благодаря двум подчеркиваниям (name mangling)
self.__balance = initial_balance
# Публичный метод для получения баланса (геттер)
def get_balance(self) -> float:
return self.__balance
# Публичный метод для внесения средств с валидацией
def deposit(self, amount: float):
if amount <= 0:
print("Сумма пополнения должна быть положительной.")
return
self.__balance += amount
# Использование класса
account = BankAccount(1000)
# Корректное изменение состояния через публичный метод
account.deposit(500)
print(f"Текущий баланс: {account.get_balance()}") # Вывод: 1500
# Попытка прямого доступа к данным приведет к ошибке
# print(account.__balance) # AttributeError
В этом примере мы не можем напрямую изменить __balance, а только через метод deposit, который контролирует корректность вносимой суммы.