OOP 中的消息传递是什么?

What is message passing in OOP?

我一般对消息传递感兴趣。

我读了一些定义,但对我来说它的真正含义仍然完全不清楚和抽象。

现在,MP 的重要性让我印象深刻...

基于

Class 的面向对象编程语言支持由 class 定义的对象。 Class 定义包括成员数据。 消息传递是面向对象语言中的一个关键概念(如果不是关键概念的话)

所以,有人可以通过一些类比或一些例子向我解释什么是(尽可能)清楚的英语传递的消息。

我确实有大约一年的编程经验,但主要是在 CodeAcademy,还有各种书籍、youtube 视频和维基百科文章。

假设您有两个对象。把它们想象成铁盒子。它们内部有各种机制和逻辑,但你无法从盒子外面看到它。他们封装那个逻辑。对于外部观察者(例如彼此),它们是 "black box".

这些框有一些可观察的(和interact-able)属性和操作。也许他们有一些指示灯可以告诉你一些事情(public 属性),或者他们有一些按钮可以在内部做一些事情(方法)并改变这些灯的状态。

盒子 A 知道盒子 B。它持有对它的引用。在这个类比中,它基本上有一些机械接口,可以到达盒子 B 并按下上面的按钮。盒子 A 知道盒子 B 可以做盒子 A 想要发生的特定事情。盒子 A 不能到达盒子 B 的内部并使用它的逻辑(机制)自己做这件事。这将违反封装并使 Box A 过于依赖 Box B。

(这是因为此时盒子A实际上取决于盒子B的内部机制。它只取决于界面。如果你要构建一个全新的盒子 B-1 有完全不同的做事方式,但包含在同一个熨斗 shell 中,具有相同的按钮和灯,盒子 A 永远不需要知道这些。盒子 B 和盒子 B -1 公开相同的 接口 因此它们的内部不需要知道。)

相反,Box A 需要向 Box B 发送消息。假设 Box B 需要一些信息才能执行此操作。 (想象一下,例如,信用卡 reader 或类似的东西。盒子在内部做某事,但它首先需要来自外部源的一些数据。)当盒子 A 在盒子 B 上调用此操作时,它提供这条信息。 (它是在 Box B 上调用一个方法,并向该方法提供一个参数。)

如果操作具有 return 值,则框 B(或框 B-1,无关紧要)会响应该信息。有效地将消息 back 传递给 Box A(或调用其操作的任何人,这无关紧要)。


这是一个复杂的类比来描述本质上只是,好吧,调用方法。但在大多数情况下,事实就是如此。有更复杂的情况,也有可以做更有趣事情的语言。例如,在某些情况下,消息的结构可能不一定是已知的。与 Java/C#/etc 相对。结构静态已知的方法签名。

但最终,基本上您拥有的是相互调用操作、向这些操作发送信息以及从这些操作接收信息的封装对象。

在面向对象的方法中,对象自己做事情。 "message" 是告诉对象做某事时使用的术语。

相反的是过程方法,代码从别处获取一些信息,然后根据提供的信息采取行动。

考虑 http://aryehoffman.com/reference/action-object-principle/

处的图表