自封装有什么好处?
What are the benefits of self encapsulation?
在阅读一些重构实践时,我偶然发现了 this article
作者主张用 getter 和 setter 修改下面的代码,我认为它们应该是 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;}
假设,出于某种原因,您需要将 class 属性的名称从 _low
、_high
更改为 _min
、_max
。在第一个版本中,您还需要修改 includes()
函数。在第二个版本中你只需要修改 getters。在您的示例中,好处很小,但在更大的示例中 class 它可以为您节省很多工作。
一个稍微复杂一点的例子,其中不再存储上限值,而是从下限值和一个区间派生:
private int _low, _interval;
boolean includes (int arg) {
return arg >= getLow() && arg <= getHigh();
}
int getLow() {return _low;}
int getHigh() {return _low + _interval;}
同样你只需要修改 getter.
关于开销:根据您使用的语言,您的编译器将优化函数调用。
在阅读一些重构实践时,我偶然发现了 this article
作者主张用 getter 和 setter 修改下面的代码,我认为它们应该是 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;}
假设,出于某种原因,您需要将 class 属性的名称从 _low
、_high
更改为 _min
、_max
。在第一个版本中,您还需要修改 includes()
函数。在第二个版本中你只需要修改 getters。在您的示例中,好处很小,但在更大的示例中 class 它可以为您节省很多工作。
一个稍微复杂一点的例子,其中不再存储上限值,而是从下限值和一个区间派生:
private int _low, _interval;
boolean includes (int arg) {
return arg >= getLow() && arg <= getHigh();
}
int getLow() {return _low;}
int getHigh() {return _low + _interval;}
同样你只需要修改 getter.
关于开销:根据您使用的语言,您的编译器将优化函数调用。