Я видел код, в котором методы getters и seters объявляются закрытыми. Я пытаюсь понять логику, стоящую за ней, и мне действительно трудно понять, почему вы объявляете их закрытыми? Это точно противоположно тому, чего мы пытаемся достичь через геттеры и сеттеры.
Почему вы объявляете метод getters и seters частным?
Ответ 1
Я могу думать о нескольких причинах:
- вы хотите предотвратить доступ общественности в будущем.
Если другой программист видит ваш код и хочет получить доступ к переменной, но нет сеттеров и геттеров, он может подумать, что вы просто забыли о них и добавили их сами. Однако, если вы объявите их как private
, это выражение о намерениях, в котором говорится, что я не хочу, чтобы эти переменные были изменены или доступны извне.
- вы хотите связать настройку и получение других действий.
Скажите, что вы не хотите, чтобы аксессоры public
. Но, возможно, вам нужно подсчитать, сколько раз изменена личная переменная. Легче использовать установщик, а не увеличивать счетчик каждый раз, когда вы обращаетесь к этой переменной.
- вам нужна центральная точка доступа
Опять же, вам не нужен доступ public
, но во время отладки вы можете поместить точку останова в каждом месте, в котором изменяется член private
. Поэтому вместо того, чтобы устанавливать точки останова во всем классе, вы просто устанавливаете его в accessor.
Ответ 2
Это точно противоположно тому, чего мы пытаемся достичь через геттеры и сеттеры.
Собственно, это не так. Причина объявления геттеров и сеттеров заключается в том, чтобы скрыть поля. Это делается для предотвращения нежелательной связи; то есть клиенты API в зависимости от деталей реализации API. (Эта связь может быть проблематичной по ряду причин.)
Причиной того, чтобы сделать геттеры и сеттеры приватными, является предоставление соответствующей части абстрактного состояния объекта частным. Это в значительной степени не зависит от решения использовать геттеры и сеттеры или нет.
В то время как случай использования геттеров и сеттеров не столь силен для частного государства, все еще есть ощутимые выгоды. Например:
-
Методы getter/setter предоставляют место для добавления дополнительного поведения или кода проверки ошибок.
-
Они также предоставляют место для добавления кода отладки или ввода тестового кода (для модульного тестирования).
-
Getters и seters могут быть переопределены. Вы не можете делать это с полями (private или нет).