如何使对象在 OOP 中进行交互?

How are objects made to interact in OOP?

我正在尝试了解对象交互的编程方式。

我想我理解了一个基本原理,即一个对象具有可以访问其数据并可以更改它的方法。但是,如果两个对象交互并且 object1 所做的某事必须改变 object2 的状态怎么办。

假设你有一个 Person 对象和一个 Ball 对象,Person 必须踢球,从而改变球的坐标。

会不会像这样:

person.kick(ball)

其中 person.kick 看起来像

kick(whatToKick) {
  whatToKick.changeCoord();
}

这完全正确吗?

一个对象的状态是否应该只能通过它自己的方法来改变?

对象交互的模式是否总是:

  1. 将对象 1 的引用传递给对象 2
  2. 让对象 2 的方法调用对象 1 的方法来检索或更改对象 1 的状态?

此外,如果有人能推荐一本关于 OOP 原则和设计模式的书,那将是非常好的。

谢谢。

基本上你写的是正确的:

  1. 对象的状态只能由该对象的方法修改。否则你将不得不使状态 public 并失去封装。

  2. 如果对象A需要调用对象B的方法,需要引用对象B,不然怎么调用方法

但更重要的是:您似乎假设 OOP 就是关于修改对象的状态。不幸的是,许多介绍都给了这种印象。但事实并非如此。可变状态会导致很多问题,使程序更难阅读和测试。幸运的是,您可能需要的大部分内容都可以使用不可变对象来完成。只是 google 不变性。我还建议看一下以不变性为标准的函数式编程。

(我不会回答你的最后一个问题,因为它在这里是题外话。)