我最近问了一个关于我称之为“方法调用”的问题。答案提到“消息”。作为一个自学成才的爱好程序员试图用短语来表达那些看起来不像白痴的问题,我意识到我使用的术语揭示了我学习编程的方法。
方法/消息/等的各种术语之间是否有区别。在面向对象编程?这是不同的编程语言使用不同的术语来描述类似的概念吗?
我似乎记得在前OO语言中,有时会根据是否预期返回值来区分“子程序”和“函数”,但即便如此,这是一种逐字逐句的区别?
答案 0 :(得分:18)
我发现这是一种语言和编程范式。一个范例 - OOP - 引用具有成员方法的对象,概念上就是如何向这些对象发送消息(例如,该视图反映在UML中)。
另一个范例 - 功能 - 可能涉及或不涉及对象类,但函数是原子工作单元。
在结构化编程中,你有子程序(注意前缀“sub”意味着结构)。
在命令式编程中(与结构相当重叠,但看待事物的方式略有不同),你对世界有一个更公式化的观点,所以'函数'代表一些操作(通常是数学的)。 / p>
所有你不应该听起来像一个rube就是使用语言参考使用的术语来表示你正在使用的语言。
答案 1 :(得分:11)
<强>信息!=方法!=功能强>
在OOP中,不同的对象可能有不同的方法绑定到同一个消息。
例如:消息“向左旋转n度”将由不同的对象(如形状,圆形,矩形和方形)差别实现。
消息:对象通过消息进行通信。
- 对象发送和接收消息。
- 对邮件的响应正在执行方法。
- 使用的方法是在运行时确定接收者。
在C ++中,方法和消息被称为函数成员。
答案 2 :(得分:3)
我相信消息用于smalltalk。
Java,C#等倾向于使用方法或实例方法。
答案 3 :(得分:3)
我很确定(但快速Wikipedia检查似乎证实了这一点)“消息传递”术语来自Smalltalk社区。我认为它或多或少等同于方法调用。
答案 4 :(得分:2)
“消息”一词可以指向对象发送消息,某些编程语言支持该消息,而其他编程语言则不支持。
如果对象支持该消息,那么它将执行一些代码。否则它会忽略它。这是一种比显式函数/方法调用更动态的方法,其中对象必须支持该函数。
我相信Objective-c使用这种消息传递方法。
答案 5 :(得分:2)
在像C#这样的面向对象实现中,“消息”的概念并不真正作为显式语言构造存在。您无法查看特定的代码并说“有消息。”
相反,对象类的方法意味着其他对象可以发送一种触发该方法中的行为的消息。所以你最终只是直接指定方法,而不是发送消息。
使用像Smalltalk这样的其他实现,您可以看到正在传递的消息,并且接收对象能够处理该消息的内容。
有些库位于C#等语言之上,它们试图将明确的消息传递感觉恢复到语言中。我一直在为自己做一个有趣的事情:http://collaborateframework.codeplex.com/
答案 6 :(得分:0)
我不确定消息术语的来源。大部分时间我在UML设计中遇到消息。对象(UML术语中的Actors)可以通过消息相互通信。在现实世界中,代码消息通常只是一个函数调用。我想到的消息是尝试与某个对象进行通信。它可以是真实的消息(如OS中的消息)或函数调用。
答案 7 :(得分:0)
通常,“方法”似乎是函数的正确名称。但是,每种语言都有自己的关键字。例如,Delphi甚至在返回某些东西的方法(“函数”)和返回Nothing的方法(“程序”)之间产生了区别,而在C-Type语言中,则没有区别。
答案 8 :(得分:0)
以下是一些简化的定义:
<强>方法/子程序/空隙:强> 执行一项行动
<强>功能强> 执行一个动作并返回一个值
<强>事件:强> 在对象被采取行动时调用
<强>处理程序:强> 是处理事件的函数/方法
PS:这是SO应该支持DL / DT / DD标签的一个很好的例子。
答案 9 :(得分:0)
我认为这是一个偏好的问题。你提到的词语在今天的语言中基本上是同义词,并且大多数人会理解你所说的“方法”或“功能”。如果您使用“消息”,它只在OOP中使用,那么您可能会混淆您尝试传达的内容。例如:“我需要创建一条消息来发送电子邮件。”可能是同义词的其他术语,这不是一个完整的列表,是子程序,动作,程序,操作(虽然通常是数学性的),子程序,命令......
答案 10 :(得分:0)
方法:类似于传统语言中的功能
消息:类似于传统语言中的参数传递