自封装有什么好处?

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.

关于开销:根据您使用的语言,您的编译器将优化函数调用。