Смешивание геттеров / сеттеров и обычных переменных

Я пишу оболочку C ++ для библиотеки C, и поэтому мне нужно использовать методы getter / setter для вызова исходных функций C.

class View {
public:

    GR_COLOR getBackgroundColor();
    void setBackgroundColor(GR_COLOR color);

    GR_COLOR getBorderColor();
    void setBorderColor(GR_COLOR color);
};

Считается ли плохим смешивать этот стиль с обычными переменными, как это?

class View {
public:

    GR_COLOR getBackgroundColor();
    void setBackgroundColor(GR_COLOR color);

    GR_COLOR getBorderColor();
    void setBorderColor(GR_COLOR color);

    int someOtherVariable;
};

person ProtoSphere    schedule 23.10.2011    source источник


Ответы (4)


Если вы определите методы получения и установки для всех своих переменных и сделаете переменные закрытыми, внесение изменений в код в будущем будет намного проще. Это один из принципов, лежащих в основе геттеров / сеттеров в ООП. У людей не будет прямого доступа к вашим участникам, и вам не нужно беспокоиться о том, как они его используют, потому что ВЫ контролируете, как они будут использоваться через геттеры и сеттеры.

Это также будет соответствовать остальной части вашей библиотеки.

Однако в конечном итоге решать только вам. На вашем месте я бы определенно использовал геттеры и сеттеры.

person Zeenobit    schedule 23.10.2011

Не считается плохим стилем иметь геттеры и сеттеры для одних переменных, а не для других. Но добавление геттеров и сеттеров с последующим закрытием переменных для других переменных защитит пользователей вашего класса от будущих изменений во внутреннем устройстве вашего класса.

person ObscureRobot    schedule 23.10.2011

Я бы посчитал это плохим стилем. Почему бы не сделать все ваши переменные частными и не иметь общедоступных геттеров / сеттеров для каждой? Он более подробный, но (я думаю) больше соответствует стилю ООП.

person Andres Riofrio    schedule 23.10.2011

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

person AusCBloke    schedule 23.10.2011