使用getter和setter(只获取和设置)而不是简单地为这些变量使用公共字段有什么好处?
如果getter和setter所做的不仅仅是简单的get/set,我可以很快地解决这个问题,但我不是100%清楚如何做到:
public String foo;
比:
private String foo;
public void setFoo(String foo) { this.foo = foo; }
public String getFoo() { return foo; }
而前者需要的样板代码要少得多。
来自数据隐藏的获取者和设置者。数据隐藏意味着我们正在向外部人员或外部人员/事物隐藏无法访问的数据这是OOP中一个有用的特性。
例如:
如果您创建了一个公共变量,您可以访问该变量并在任何地方(任何类)更改值。但如果创建为私有,则该变量无法在除声明的类之外的任何类中查看/访问。
public和private是访问修饰符。
那么我们如何在外部访问该变量:
这是获得者和获得者的地方。您可以将变量声明为private,然后可以为该变量实现getter和setter。
示例(Java):
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name= name;
}
优势:
当任何人想要访问或更改/设置平衡变量的值时,他/她必须获得许可。
//assume we have person1 object
//to give permission to check balance
person1.getName()
//to give permission to set balance
person1.setName()
您也可以在构造函数中设置值,但稍后需要时要更新/更改值,必须实现setter方法。
如果您不需要任何验证,甚至不需要维护状态,即一个属性依赖于另一个属性,那么当一个属性发生更改时,我们需要维护状态。您可以通过公开字段而不使用getter和setter来保持简单。
我认为OOP会随着程序的增长而使事情变得复杂,这对于开发人员来说是一场噩梦。
一个简单的例子;我们从xml生成c++头。标头包含不需要任何验证的简单字段。但仍然像OOPS访问器一样,我们生成它们的方式如下。
const Filed& getfield() const
Field& getField()
void setfield(const Field& field){...}
这是非常冗长的并且不是必需的。一个简单的
struct
{
Field field;
};
足够且可读。函数式编程没有数据隐藏的概念,它们甚至不需要它,因为它们不会改变数据。