Кто-нибудь. Для чего конкретно нужна инкапсуляция? Какой в ней смысл? Можно ли без нее?
Зачем вообще делать атрибуты в классах закрытыми(приватными), какой в этом смысл? Наверно, без конкретного хорошего примера в программе это понять трудно для чего инкапсуляция. Ну создали мы атрибуты и что дальше? Какие вообще переменные стоит закрывать, и какой в этом смысл? Не хотят вызывать они эти 'приватные' методы, так не вызывайте, только какой смысл их закрывать, разве что эти подчеркивания только для формальности(будто это электрическая или механическая начинка и пользователю это знать не нужно(ссылаюсь пример с кофемолкой)), но ведь пользователь не производитель(разработчик, программист), его это не касается и оно его и так не коснется. Без хорошего примера, может, в каком-нибудь проекте или в программе полезность инкапсуляции понять сложновато.
Пусть каждый, читающий этот вопрос, напишет свое мнение и как он это понимает. Спасибо.
Ответы (2 шт):
Полезность хорошей инкапсуляции (в паблик смотрят только методы) состоит в том, что в программе уменьшается связность между классами.
Это позволяет с меньшей вероятностью появления ошибок править конкретные классы, не трогая остальные.
Пользователи класса (в данном случае, это программисты, которые вызывают методы) при таком подходе меньше рискуют получить WTF-эффект - неинтуитивное поведение класса после того, как ему поменяют поля извне.
Предствьте, что в вашем рабочем столе есть ящик с докуметом. К вам подходят люди и просят вас туда что-то записать. У вас есть свой подход к хранению, и добавлению записей. Кроме того вы иногда достаете этот документ оттуда и расчитываете что записи в нем будут вам понятны, потмоу что вы их сами туда занесли.
И тут кто-то в обход вас берет и не учитывая ваш подход вносит изменение. Когда вы снова туда залезете это как минимум поставит вас в тупик а как максимум приветет к краху всей организации.
Вы - это методы объекта. Пока поле (ящик) было икапсулировано, риск того что состояние объекта придет в неожиданное вами состояние отсутвтсует. Как только поле стало открытым всем появился риск создания неконсистентного состояния (например изменение одних полей должны соотв-но влиять на другие)