Sobes.tech
Назад к вопросам
Junior — Middle
58

Можете объяснить, что означает инкапсуляция в объектно-ориентированном программировании?

Компании, где спрашивали
Сибирские Технологические Решения

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Инкапсуляция — это принцип, при котором внутреннее состояние объекта скрыто, а доступ к нему идет через публичный интерфейс. Это позволяет контролировать изменения данных и не давать внешнему коду ломать объект напрямую. В C# обычно это достигается через private поля и public свойства или методы.

Определение:

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

Пример использования:

public class BankAccount
{
    private decimal balance;

    public decimal Balance => balance;

    public void Deposit(decimal amount)
    {
        if (amount <= 0)
            throw new ArgumentException("Сумма должна быть положительной.");

        balance += amount;
    }

    public void Withdraw(decimal amount)
    {
        if (amount <= 0)
            throw new ArgumentException("Сумма должна быть положительной.");

        if (amount > balance)
            throw new InvalidOperationException("Недостаточно средств.");

        balance -= amount;
    }
}

Пояснение кода:

Код показывает, как balance скрыт внутри класса и недоступен для прямого изменения извне. Чтобы пополнить или снять деньги, нужно вызвать методы Deposit и Withdraw, которые проверяют входные данные и не дают нарушить правила объекта. Свойство Balance только читает значение, но не позволяет записать его напрямую.

Ключевые моменты:

  • Инкапсуляция скрывает внутреннюю реализацию объекта.
  • Доступ к данным ограничивается через методы и свойства.
  • Это помогает защитить объект от некорректного использования.
  • Инкапсуляция упрощает поддержку и изменение кода без поломки внешних вызовов.
  • В C# чаще всего реализуется через private, public, свойства и методы.