如何使对象在 OOP 中进行交互?
How are objects made to interact in OOP?
我正在尝试了解对象交互的编程方式。
我想我理解了一个基本原理,即一个对象具有可以访问其数据并可以更改它的方法。但是,如果两个对象交互并且 object1 所做的某事必须改变 object2 的状态怎么办。
假设你有一个 Person 对象和一个 Ball 对象,Person 必须踢球,从而改变球的坐标。
会不会像这样:
person.kick(ball)
其中 person.kick 看起来像
kick(whatToKick) {
whatToKick.changeCoord();
}
这完全正确吗?
一个对象的状态是否应该只能通过它自己的方法来改变?
对象交互的模式是否总是:
- 将对象 1 的引用传递给对象 2
- 让对象 2 的方法调用对象 1 的方法来检索或更改对象 1 的状态?
此外,如果有人能推荐一本关于 OOP 原则和设计模式的书,那将是非常好的。
谢谢。
基本上你写的是正确的:
对象的状态只能由该对象的方法修改。否则你将不得不使状态 public 并失去封装。
如果对象A需要调用对象B的方法,需要引用对象B,不然怎么调用方法
但更重要的是:您似乎假设 OOP 就是关于修改对象的状态。不幸的是,许多介绍都给了这种印象。但事实并非如此。可变状态会导致很多问题,使程序更难阅读和测试。幸运的是,您可能需要的大部分内容都可以使用不可变对象来完成。只是 google 不变性。我还建议看一下以不变性为标准的函数式编程。
(我不会回答你的最后一个问题,因为它在这里是题外话。)
我正在尝试了解对象交互的编程方式。
我想我理解了一个基本原理,即一个对象具有可以访问其数据并可以更改它的方法。但是,如果两个对象交互并且 object1 所做的某事必须改变 object2 的状态怎么办。
假设你有一个 Person 对象和一个 Ball 对象,Person 必须踢球,从而改变球的坐标。
会不会像这样:
person.kick(ball)
其中 person.kick 看起来像
kick(whatToKick) {
whatToKick.changeCoord();
}
这完全正确吗?
一个对象的状态是否应该只能通过它自己的方法来改变?
对象交互的模式是否总是:
- 将对象 1 的引用传递给对象 2
- 让对象 2 的方法调用对象 1 的方法来检索或更改对象 1 的状态?
此外,如果有人能推荐一本关于 OOP 原则和设计模式的书,那将是非常好的。
谢谢。
基本上你写的是正确的:
对象的状态只能由该对象的方法修改。否则你将不得不使状态 public 并失去封装。
如果对象A需要调用对象B的方法,需要引用对象B,不然怎么调用方法
但更重要的是:您似乎假设 OOP 就是关于修改对象的状态。不幸的是,许多介绍都给了这种印象。但事实并非如此。可变状态会导致很多问题,使程序更难阅读和测试。幸运的是,您可能需要的大部分内容都可以使用不可变对象来完成。只是 google 不变性。我还建议看一下以不变性为标准的函数式编程。
(我不会回答你的最后一个问题,因为它在这里是题外话。)