@JustMoose
Программист. Радиолюбитель. Прокрастинатор ;)

Зачем использовать бессмысленные сеттеры/геттеры?

Всем привет.
Всякие интересные книжки по плюсам рекомендуют делать доступ к членам класса через методы. В принципе, это имеет некий смысл, потому что в сеттере можно проверить, а чего же нам дали, и нет ли в значении ошибки. Опять таки, можно из того же сеттера уведомить окружающих, обновить, к примеру GUI... Ну а геттер нужен просто в пару, чтобы можно было читать не изменяя (минуя сеттер или вообще).

Однако, иногда я замечаю вот такое:
class BlaBlaBla {
public:
  URLID id() const { return id_; }
  void set_id(URLID id) { id_ = id; }
...


И никак не могу понять, зачем это? На мой вкус это что-то сродни Overengineering-а и не несёт никакого смысла.

Или я ошибаюсь?
  • Вопрос задан
  • 497 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Когда вам потребуется добавить в сеттер валидацию, а в геттер - кэширование, то не придется менять вызовы в клиентском коде. К тому же, аксессоры можно делать виртуальными.

IDE прекрасно генерирует такой код, равно как и он сам легко оборачивается в макрос. Многие компиляторы так же имеют языковые расширения, позволяющие реализовать properties в C++.
Ответ написан
Комментировать
Значение может быть, например, приватным. И мы хотим быть уверены что там всегда именно то, что мы ожидаем, геттеры и сеттеры, как и многий сахар, просто предотвращают ошибки/невнимательность программиста
Ответ написан
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Причин может быть достаточно много.
1. Что если сегодня поле расположено в виде закрытой переменной, а завтра будет доставаться из HTTP-ответа ?
2. Что если сегодня оно в виде хранимого значения, а завтра станет вычисляемым?
3. Что если сегодня оно в этом классе, а завтра решили перенести в другой, а чтобы не делать слишком большой рефакторинг пока решили оставить как есть?
4. Что если сегодня это свойство этого класса, а завтра родительского?

Причин множество! Геттеры и сеттеры спасают от головных болей.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час