В предыдущем посте мы говорили о наследовании, теперь давайте разберемся, как и зачем прятать детали реализации внутри класса.
Что такое инкапсуляция?
Инкапсуляция — это способ скрыть внутреннюю реализацию объекта и предоставить только нужный интерфейс для взаимодействия с ним. Проще говоря, это как интерфейс микроволновки: ты видишь кнопки, но не знаешь, что происходит внутри.
В языке Dart инкапсуляция реализуется через:
▫️Приватные переменные (с помощью _)
▫️Публичные методы и геттеры/сеттеры для доступа к данным
Зачем нужна инкапсуляция?
Инкапсуляция делает код:
✔️безопасным — защищает данные от нежелательных изменений
✔️удобным — скрывает детали реализации, оставляя только то, что нужно пользователю класса
✔️контролируемым — ты решаешь, как и при каких условиях можно изменять данные
Пример инкапсуляции
class BankAccount {
double _balance = 0.0;
double get balance => _balance;
void deposit(double amount) {
if (amount > 0) _balance += amount;
}
void withdraw(double amount) {
if (amount > 0 && amount <= _balance) _balance -= amount;
}
}
void main() {
final account = BankAccount();
account.deposit(100);
account.withdraw(30);
print(account.balance);
}Что тут происходит:
▪️_balance — скрытая реализация. Никто не может напрямую изменить баланс
▪️balance — только для чтения. Пользователь может узнать, сколько денег на счете
▪️deposit и withdraw — контролируют доступ к изменению данных (инкапсуляция в действии)
Надеюсь, стало немного яснее, как работает инкапсуляция и почему она так важна. В следующем посте разберем еще один принцип ООП — абстракцию.
