什么是OOP中传递的消息?

时间:2016-01-13 11:31:08

标签: oop models channel

我对消息传递很感兴趣。

我读了几个定义,但它仍然完全不清楚,并且抽象了我的真正含义。

现在,让我感到震惊的是,MP至关重要......

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

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

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

2 个答案:

答案 0 :(得分:2)

想象一下,你有两个对象。把它们想象成铁盒子。它们内部有各种各样的机制和逻辑,但你无法从盒子外面看到它。他们封装那个逻辑。对于外部观察者(例如彼此),他们是一个“黑匣子”。

这些 do 框具有一些可观察(且可交互)的属性和操作。也许他们有很少的指示灯告诉你某些事情(公共财产),或者他们有按钮在内部做某事(方法)并改变那些灯的状态。

方框A知道方框B.它有一个参考。在这个类比中,它基本上有一些机械接口,可以到达盒子B并按下它上面的按钮。方框A知道方框B可以完成方框A想要发生的特定事情。方框A无法到达方框B的内部并使用其逻辑(机制)来做事情本身。这将违反封装,并使Box A过于依赖Box B.

(这是因为Box A不是实际,这取决于Box B的内部机制。它只取决于接口。如果你要构建一个全新的Box B-1有完全不同的方式来做它所做的事情,但是包含在相同的铁壳中,具有相同的按钮和灯,盒子A从来不需要知道这一点。盒子B和盒子B-1暴露相同的界面因此不需要知道它们的内部结构。)

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

如果操作具有返回值,则框B(或框B-1,无关紧要)以该信息响应。有效地将消息传回到Box A(或者无论是谁调用它的操作,都无关紧要。)

这是一种复杂的类比,用于描述基本上只是调用方法的内容。但在大多数情况下,这正是它的本质。有更复杂的案例,有些语言可以做更多有趣的事情。例如,有些情况下可能不一定知道消息的结构。而不是Java / C#/等。方法签名,其中结构是静态知道的。

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

答案 1 :(得分:2)

在面向对象的方法中,对象做 自己 。 “消息”是告诉对象做某事时使用的术语。

相反的是程序方法,其中代码在其他地方获取某些信息,然后根据提供的信息进行操作。

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

处的图表