方法,功能,操作,程序,子程序有什么确切的区别?

时间:2015-04-10 00:40:00

标签: oop theory

OOP中是否有这些术语的官方定义? 或者他们只是随着时间的推移而进化,取决于你以前的计算机科学教育(甚至你的年龄)你使用其中一种?

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

Difference between a method and a function

  

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

     

方法是通过名称关联的一段代码   用一个对象。

功能程序

What is the difference between a "function" and a "procedure"?

  

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

     

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

     

在大多数编程语言中,甚至函数都可以有一组   命令。因此,差异仅在于返回值部分。

即使作者的定义存在细微差别,主要方面似乎是:方法总是在对象上运行,而不是功能,它通过参数传递给它的所有数据。如果函数未返回值,则称为过程

子程序,特别是操作如何与这些条款相关联?

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

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

1 个答案:

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