方法、函数、操作、过程、子程序的定义有什么确切的区别



OOP中有这些术语的官方定义吗?还是它们只是随着时间的推移而演变,根据你以前受过的计算机科学教育(甚至你的年龄),你会使用其中一种?

到目前为止,我发现了方法函数的良好定义:

方法和函数之间的区别

函数是一段按名称调用的代码。…传递给函数的所有数据都是显式传递的。

方法是由关联的名称调用的一段代码使用对象。

函数程序

";函数";和一个";程序";?

函数返回一个值,过程只执行命令。

过程是一组可以按顺序执行的命令。

在大多数编程语言中,即使函数也可以有一组命令。因此,区别仅在于返回值部分。

即使作者的定义有细微的差异,主要方面似乎是:方法总是对对象进行操作,而函数则通过其参数将所有数据传递给它。如果函数没有返回值,则称为过程

但是子程序,尤其是操作是如何与这些术语联系在一起的?

编辑:由于这似乎太宽泛了,这里有一个缩小范围的尝试:方法、程序和功能从我以前的研究中非常清楚。子程序也不再那么含糊了。

所以问题是:在计算机科学领域,什么是操作

以下是我的理解。请注意,这些都是"软"定义——其中任何一个都没有官方定义,因此确切含义可能因语言而异。(例如,Java和C#中的"静态方法"不符合我对"方法"的定义,除非你认为类是对象)

  • 子例程是"可以随时调用的一些代码"。它实际上是一个被其他例程调用的例程(因此是一个子例程)。"子程序"one_answers"例程"似乎是相当古老的术语。

    想想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
    

    在Visual Basic中,子程序或Sub是一个不返回任何内容的函数。

  • 过程与子程序是一样的,但不那么过时。

    过程也可以指不返回任何内容的函数。

  • 函数类似于一个过程,但它可以接受参数并返回值,而不仅仅是一个命令列表。您应该熟悉许多语言中的函数,但这里有一个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;
    }
    

    此打印:

    5
    118
    Hello
    Hello
    Hello
    Hello
    

    请注意,函数calculate本身并不进行打印,而是返回一个数字,main可以选择打印该数字或使用该数字进行其他操作。对calculate的第三次调用返回2,但2没有打印出来——相反,它决定了打印"Hello"的次数。

    一个没有参数、不返回任何结果的函数相当于一个过程(或子例程)。

  • 方法是一个可以在对象上调用的函数。您可能熟悉Java或C#中的非静态方法。方法可以访问其调用对象的状态(称为接收器)。

    与函数不同,方法在接收器的类型上通常是多态的-在进行方法调用时,无法直接查看将运行哪个命令序列。

    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方法调用。

最新更新