Задать вопрос
@Khetag_d

Обьясните в чём суть инкапсуляции?

Я не могу понять в чём суть инкапсуляции?
Тоесть мы создаём переменную с доступом private которым можно манипулировать внутри класса где он создан , и создаём метод внутри этого же класса (геттер и сеттер) и потом в мэйне через метод манипулируем private переменными .
Но как это защищает ?
Тоесть это тупо создаёт что то вроде тонеля через который можно обратиться к переменным , но тем не менее к ним можно обратиться и манипулировать ими , и как это обеспечивает безопасность? Хакер так же по сути может просто обратиться к методу и вертеть всем как хочет, не?
  • Вопрос задан
  • 762 просмотра
Подписаться 3 Средний 11 комментариев
Решение пользователя Василий Банников К ответам на вопрос (6)
Инкапсуляция защищает не от хакеров, а от неправильного использования объектов.
Как пример - у тебя может быть класс "Заказ" и у него может быть какой-то статус (оплачен/ждёт оплаты/отменён итд).
При этом у тебя могут быть правила типа: уже оплаченный заказ не может стать вдруг неоплаченным, а отменённый заказ нельзя взять обратно в работу.
Тогда логично будет сделать поле статуса приватным (не доступным для изменения извне напрямую), а менять его только через методы, где будет происходить вся валидация.
(В некоторых языках такие правила принято описывать на уровне типов, чтобы даже валидаций никаких было делать не нужно)

Приватные поля объекта - это его состояние.
Методы объекта - это способы его использования.

Если у тебя в объекте появляется поле x и методы getX / setX (или авто геттеры/сеттеры в C#), то значит, что у тебя и нет явных причин делать это поле приватным, кроме соблюдения общепринятых соглашений.
Ответ написан