方法,消息和消息传递之间的区别/关系是什么?

时间:2017-10-19 09:16:16

标签: oop

我记得在youtube中听到过如下话题:“消息定义对象行为”,“消息传递是OOP远比国家更重要的概念”,“设计你的对象如何通过嘲弄来互相交谈”,但是从我能做到的发现,一些OO语言不支持消息传递,但不知何故,我也猜测消息传递是一个更广泛的概念和思维方式而不是语言特征。

从我可以收集的信息来看,传递消息的语言(Ruby,Objective-C和Smalltalk)与不支持消息的语言(Java,C#,...)之间的主要区别在于,第一种,一种可以向任何对象发送任何消息,然后该对象将在内部选择通过将其分派给某个内部方法来响应该消息,即我们从不直接调用方法,我们只是向对象发送消息,其余内部发生。 现在,根据惯例,如果不等于内部方法名称,消息的名称将是相似的,因此有时提供我们直接在对象上调用方法的“幻觉”。

Objective-C(对我来说)有一个奇怪的语法(据说是从Smalltalk复制过来的)所以我无法理解它的大部分解释,但我记得写在它上面,将消息传递给一个对象没有等效的命名公共方法,甚至没有引发异常,只是忽略了消息。

这种理解是否正确无论如何。您是否可以对此进行更多阐述,并将其与其工作原理或适用于(如)PHP等非支持语言相关联。

1 个答案:

答案 0 :(得分:1)

如果你读了Alan Kay(那个提出术语"面向对象"编程的人)says的内容,他似乎非常重视消息传递方面到了他建议将其称为“消息导向”#34;编程。

他还强调了后期绑定的重要性。这就是我认为方法调用的区别。消息基本上是火,忘了事。它们不是静态(早期)绑定,我们不确定对象是否可以或应该处理该消息。方法调用通常用于静态语言,其中绑定发生在编译时。

在Java和C#中,"消息"在对象之间,对象的接口或API比内部结构重要得多。所以我们仍然试图在大多数情况下这样做。

除此之外,静态绑定或后期绑定是否有助于系统增长的问题我认为是一个悬而未决的问题,尽管Alan Kay似乎肯定是在这个论点的后期绑定方(消息方面)。