Мой вопрос: зачем мы это делаем?
По сути, поскольку таким образом ограничивая себя , мы делаем это проще ... для себя и других, которым может понадобиться прочитать / изменить код в будущем.... понимать код и то, как различные части взаимодействуют.
Большинство разработчиков понимают код с помощью умственного процесса абстракции;то есть мысленно рисует границы вокруг битов кода, понимая каждый бит изолированно, а затем понимая, как каждый бит взаимодействует с другими битами.Если какая-либо часть кода потенциально может связываться с «внутренностями» любой другой части кода, то типичному разработчику будет трудно понять, что происходит.
Это может бытьпроблема для вас, когда вы пишете код, потому что вы можете сохранить все сложные взаимодействия в своей голове во время создания кода.Но через год или два вы забудете много деталей.И другим людям никогда не приходилось начинать с подробностей.
Почему у меня не должно быть одного класса, модифицирующего глобальные переменные другого класса напрямую?
Потому что это затрудняет понимание вашего кода;смотри выше.Чем больше ваша кодовая база, тем более выраженной будет проблема.
Другой момент заключается в том, что если вы используете чрезмерно глобальные глобальные значения (на самом деле статические), то вы создаете проблемы, если ваш код должен быть многопоточным / реентерабельным., для модульного тестирования, и если вам нужно повторно использовать ваш код в других контекстах.
И даже если вам не нужно, зачем нужны защищенные, закрытые и публичные модификаторы?Как будто программисты не верят себе, что не делают этого, даже если они пишут программу.
Дело не в доверии.Речь идет о выражении в исходном коде, где границы.
Если я пишу класс и объявляю метод или поле private
, я знаю, что мне не нужно рассматривать проблему того, что происходитесли другой класс вызывает его / обращается к нему / изменяет его.Если я читаю чужой код, я знаю, что могу (изначально) игнорировать части private
при отображении взаимодействий и границ.Модификаторы private
и protected
и пакет private обеспечивают различную гранулярность границ.
(Или, может быть, речь идет о доверии; т.е. не доверяет нам до запомнить где границы абстракции в нашем дизайне есть / были.)