我最近问了一个关于我所说的“方法调用”的问题。答案提到了“消息”。作为一个自学成才的业余程序员,试图提出不让自己看起来像个白痴的问题,我意识到我使用的术语揭示了很多关于我如何学习编程的信息。

方法/消息/等的各种术语之间是否有区别?在面向对象编程中?这是不同编程语言使用不同术语来描述相似概念的差异吗?

我似乎记得在面向对象之前的语言中,有时会根据是否期望返回值来区分“子例程”和“函数”,但即便如此,这是逐个语言的区别吗?

有帮助吗?

解决方案

我发现这是一种语言和编程范式。一种范例 — OOP — 指的是具有成员方法的对象,从概念上讲,这些方法是向这些对象发送消息的方式(例如,此视图反映在 UML 中)。

另一种范式——函数式——可能涉及也可能不涉及对象类,但函数是工作的原子单元。

在结构化编程中,有子例程(请注意,前缀“sub”意味着结构)。

在命令式编程(与结构化编程有很多重叠,但看待事物的方式略有不同)中,您对世界有更公式化的看法,因此“函数”代表某种操作(通常是数学操作)。

为了不听起来像个乡巴佬,你所要做的就是使用你正在使用的语言的语言参考中使用的术语。

其他提示

消息!=方法!=函数

在 OOP 中不同 物体 可能有不同的 方法 绑定到相同的 信息.

例如:消息“向左旋转 n 度”将由不同的对象(例如形状、圆形、矩形和正方形)以不同的方式实现。

留言:对象通过消息进行通信。

- 对象发送和接收消息。

- 对消息的响应正在执行一个方法。

- 使用的方法是在运行时确定接收者。

在 C++ 中,方法和消息被称为 职能成员。

我相信 信息 用于smalltalk。

Java、C# 等倾向于使用 方法 或者 实例方法.

我很确定(但是很快 维基百科 检查似乎证实了这一点)“消息传递”术语来自 Smalltalk 社区。我认为它或多或少相当于方法调用。

“消息”术语可以指向对象发送消息,这在某些编程语言中受支持,而在其他编程语言中则不受支持。

如果对象支持该消息,那么它将执行一些代码。否则它就会忽略它。这是一种比显式函数/方法调用更动态的方法,其中对象必须支持该函数。

我相信 Objective-c 使用了这种消息传递方法。

在像 C# 这样的面向对象实现中,“消息”的概念并不真正作为显式语言构造存在。你不能看着一段特定的代码并说“这就是消息”。

相反,对象类的方法意味着其他对象可以发送某种类型的消息来触发该方法内的行为。因此,您最终只需直接指定方法,而不是发送消息。

使用 Smalltalk 等其他实现,您可以看到正在传递的消息,并且接收对象能够对该消息执行所需的操作。

有些库位于 C# 等语言之上,试图恢复该语言的显式消息传递感觉。为了好玩,我自己做了一份: http://collaborateframework.codeplex.com/

我不确定的起源 信息 术语。我最常遇到的 消息 在UML设计中。对象(UML 术语中的参与者)可以通过以下方式相互通信: 消息. 。在现实世界的代码中 信息 通常只是一个函数调用。我认为消息是尝试与某个对象进行通信。它可以是真实的消息(如操作系统中的消息)或函数调用。

通常,“方法”似乎是函数的正确名称。但是,每种语言都有自己的关键字。例如,Delphi 甚至区分了返回某些内容的方法(“函数”)和不返回任何内容的方法(“过程”),而在 C 类型语言中,没有区别。

以下是一些简化的定义:

方法/子例程/空隙:执行一个动作

功能:执行一个动作并返回一个值

事件:当对象被操作时被调用

处理程序:是处理事件的函数/方法


附:这是为什么 SO 应该支持 DL/DT/DD 标签的完美例子。

我认为目前这是一个偏好问题。您提到的单词在当今的语言中基本上是同义词,并且在大多数情况下,如果您说“方法”或“函数”,人们会理解您的意思。如果您使用仅在 OOP 中真正使用的“消息”,那么您可能会混淆您试图传达的内容。例如:“我需要创建一条消息来发送电子邮件。”其他可能是同义词的术语,这不是一个完整的列表,是子例程,操作,过程,操作(尽管通常数学本质上),子程序,命令...

方法 :类似于传统语言中的函数

信息 :类似于传统语言中的参数传递

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top