2016-04-16 4 views
1

При чтении некоторых методов рефакторинга я наткнулись this articleКаковы преимущества самоинкапсуляции?

Автор аргументы, чтобы изменить код ниже с геттер и сеттеры, я думаю, что они должны быть private, но в любом случае то, что польза в этом? разве мы не вводим служебные вызовы функции?

До:

private int _low, _high; 
boolean includes (int arg) { 
    return arg >= _low && arg <= _high; 
} 

После:

private int _low, _high; 
boolean includes (int arg) { 
    return arg >= getLow() && arg <= getHigh(); 
} 
int getLow() {return _low;} 
int getHigh() {return _high;} 

ответ

2

Допустим, по какой-то причине вам необходимо изменить имена вашего класса атрибутов от _low, _high в _min, _max. В 1-й версии вам также необходимо изменить функцию includes(). Во второй версии вам нужно только модифицировать геттеры. В вашем примере преимущество мало, но в большем классе это может сэкономить вам много работы.

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

private int _low, _interval; 
boolean includes (int arg) { 
    return arg >= getLow() && arg <= getHigh(); 
} 
int getLow() {return _low;} 
int getHigh() {return _low + _interval;} 

Опять же вам нужно только изменить геттер.

Касательно накладных расходов: в зависимости от языка, который вы используете, ваш компилятор будет оптимизировать вызов функции.

Смежные вопросы