“方法”作为OOP中的特殊术语从何而来?


13

“方法”是面向对象编程中的一个特殊术语。有谁知道这个单词何时开始以这种特殊含义使用,并且与什么编程语言或定量学习的其他分支有关?

Answers:


11

Java和C#从C ++获取方法,而C ++从Simula获取

大陵五可能有作用于西穆拉:

另外,MIT ALGOL版本AED-0将数据结构(该方言中的“ plex”)直接与过程链接在一起,预定义了后来称为“消息”,“方法”和“成员函数”的内容。


3
IIRC,C ++通常更喜欢“成员函数”而不是“方法”。
tdammers

根据同一篇Wikipedia文章,该术语的产生(与OOP有关)在60年代上半叶之内。
图兰斯·科尔多瓦

2

很难找到一个确定的答案,但是第一种将事物称为方法的语言似乎是Simula,尽管这很可能是错误的或可追溯的。鉴于函数(来自数学)和过程(也来自数学)以编程语言显示,我能想到的最好的是“方法”是“方法论”的简写形式。

所有这些都是子程序,它们构成了计算机程序的代码。我以为选择“方法”是因为OOP风格编程的思想是尽可能重用代码。因此,您可以有一个过程,但有一种方法可以使它更加清楚地表明它是一种新的工作方式。老实说,我已经知道调用方法函数,并且听说过称为方法的函数。


6
恐怕您不正确地“数字化”- 方法(实现目标的过程)和方法论(研究)具有不同的含义。
JK

1
另外,“方法”作为英语单词已经存在很长时间了。无需寻找更长的单词来与之联系。
Steve314 2011年

在使用“函数”而不是“方法”时,这在很大程度上是C ++的错误,并且由于C没有“过程”的概念,因此只有返回的“函数” void。C ++成员函数与普通函数非常相似(与Simula不同)-具有隐式this参数,并且(可能)运行时分配机制并不会真正改变您要处理的内容。我不知道C是否首先将函数和过程视为同一事物,但是Pascal(一种较新的语言)具有functionprocedure关键字-尽管是IIRC,但Pascal函数可能会产生副作用。
Steve314,2011年

具体来说,方法是一种实现目标,描述/知识而不是过程本身的方法。这与定义一个对象类型的另一个抽象概念“类”有关。您将获得一类对象以及对每个对象进行X的方法,只要它们属于该类即可。您将通用方法应用于特定对象,并获得特定于该对象的结果。
SF。

1

数十年来,我一直在寻找有关此方面的信息。到目前为止,我的猜测是该术语是从数值计算的特殊子字段引入Simula的,在该子字段中,通常将实现函数的特定算法(例如,特征值或其他)称为方法。这是因为您可能会采用各种折衷方法,使用各种不同的数值方法来计算同一数学函数。在OOP中,由于方法的重载,您可能为类适当地实现了“相同”功能-例如,对于CircleRectangle来说area的实现都不同,它们都是Shapes,具有一个Area。这似乎是对传统数值方法概念的合理扩展。


0

在OOP历史上,我对这个词的词源一无所知。但我知道这不是推论(可推论)。一个更好的术语(一个更演绎术语或MDT)可能是反应行动


2
我完全确定我不同意你的看法。“方法”是一个完整的单词,它代表了整个事物的开始,是一种建模各种事物的方式,每个“事物”都是一个类,具有改变事物的方式的方法。就像方法改变现实世界中的事物一样。
Vatine 2011年

我猜想“方法”最初描述的是实现代码,类似于“过程”-用于计算结果的方法/过程/算法。将其用于未知实现的接口是一个有点奇怪的问题,但是最初(在Simula中)“消息”可能用于此目的。即使这样,当您调用方法时,即使您不知道(在调用站点)哪个实现,也要调用实现代码。
Steve314

1
我猜这三个词是“函数”,“过程”和“方法”,“函数”具有数学含义(将输入映射到输出),“过程”势在必行(执行一​​系列步骤,在同一步骤中也使用在军事意义上); “方法”没有任何内涵,这可能就是为什么它在OOP中被首选的原因。
tdammers

@Vatine +1“ cromulent”
MattDavey 2011年

-1

具有REAL BASIC,VBx和VB.net背景的程序员都知道两种类型的方法声明“ FUNCTION”和“ SUB”。BASIC系列语言允许使用“ FUNCTION”关键字和“ SUB”关键字声明函数。两者之间的区别在于,“ FUNCTION”可以返回或不会返回值,而作为“ SUB”仅执行代码而不会返回任何值。但是随着OO概念的出现,术语sub和function开始作为方法互换使用。


2
这同样适用于帕斯卡的过程/函数
MCHL

3
VB使用“功能”和“子”,是“子程序”而不是“方法”的缩写。
蚂蚁

5
我怀疑Alan Kay在提出OOP和Smalltalk时是否在思考“基本”问题
-Maglob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.