digital-garden/dev/architecture/Инкапсуляция.md
Struchkov Mark 1536a6c68c
All checks were successful
continuous-integration/drone/push Build is passing
Обновление
2024-09-27 20:25:32 +03:00

4.4 KiB
Raw Blame History

aliases tags date zero-link parents linked
инкапсуляцию
инкапсуляции
maturity/🌱
2024-09-27
../../meta/zero/00 Архитектура ПО
../garden/ru/dev/architecture/ООП

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

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

  • Сокрытие данных: Внутренние детали реализации объекта, такие как его состояние или внутренние методы, не должны быть доступны напрямую из внешнего кода. Это позволяет избежать прямого изменения данных объекта извне и защищает его от некорректного использования.
  • Чёткие интерфейсы: Объект предоставляет только те методы и свойства, которые необходимы для работы с ним, скрывая всю сложную внутреннюю логику. Это упрощает работу с объектом и делает его использование безопасным.
  • Управляемое изменение состояния: Изменение состояния объекта происходит через методы, которые контролируют корректность этих изменений и могут проводить валидацию, логику или вызовы других методов.

Частые ошибки:

  • Избыточная доступность: Если данные и методы не скрыты должным образом, это приводит к увеличению связности компонентов и нарушению принципа инкапсуляции.
  • Смешивание ответственности: Когда внутренние данные объекта предоставляются другим компонентам, появляется риск того, что ответственность за управление состоянием будет распределена между разными частями системы.

Пример инкапсуляции

Представьте, что у вас есть объект BankAccount, который хранит баланс пользователя. Чтобы обеспечить безопасность, прямой доступ к балансу невозможен. Вместо этого объект предоставляет методы deposit() и withdraw(), которые корректно изменяют баланс и проверяют возможность транзакции:

public class BankAccount {
    private double balance;
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    
    public void withdraw(double amount) {
        if (amount > 0 && balance >= amount) {
            balance -= amount;
        }
    }
    
    public double getBalance() {
        return balance;
    }
}

Таким образом, инкапсуляция помогает управлять состоянием объекта, делая его использование безопасным и устойчивым к ошибкам.


Мета информация

Область:: ../../meta/zero/00 Архитектура ПО Родитель:: ООП Источник:: Создана:: 2024-09-27 Автор::

Дополнительные материалы

Дочерние заметки