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