Одним из самых больших преимуществ объектно-ориентированного программирования является инкапсуляция, и одна из "истин", которую мы (или, по крайней мере, я) преподавала, состоит в том, что члены должны всегда быть частными и доступны через методы доступа и мутатора, что обеспечивает возможность проверки и проверки изменений.
Мне любопытно, насколько важно это на практике. В частности, если у вас есть более сложный член (например, коллекция), может быть очень заманчиво просто сделать его общедоступным, а не создавать кучу методов для получения ключей коллекции, добавления/удаления элементов из коллекции, и др.
Вы следуете правилу в целом? Изменяется ли ваш ответ в зависимости от того, написано ли это код для себя и каким другим? Есть ли еще более тонкие причины, по которым мне не хватает этой обфускации?