Подтвердить что ты не робот

Почему вы объявляете метод getters и seters частным?

Я видел код, в котором методы getters и seters объявляются закрытыми. Я пытаюсь понять логику, стоящую за ней, и мне действительно трудно понять, почему вы объявляете их закрытыми? Это точно противоположно тому, чего мы пытаемся достичь через геттеры и сеттеры.

4b9b3361

Ответ 1

Я могу думать о нескольких причинах:

  • вы хотите предотвратить доступ общественности в будущем.

Если другой программист видит ваш код и хочет получить доступ к переменной, но нет сеттеров и геттеров, он может подумать, что вы просто забыли о них и добавили их сами. Однако, если вы объявите их как private, это выражение о намерениях, в котором говорится, что я не хочу, чтобы эти переменные были изменены или доступны извне.

  • вы хотите связать настройку и получение других действий.

Скажите, что вы не хотите, чтобы аксессоры public. Но, возможно, вам нужно подсчитать, сколько раз изменена личная переменная. Легче использовать установщик, а не увеличивать счетчик каждый раз, когда вы обращаетесь к этой переменной.

  • вам нужна центральная точка доступа

Опять же, вам не нужен доступ public, но во время отладки вы можете поместить точку останова в каждом месте, в котором изменяется член private. Поэтому вместо того, чтобы устанавливать точки останова во всем классе, вы просто устанавливаете его в accessor.

Ответ 2

Это точно противоположно тому, чего мы пытаемся достичь через геттеры и сеттеры.

Собственно, это не так. Причина объявления геттеров и сеттеров заключается в том, чтобы скрыть поля. Это делается для предотвращения нежелательной связи; то есть клиенты API в зависимости от деталей реализации API. (Эта связь может быть проблематичной по ряду причин.)

Причиной того, чтобы сделать геттеры и сеттеры приватными, является предоставление соответствующей части абстрактного состояния объекта частным. Это в значительной степени не зависит от решения использовать геттеры и сеттеры или нет.

В то время как случай использования геттеров и сеттеров не столь силен для частного государства, все еще есть ощутимые выгоды. Например:

  • Методы getter/setter предоставляют место для добавления дополнительного поведения или кода проверки ошибок.

  • Они также предоставляют место для добавления кода отладки или ввода тестового кода (для модульного тестирования).

  • Getters и seters могут быть переопределены. Вы не можете делать это с полями (private или нет).