Цель инкапсуляции двойная:
- Объединение связанных функций;
- Управление доступом к полям и методам, которые участвуют в предоставлении функциональности.
Цель методов получения и установки состоит в том, чтобы гарантировать, что субъекты вне кода (или класса) имеют только одну точку взаимодействия с вашими полями, таким образом поддерживая инварианты . Это помогает в:
- Предотвращение изменения значений недопустимым / недопустимым способом, который может нарушить функциональность.
Пример: два внешних участника пытаются изменить баланс вашего счета одновременно;
- Локализация аспекта кода, который может измениться в будущем.
Пример: Простое разрешение изменить тип переменной состояния с логического значения на enum в будущем, поскольку к нему всегда обращаются из метода получения в классе;
- Реализация бизнес-правил, если таковые имеются, которые необходимо применять при внесении изменений в ваши поля.
Пример. Не разрешать классу двигателя изменять и устанавливать скорость вашего класса автомобилей на отрицательное значение только потому, что автомобиль движется задним ходом.