"get the object to do it for you"是什么意思?



我在《The Pragmatic programmer》中读到了这条建议。这本书,但我不懂。

如果您需要更改对象的状态,请获取要更改的对象你。

对象状态的含义是什么,如何让对象自己去做?

考虑这个Person类:

class Person {
private String firstName;
private String lastName;
private Integer age;

public void Person(String firstName, String lastName, Integer age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}

public void changeName(String newName, String lastName) {
this.firstName = newName;
this.lastName = lastName;
}

public void celebrateBirthday() {
this.age += 1;
}
}

对象状态的含义

对象的状态是其字段的值。在上面的Person类中,如果创建了一个实例:

Person john = new Person("John", "Smith", 42);

john对象当前的状态为firstName="John"lastName="Smith"age=42

和如何让对象做它自己?

这是流行的OOP格言"告诉,不要问"的另一种措辞。(如果你想的话,你可以在谷歌上搜索到很多点击)。

OOP的主要目标之一是尝试和最小化可变数据的范围。实现这一点的方法之一是将数据隐藏在类中,并且只允许该类上选定数量的公共方法对数据进行修改。在上面的Person类中,改变其状态的唯一方法是通过公共方法changeNamecelebrateBirthday。当您在对象上调用导致该对象状态发生变化的方法时,例如

john.celebrateBirthday();  // John is now one year older!

你正在"让对象自己做"通过调用对象的一个方法。

这与不是要求对象自己通过从其他地方直接改变john的状态形成对比,例如:

public main() {
Person john = new Person("John", "Smith", 42);

// Celebrate birthday.  Just for demonstration.  Doesn't actually work.
john.age += 1;
}

通过减少可变变量的作用域,并使用&;tell, don't ask&;请记住,您通常会使您的程序更容易推理,并且在需要时可能会进行调试。

相关内容

  • 没有找到相关文章

最新更新