Основная причина не просто сделать переменную общедоступной, во-первых, состоит в том, что если вы сделаете ее общедоступной, то позже вы создадите больше головной боли.
Например, один программист пишет общедоступные методы получения и установки вокруг закрытой переменной-члена. Три месяца спустя ему нужно убедиться, что переменная никогда не «устанавливается» на ноль. Он добавляет проверку в методе «setFoo (...)», и все попытки установить переменную будут проверены на «установку его на ноль». Дело закрыто и без особых усилий.
Другой программист понимает, что размещение общедоступных методов получения и установки вокруг закрытой переменной-члена нарушает дух инкапсуляции, он видит бесполезность методов и решает просто сделать общедоступной переменную-член. Возможно, это немного повышает производительность, или, может быть, программист просто хочет «написать так, как он используется». Три месяца спустя ему нужно убедиться, что переменная никогда не «устанавливается» на ноль. Он просматривает каждый доступ к переменной, эффективно просматривая всю кодовую базу, включая весь код, который может получить доступ к переменной через отражение. Это включает в себя все сторонние библиотеки, которые расширили его код, и все вновь написанные модули, которые использовали его код после того, как он был написан. Затем он либо изменяет все вызовы, чтобы гарантировать, что переменная никогда не будет установлена в нуль. Дело никогда не закрывается, потому что он не может эффективно найти все доступы к незащищенному участнику и не имеет доступа ко всему стороннему исходному коду. С несовершенным знанием недавно написанных модулей, опрос гарантированно будет неполным. Наконец, он не контролирует будущий код, который может получить доступ к общедоступному члену, и этот код может содержать строки, которые устанавливают переменную-член в значение null.
Конечно, второй программист может затем разбить весь существующий код, поместив методы «get» и «set» вокруг переменной и сделав ее закрытой, но он мог бы сделать это три месяца назад и спасти себя от объяснения, почему ему нужно было взломать код всех остальных.
Называйте это как хотите, но использование общедоступных методов "get" и "set" вокруг закрытой переменной-члена является защитным программированием, которое было достигнуто многолетним (т.е. десятилетним) опытом.