Что такое инкапсуляция в ООП и каковы ее цели

Ответ

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

Основные цели инкапсуляции:

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

Пример на 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, который контролирует корректность вносимой суммы.