有人能简单解释OOP环境中的方法与函数吗?


当前回答

面向对象范例背后的思想是“处理”软件由。。好的“对象”。现实世界中的对象具有财产,例如,如果您有一个Employee,则该员工具有姓名、员工id、职位、他属于某个部门等。

对象还知道如何处理其属性并对其执行一些操作。比方说,如果我们想知道员工现在在做什么,我们会问他。

employe whatAreYouDoing.

“whatAreYouDoing”是发送给对象的“消息”。对象知道如何回答这些问题,据说它有解决问题的“方法”。

因此,对象必须公开其行为的方式称为方法。因此,方法是工件对象必须“做”的事情。

其他可能的方法有

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

另一方面,函数是编程语言计算某些数据的方式,例如,您可以使用返回16的函数addValues(8,8)

// pseudo-code
function addValues( int x, int y )  return x + y 
// call it 
result = addValues( 8,8 )
print result // output is 16...

由于第一批流行的编程语言(如fortran、c、pascal)没有涵盖OO范式,所以它们只调用这些工件“函数”。

例如,C中的先前函数将是:

int addValues( int x, int y ) 
{
   return x + y;
}

说一个对象有一个“函数”来执行某些操作是不“自然”的,因为函数更多地与数学相关,而雇员几乎没有数学知识,但你可以有与函数完全相同的方法,例如在Java中,这将是等效的addValues函数。

public static int addValues( int x, int y ) {
    return x + y;
}

看起来很眼熟?这是因为Java源于C++,而C++源于C。

最后只是一个概念,在实现中它们看起来可能是一样的,但在OO文档中,它们被称为方法。

下面是Java中以前的Employee对象的示例。

public class Employee {

    Department department;
    String name;

    public String whatsYourName(){
        return this.name;
    }
    public String whatsYourDeparmentsName(){
         return this.department.name();
    }
    public String whatAreYouDoing(){
        return "nothing";
    } 
    // Ignore the following, only set here for completness
    public Employee( String name ) {
        this.name = name;
    }

}

// Usage sample.
Employee employee = new Employee( "John" ); // Creates an employee called John

// If I want to display what is this employee doing I could use its methods.
// to know it.
String name = employee.whatIsYourName():
String doingWhat = employee.whatAreYouDoint();

// Print the info to the console.

 System.out.printf("Employee %s is doing: %s", name, doingWhat );

Output:
Employee John is doing nothing.

那么,区别就在于应用它的“领域”。

AppleScript有一种“自然语言”matphor的概念,在某种程度上OO也有这种想法。例如Smalltalk。我希望在阅读了这篇文章之后,您可以更容易地理解对象中的方法。

注意:代码不是要编译的,只是作为示例。请随意修改文章并添加Python示例。

其他回答

方法是任何对象或类的成员。函数是独立的。

但在Javascript的情况下,函数和方法是可互换的。

为了我:如果我同意:

函数可以返回值可能需要参数

就像任何一段代码一样,你可能有你放入的对象,你可能会有一个作为结果出现的对象。在这样做的过程中,他们可能会改变对象的状态,但这不会改变他们对我的基本功能。

调用对象或其他代码的函数时可能存在定义差异。但这不就是语言差异的原因吗?这就是为什么人们会互换它们?上面提到的计算示例我会小心处理。因为我雇佣员工来计算:

new Employer().calculateSum( 8, 8 );

通过这样做,我可以依靠雇主负责计算。如果他想要更多的钱,我会让他自由,让碳水化合物收集者处理闲置员工的职能来完成剩下的工作,并雇佣一名新员工。

即使争论一个方法是一个对象函数,而一个函数是不相连的计算,这也无助于我。函数描述符本身以及理想的函数文档将告诉我它需要什么以及它可能返回什么。其余的,比如操纵某个对象的状态,对我来说并不是真正透明的。我确实希望函数和方法都能传递和操纵它们所声称的内容,而不需要详细了解它们是如何做到的。即使是纯计算函数也可能更改控制台的状态或附加到日志文件。

以下是使用JavaScript示例对方法与函数的一些解释:

测试(20,50);是函数定义并用于运行某些步骤或返回可以存储/使用的内容。

您可以重用代码:定义一次代码并多次使用它。您可以多次使用相同的代码和不同的参数,以产生不同的结果。

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test=something.test();这里test()可以是某个对象的方法,也可以是为内置对象自定义的原型,这里有更多解释:

JavaScript方法是可以对对象执行的操作。JavaScript方法是包含函数定义的属性。

javascript中字符串的内置属性/方法:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

自定义示例:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

例如,您还可以为String、Array等定义财产

String.prototype.distance=函数(char){var index=this.indexOf(char);如果(索引==-1){console.log(char+“不出现在”+this中);}其他{console.log(char+“是”+(this.length-index)+“字符串末尾的字符!”);}};var something=“ThisIsSomeString”//现在像这样使用distance,运行并检查控制台日志距离(“m”);

一些参考:Javascript对象方法,函数,原型的更多信息

从历史上看,“方法”是不返回值的东西,而“函数”是返回值的,这两者之间可能存在着微妙的区别。每种语言都有自己的具有特殊含义的词汇。

在“C”中,“函数”一词表示程序例程。

在Java中,术语“函数”没有任何特殊含义。而“方法”是指构成类实现的例程之一。

在C#中,这可以翻译为:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

但实际上,我再次重申,这两个概念实际上没有什么不同。如果你在关于Java的非正式讨论中使用“函数”一词,人们会认为你的意思是“方法”并继续下去。不要在有关Java的适当文档或演示中使用它,否则你会看起来很傻。

类上的方法作用于类的实例,称为对象。

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}