Смешивание геттеров / сеттеров и нормальных переменных - PullRequest
1 голос
/ 23 октября 2011

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

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;
};

Ответы [ 4 ]

3 голосов
/ 23 октября 2011

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

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

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

2 голосов
/ 23 октября 2011

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

2 голосов
/ 23 октября 2011

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

0 голосов
/ 23 октября 2011

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

...