Language agnostic ';方法';与';消息';与';功能';与'';

Language agnostic ';方法';与';消息';与';功能';与'';,language-agnostic,terminology,Language Agnostic,Terminology,我最近问了一个问题,我称之为“方法调用”。答复提到“信息”。作为一个自学成才的业余程序员,我试图表达一些不会让我看起来像白痴的问题,我意识到我使用的术语揭示了我是如何学会编程的 OO编程中方法/消息等的各种术语之间有区别吗?这是不同的编程语言使用不同的术语来描述相似的概念所产生的差异吗 我似乎记得,在OO之前的语言中,有时会根据是否期望返回值来区分“子例程”和“函数”,但即便如此,这是一种语言对语言的区分吗?我不确定消息术语的起源。我在UML设计中经常遇到消息。对象(UML术语中的参与者)可以通

我最近问了一个问题,我称之为“方法调用”。答复提到“信息”。作为一个自学成才的业余程序员,我试图表达一些不会让我看起来像白痴的问题,我意识到我使用的术语揭示了我是如何学会编程的

OO编程中方法/消息等的各种术语之间有区别吗?这是不同的编程语言使用不同的术语来描述相似的概念所产生的差异吗


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

我不确定消息术语的起源。我在UML设计中经常遇到消息。对象(UML术语中的参与者)可以通过消息相互通信。在现实世界中,消息通常只是一个函数调用。我认为信息是试图与某个物体交流。它可以是真实的消息(如操作系统中的消息)或函数调用。

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

我相信消息在smalltalk中使用


Java、C等倾向于使用方法或实例方法。

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

另一种范式——功能性范式——可能涉及对象类,也可能不涉及对象类,但功能是工作的原子单位

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

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


你所要做的就是使用语言参考所使用的术语来描述你所使用的语言。

我非常肯定(但快速检查似乎可以证实这一点),“消息传递”术语来自Smalltalk社区。我认为它或多或少相当于一个方法调用。

以下是一些简化的定义:

方法/子例程/空洞: 采取行动

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

事件: 在对对象进行操作时调用

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


PS:这是一个很好的例子,说明为什么SO应该支持DL/DT/DD标记。

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

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


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

我认为这是一个优先考虑的问题。你提到的词在今天的语言中基本上是同义词,如果你说“方法”或“函数”,大多数人会理解你的意思。如果您使用“message”(仅在OOP中使用),那么您可能会混淆您试图传达的内容。例如:“我需要创建一条消息来发送电子邮件。”其他可能是同义词的术语,但这不是一个完整的列表,包括子例程、动作、过程、操作(尽管通常是数学性质的)、子程序、,命令…

消息=方法=功能

在OOP中,不同的对象可能具有绑定到同一消息的不同方法

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

消息:对象通过消息进行通信

-对象发送和接收消息

-对消息的响应是执行一个方法

-要使用的方法是在运行时确定接收器


在C++方法和消息中,P>称为<强>函数成员。< /强>

< P> <强>方法< /强>:类似于传统语言

函数
消息:与传统语言中的参数传递类似

在面向对象的实现(如C#)中,“消息”的概念实际上并不作为显式语言结构存在。你不能只看一段特定的代码就说“有消息。”

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

对于Smalltalk等其他实现,您可以看到正在传递的消息,并且接收对象能够处理该消息


有些库位于C#等语言之上,这些语言试图恢复语言的显式消息传递感觉。为了好玩,我自己做了一个:

起源于Smalltalk的一个老设计。Alan Kay简单地玩弄了并发的参与者模型,让每个对象都有自己的参与者在自己的线程中运行。在那个系统中,方法调用实际上是异步消息发送。这种设计很快就被还原了,但术语却没有