有人能简单解释OOP环境中的方法与函数吗?
当前回答
类上的方法作用于类的实例,称为对象。
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"
}
}
其他回答
类是一些数据和函数的集合,可以选择使用构造函数。
在创建该特定类的实例(副本、复制)时,构造函数初始化该类并返回一个对象。
现在类成为对象(没有构造函数)&函数在对象上下文中称为方法。
所以基本上
类<==new==>对象
函数<==new==>方法
在java中,构造函数的名称通常与类名相同,但实际上,构造函数类似于实例块和静态块,但具有用户定义的返回类型(即class类型)
而类可以具有静态块、实例块、构造函数、函数对象通常只有数据和方法。
“method”是“function”的面向对象词。这几乎就是它的全部(即,没有真正的区别)。
不幸的是,我认为这里的很多答案都在延续或推进一种观点,即存在一些复杂而有意义的差异。
真的-没有那么多,只是对同一件事用不同的词。
[后期添加]
事实上,正如BrianNeal在对这个问题的评论中指出的那样,C++标准在引用成员函数时从不使用“方法”一词。有些人可能认为这表明C++并不是真正的面向对象语言;然而,我更倾向于将其作为一种迹象,即一群相当聪明的人并不认为有特别强烈的理由使用不同的术语。
面向对象范例背后的思想是“处理”软件由。。好的“对象”。现实世界中的对象具有财产,例如,如果您有一个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示例。
根据我的理解,方法是可以在类上执行的任何操作。它是编程中使用的通用术语。
在许多语言中,方法由函数和子程序表示。大多数语言用于这些的主要区别是,函数可能会返回一个值给调用者,而子程序可能不会。然而,许多现代语言只有函数,但这些函数可以选择不返回任何值。
例如,假设你想描述一只猫,你希望它能够打哈欠。您将使用Yawn方法创建一个Cat类,这很可能是一个没有任何返回值的函数。
方法是类的函数。用正常的术语来说,人们在各处交换方法和功能。基本上,您可以将它们视为相同的东西(不确定全局函数是否称为方法)。
http://en.wikipedia.org/wiki/Method_(计算机科学)
推荐文章
- 在支持循环和函数的语言中,是否存在“goto”的合法用例?
- 为什么不使用异常作为常规的控制流呢?
- 如何在方法中访问“静态”类变量?
- 什么是序列化?
- 为什么c#不提供c++风格的'friend'关键字?
- String, StringBuffer和StringBuilder
- 存储库和服务层的区别?
- 每个递归都可以转换成迭代吗?
- 缓冲区是什么意思?
- DDD -实体不能直接访问存储库的规则
- 为什么STL如此严重地基于模板而不是继承?
- 如何在Objective-C中声明类级属性?
- 面向方面编程与面向对象编程
- 什么是ORM,它是如何工作的,我应该如何使用它?
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?