Сделайте данные общедоступными. В (довольно маловероятном) случае, когда вам когда-нибудь понадобится логика в «getter» или «setter», вы можете изменить тип данных на прокси-класс, который перегружает operator=
и / или operator T
(где T = любой тип вы используете сейчас) для реализации необходимой логики.
Редактировать: идея о том, что управление доступом к данным представляет собой инкапсуляцию, в основном ложна. Инкапсуляция - это скрытие деталей реализации (в общем!) , а не , контролирующих доступ к данным.
Инкапсуляция дополняет абстракцию: абстракция имеет дело с внешне видимым поведением объекта, в то время как инкапсуляция имеет дело со скрытием деталей того, как это поведение реализовано.
Использование метода получения или установки на самом деле снижает уровень абстракции и предоставляет реализацию - для этого требуется, чтобы клиентский код осознавал, что этот конкретный класс реализует то, что логически «данные», в виде пары функций ( геттер и сеттер). Использование прокси, как я предлагал выше, обеспечивает инкапсуляцию real - за исключением одного неясного углового случая, он полностью скрывает тот факт, что то, что логически представляет собой часть данных, фактически реализуется через пара функций.
Конечно, это нужно держать в контексте: для некоторых классов «данные» вообще не являются хорошей абстракцией. Вообще говоря, если вы можете обеспечить более высокий уровень операций вместо данных, это предпочтительнее. Тем не менее, существуют классы, для которых наиболее используемая абстракция - это чтение и запись данных - и в этом случае (абстрагированные) данные должны быть видны как любые другие данные. Тот факт, что получение или установка значения может включать не просто копирование битов, является деталью реализации, которая должна быть скрыта от пользователя.