"方法"与"消息"与"功能"与" ???"
我最近问了一个有关我所谓的"方法调用"的问题。答案是"消息"。作为一个自学成才的业余程序员,我试图表达那些不会让我看起来像个白痴的问题,因此我意识到,我使用的术语在很大程度上揭示了我如何学习编程。
方法/消息/等的各种术语之间是否有区别?在OO编程中?这是不同的编程语言使用不同的术语来描述相似概念的区别吗?
我似乎记得在OO之前的语言中,有时会根据是否期望返回值来区分"子例程"和"功能",但是即使那样,这是否仍是每种语言的区别?
解决方案
回答
我不确定消息术语的由来。我经常在UML设计中遇到消息。对象(UML术语中的Actor)可以通过消息相互通信。在现实世界中,代码消息通常只是一个函数调用。我认为消息是为了尝试与某个对象进行通信。它可以是真实消息(如OS中的消息)或者函数调用。
回答
通常,"方法"似乎是"函数"的专有名称。但是,每种语言都有其自己的关键字。例如,Delphi甚至在返回某些内容的方法("函数")与什么都不返回(方法"过程")之间有所区别,而在C类型语言中,两者没有区别。
回答
我相信消息是在smalltalk中使用的。
Java,Cetc。倾向于使用方法或者实例方法。
回答
我发现这是一种语言和编程范例。一个范式OOP指的是带有成员方法的对象,这些对象在概念上是我们如何向这些对象发送消息(例如,此视图反映在UML中)。
另一个范式功能可能涉及对象类别,也可能不涉及对象类别,但是功能是工作的原子单元。
在结构化编程中,我们具有子例程(请注意,前缀" sub"表示结构)。
在命令式编程中(与结构化结构有很多重叠,但是看待事物的方式略有不同),我们对世界的看法更为公式化,因此"功能"代表某种操作(通常是数学上的)。
我们所要做的只是听起来不那么麻烦,只是将语言参考所使用的术语用于我们所使用的语言。
回答
我非常确定(但是快速的Wikipedia检查似乎可以确认这一点),"消息传递"术语来自Smalltalk社区。我认为它或者多或者少等同于方法调用。
回答
以下是一些简化的定义:
方法/子例程/无效:
执行动作
功能:
执行动作并返回值
事件:
物体作用时调用
处理程序:
是处理事件的功能/方法
PS:这是SO为什么应支持DL / DT / DD标签的一个完美示例。
回答
"消息"一词可以指的是向对象发送消息,某些编程语言对此提供支持,而其他语言则不支持。
如果对象支持该消息,则它将执行一些代码。否则它将忽略它。与对象必须支持该函数的显式函数/方法调用相比,这是一种更具动态性的方法。
我相信,Objective-c使用这种消息传递方法。
回答
我认为这是目前的优先事项。我们提到的单词基本上是当今语言中的同义词,并且大多数人会说"方法"或者"功能"而理解意思。如果我们使用仅在OOP中真正使用的"消息",那么我们可能会混淆我们试图传达的内容。例如:"我需要创建一条消息来发送电子邮件。"其他可能是同义词的术语,但这不是完整列表,包括子例程,动作,过程,操作(尽管本质上通常是数学上的),子程序,命令...
回答
消息!=方法!=功能
在OOP中,不同的对象可能具有绑定到同一消息的不同方法。
例如:消息"向左旋转n度"将由不同的对象(例如形状,圆形,矩形和正方形)不同地实现。
消息:对象通过消息进行通信。
-对象发送和接收消息。
-对消息的响应正在执行一种方法。
-使用的方法是确定运行时的接收者。
在C ++中,方法和消息称为函数成员。
回答
方法:类似于传统语言中的功能
消息:类似于传统语言中的参数传递