有人能简单解释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示例。
类是一些数据和函数的集合,可以选择使用构造函数。
在创建该特定类的实例(副本、复制)时,构造函数初始化该类并返回一个对象。
现在类成为对象(没有构造函数)&函数在对象上下文中称为方法。
所以基本上
类<==new==>对象
函数<==new==>方法
在java中,构造函数的名称通常与类名相同,但实际上,构造函数类似于实例块和静态块,但具有用户定义的返回类型(即class类型)
而类可以具有静态块、实例块、构造函数、函数对象通常只有数据和方法。
函数是一段按名称调用的代码。它可以传递数据以进行操作(即参数),也可以选择返回数据(返回值)。传递给函数的所有数据都是显式传递的。
方法是由与对象关联的名称调用的一段代码。在大多数方面,它与函数相同,但有两个关键区别:
方法隐式传递给调用它的对象。方法能够对包含在类中的数据进行操作(记住对象是类的实例-类是定义,对象是该数据的实例)。
(这是一个简化的解释,忽略了范围等问题)
“method”是“function”的面向对象词。这几乎就是它的全部(即,没有真正的区别)。
不幸的是,我认为这里的很多答案都在延续或推进一种观点,即存在一些复杂而有意义的差异。
真的-没有那么多,只是对同一件事用不同的词。
[后期添加]
事实上,正如BrianNeal在对这个问题的评论中指出的那样,C++标准在引用成员函数时从不使用“方法”一词。有些人可能认为这表明C++并不是真正的面向对象语言;然而,我更倾向于将其作为一种迹象,即一群相当聪明的人并不认为有特别强烈的理由使用不同的术语。
类上的方法作用于类的实例,称为对象。
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"
}
}