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

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

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

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

Если у тебя в объекте появляется поле x и методы getX / setX (или авто геттеры/сеттеры в C#), то значит, что у тебя и нет явных причин делать это поле приватным, кроме соблюдения общепринятых соглашений.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Steel_Balls
@Steel_Balls
0KLRiyDQv9C40LTQvtGALiDQmNC00Lgg0L3QsNGF0YPQuQ==
Суть инкапсуляции - защита внутренних данных класса от изменения извне.
Допустим, ты нарушил этот принцип и сделал поля класса доступными для изменения из любой точки кода напрямую.
Отсюда возникают очевидные проблемы с невозможностью контролировать все эти процессы - кто откуда когда и зачем пытается изменить данные внутри класса.
При реализованной инкапсуляции у нас такой проблемы нет - все данные внутри класса под полным контролем.
При чём здесь вообще хакеры?
ООП, ШП, методологии разработки - это всё создано для разработчиков ПО, а не для хакеров.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Инкапсуляция не имеет никакого отношения к хакерам.

Это просто свойство объекта иметь оболочку, которая защищает объект от неправильных изменений.
Неправильные изменения это например корректировка одного поля, которое на самом деле
функционально связанно со всеми другими полями. Например строка и контрольная сумма к строке.
Или время и часовой пояс времени. Или иммутабельность объекта.
Ответ написан
Комментировать
liaFcipE
@liaFcipE
В основном это защита от самого себя и своих коллег-обезъян. В первую очередь это контроль доступа, предотвращение кривого изменения состояния объекта и наконец возможность изменять внутреннюю реализацию без изменения внешнего интерфейса.

Например, чтобы какой-то Вася напрямую где-то не расчитал баланс юзера в минус при покупке чего либо, т.к. у тебя в сеттере/методе покупке есть валидация на это дело и тебе ее не нужно везде копипастить, и если например так же валидация поменяется, ты ее поменяшь в одном месте, а не будешь бегать по проекту все места менять. Ну и тестировать такой код проще, меньше шансов где-то накосячить.

Это не про защиту от хакеров.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы