OOP中是否有这些术语的官方定义? 或者他们只是随着时间的推移而进化,取决于你以前的计算机科学教育(甚至你的年龄)你使用其中一种?
到目前为止,我发现了方法与功能的良好定义:
Difference between a method and a function
函数是一段按名称调用的代码。 ...传递给函数的所有数据都是显式传递的。
方法是通过名称关联的一段代码 用一个对象。
功能与程序:
What is the difference between a "function" and a "procedure"?
函数返回一个值,一个过程只执行命令。
过程是一组可以按顺序执行的命令。
在大多数编程语言中,甚至函数都可以有一组 命令。因此,差异仅在于返回值部分。
即使作者的定义存在细微差别,主要方面似乎是:方法总是在对象上运行,而不是功能,它通过参数传递给它的所有数据。如果函数未返回值,则称为过程。
但子程序,特别是操作如何与这些条款相关联?
编辑:由于这似乎太宽,这是尝试缩小范围:方法,程序和功能在我以前的研究中非常清楚。子程序也不再那么含糊了。
所以问题是:计算机科学领域的操作是什么?
答案 0 :(得分:2)
以下是我的理解。请注意,这些都是“软”定义 - 没有任何官方定义,因此确切含义可能因语言而异。 (例如,Java和C#中的“静态方法”不适合我对“方法”的定义,除非您将类视为对象)
子例程是“您可以随时调用的一些代码”。它实际上是一个由其他例程调用的例程(因此是一个子例程)。 “子程序”和“常规”似乎是相当古老的术语。
想想BASIC的GOSUB指令:(更别提BASIC是一种可怕的语言)
10 PRINT "Hello"
20 GOSUB 100
30 PRINT "Goodbye"
40 GOSUB 100
50 END
100 PRINT "World"
110 RETURN
打印:
Hello
World
Goodbye
World
程序与子程序相同,但不太古老。
函数就像一个过程,但它不仅仅是一个命令列表,而是可以获取参数并返回一个值。您应该熟悉来自多种语言的函数,但这是C ++中的一个示例:
#include <iostream>
using namespace std;
int calculate(int a, int b) {
return a + b - 2;
}
int main() {
cout << calculate(5, 2) << endl;
cout << calculate(100, 20) << endl;
int i = calculate(5, 1);
for(int k = 0; k < i; k++) // repeat the next line i times
cout << "Hello" << endl;
}
打印:
1
78
Hello
Hello
请注意,函数calculate
不会自行打印 - 相反,它会返回main
可以选择打印的数字,或者执行其他操作。对calculate
的第三次调用返回2,但不打印2 - 而是确定打印“Hello”的次数。
没有参数的函数不返回任何内容,相当于一个过程(或子程序)。
方法是一个可以在对象上调用的函数。您可能熟悉Java或C#中的非静态方法。方法可以访问调用它的对象的状态(称为 receiver )。
与函数不同,方法通常是接收器类型的多态 - 当你进行方法调用时,不可能直接看到将运行哪个命令序列。
Java中一个简单的方法示例,演示了多态性:
class Car {
int getNumberOfWheels() {return 4;}
void printNumberOfWheels() {
System.out.println(getNumberOfWheels());
}
}
class HondaCivic extends Car {
// no code here
}
class ReliantRobin extends Car {
int getNumberOfWheels() {return 3;}
}
class Main {
public static void main(String[] args) {
Car h = new HondaCivic();
Car r = new ReliantRobin();
h.printNumberOfWheels();
r.printNumberOfWheels();
}
}
打印:
4
3
即使您可能认为printNumberOfWheels
始终打印4 - 子类可以“拦截”getNumberOfWheels
方法调用。