Будем немного дидактичны здесь ...
У аксессоров есть два аспекта:
- Работа в синтаксисе языка
- Цель общения
Существует также третий аспект, который часто игнорируется, и он заключается в изящной обработке изменений. Моя статья, на которую вы ссылаетесь, касается этой последней точки, но ничего не говорит вам о двух других.
Попытка справиться с изменениями в синтаксисе языка, который вы используете, - это в основном техническая проблема, которая поддается нескольким советам, собранным на веб-странице с небольшим количеством кода для ее резервного копирования.
Самым сложным аспектом является передача намерений, и способ сделать это - придерживаться идиом языка. К сожалению, в C ++ синтаксис несколько мешает этому, поэтому у нас есть такие вещи, как .size () для коллекций и .first и .second для пар. Все они являются аксессорами, но синтаксис меняется в зависимости от реализации - ой.
Теперь eJames говорит о том, что публичные члены нарушают инкапсуляцию. Является ли член публичным или нет, не имеет ничего общего с инкапсуляцией. Инкапсуляция - это продукт проектирования объектов и элементов управления, доступных для дизайнера классов на языке, который они используют. Это то, что я более подробно изучил в статье «Инкапсуляция - хорошая вещь ™» (этот сайт пока не позволит мне добавить ссылку, но, думаю, это не так уж сложно для Google).
Что оставляет нас в том, что в C ++ производный атрибут должен использовать синтаксис вызова метода. Не производное поле не обязательно, но вы можете выбрать, если хотите. Если вы используете синтаксис вызова метода, вы должны написать метод-оболочку самостоятельно. Не сложно, но это, безусловно, добавляет к количеству строк. Я попытался показать способ использования языка шаблонов C ++ для абстрагирования кода доступа. Это не совсем успешно, но оно справляется со многими вариантами использования.
Что касается того, должны ли мы использовать средства доступа или нет, то проблема в том, что синтаксис C ++ навязывает нам как разработчикам различие между доступом к простым членам и доступом к методам. Это раздражает, но у нас есть некоторые инструменты, чтобы что-то с этим сделать.
Как разработчик библиотеки, я обнаружил, что всегда использование синтаксиса вызова методов помогает мне создавать более надежные API, потому что, если я обнаружу, что хочу заменить простой элемент чем-то более сложным, то это дает мне больше возможностей, которые не делают требует довольно много синтаксиса. Помните, я мог бы абстрагироваться другим способом и сделать «функцию» похожей на значение путем подходящего использования операторов приведения и операторов присваивания - на самом деле, возможно, я попробую это и посмотрю, как я к этому отношусь:)