有人能简单解释OOP环境中的方法与函数吗?
当前回答
方法和功能之间有明显的区别:
函数是一段独立的代码,您可以在任何地方调用它,只需在给定的参数中提及它的名称,就像在大多数过程语言(如C++和python)中一样。虽然
方法与对象具体相关,这意味着您只能在调用方法之前使用点(.)符号提及它的对象,就像在C#和java等纯面向对象语言中一样。
其他回答
函数是一组可以用来处理数据的逻辑。
而Method是一个用于处理其所属对象的数据的函数。因此,从技术上讲,如果您有一个与您的类不完全相关但在类中声明的函数,那么它不是一个方法;这被称为糟糕的设计。
方法位于对象上或在类中是静态的。函数独立于任何对象(并且在任何类之外)。
对于Java和C#,只有方法。对于C,只有函数。
对于C++和Python,这取决于您是否在类中。但在基本英语中:
功能:独立功能。方法:做某事的一种方式,它有不同的方法或方法,但与同一方面(也称为类)相关。
类上的方法作用于类的实例,称为对象。
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"
}
}
面向对象范例背后的思想是“处理”软件由。。好的“对象”。现实世界中的对象具有财产,例如,如果您有一个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示例。
IMHO的人只是想发明一个新词,当他们想引用对象内部的函数时,可以更方便地在程序员之间进行交流。
如果你说的是方法,你指的是类内的函数。如果你说的是函数,那么你的意思只是类之外的函数。
事实上,这两个词都用来描述函数。即使你用错了,也不会发生任何错误。这两个词都很好地描述了您希望在代码中实现的目标。
函数是一个代码,它必须扮演一个做某事的角色(一个函数)。方法是解决问题的方法。
它也做同样的事情。这是同样的事情。如果你想超精确并遵循惯例,你可以调用方法作为对象内部的函数。