¿Cuál es la diferencia entre método y función?

¿Puede alguien proporcionar una explicación simple de los métodos y funciones en el contexto de la POO?

1522
01 окт. willc2 se establece para 01 oct. 2008-10-01 02:45 '08 a las 2:45 am del 2008-10-01 02:45
@ 35 respuestas
  • 1
  • 2

Funcion - Este es un trozo de código que se llama por su nombre. Se pueden pasar los datos para la operación (es decir, los parámetros) y puede devolver los datos (valor de retorno) si es necesario. Todos los datos pasados ​​a la función se transmiten explícitamente.

Un método es un fragmento de código llamado por el nombre asociado con el objeto. En la mayoría de los casos, su función es idéntica, con la excepción de dos diferencias clave:

  • El método pasa implícitamente el objeto al que fue llamado.
  • El método es capaz de trabajar con datos contenidos en una clase (recordando que un objeto es una instancia de una clase, una clase es una definición, un objeto es una instancia de estos datos).

(Esta es una explicación simplificada, ignorando problemas de alcance , etc.)

1587
01 окт. respuesta a Andrew Edgecombe 01 de octubre 2008-10-01 03:00 '08 a las 3:00 2008-10-01 03:00

El método está en el objeto.
La función no depende del objeto.

Para Java, solo hay métodos.
Para C, solo hay funciones.

border=0

Para C ++, esto dependerá de si estás en clase.

892
01 окт. Responder Aaron 01 de octubre. 2008-10-01 02:51 '08 a las 2:51 am del 2008-10-01 02:51

'método' es la palabra orientada a objetos para 'función' . Esto es casi todo lo que es para él (es decir, no hay una diferencia real).

Desafortunadamente, creo que muchas de las respuestas aquí perpetúan o promueven la idea de que hay algún tipo de diferencia compleja y significativa.

De hecho, no tanto para él, solo palabras diferentes para la misma cosa.

[última adición]


De hecho, como Brian Neal señaló en el comentario a esta pregunta , el estándar C ++ nunca usa el término "método" cuando se refiere a funciones miembro. Algunas personas pueden considerar esto como una señal de que C ++ no es un lenguaje orientado a objetos; sin embargo, prefiero considerar esto como una señal de que un grupo bastante inteligente de personas no pensó que había una razón particular para usar otro término.

181
01 окт. Respuesta dada por Michael Burr el 1 de octubre. 2008-10-01 02:48 '08 a las 2:48 2008-10-01 02:48

En general: los métodos son funciones que pertenecen a una clase, las funciones pueden estar en cualquier otra área de código, por lo que puede especificar que todos los métodos sean funciones, pero no todas las funciones son métodos:

Tomemos el siguiente ejemplo de Python:

 class Door: def open(self): print 'hello stranger' def knock_door: a_door = Door() Door.open(a_door) knock_door() 

El siguiente ejemplo muestra una clase llamada "Puerta" que tiene un método o acción llamada "abrir", que se llama método porque se declaró dentro de la clase. Hay otra parte del código con "def" justo debajo, que define una función, esta es una función, porque no está declarada dentro de la clase, esta función llama al método que definimos dentro de nuestra clase, como puede ver, y finalmente Funcionar por sí mismo.

Como puede ver, puede llamar a una función en cualquier lugar, pero si desea llamar a un método, debe pasar un nuevo objeto del mismo tipo que la clase declarada por el método (class .method (objeto)), o debe llamar al método dentro del objeto (object.Method ()), al menos en python.

Piense en los métodos que solo una entidad puede realizar, de modo que si tiene una clase de Perro, tiene sentido tener una función de corteza solo dentro de esta clase, y este será un método si también tiene una clase de Persona que podría tener sentido escribir una función "feed", que no pertenece a ninguna clase, ya que tanto las personas como los perros pueden transmitirse, y puede llamar a esta función, ya que no pertenece a ninguna clase en particular.

83
01 окт. La respuesta la da Gustavo Rubio 01 oct. 2008-10-01 03:33 '08 a las 3:33 am del 2008-10-01 03:33

Una definición muy general de la principal diferencia entre función y método :

Las funciones se definen fuera de las clases y los métodos se definen dentro y en parte de las clases.

37
29 окт. respuesta dada por Jorgesys el 29 de octubre 2014-10-29 02:08 '14 a las 2:08 2014-10-29 02:08

Una manera fácil de recordar:

  • F unción → F ree (Libre significa que no pertenece a un objeto o clase)
  • M ethod → ​​M ember (miembro de un objeto o clase)
29
08 окт. Respuesta dada por Duc Filan el 8 de octubre. 2017-10-08 03:07 '17 a las 3:07 2017-10-08 03:07

Si desea leer aquí, esta es "Mi introducción a los métodos OO"

La idea de un paradigma orientado a objetos es "amenazar" a un software que consiste en ... buenos "objetos". Los objetos en el mundo real tienen propiedades, por ejemplo, si usted tiene un empleado, el empleado tiene un nombre, identificación del empleado, cargo, departamento, etc. Y así sucesivamente

El objeto también sabe cómo manejar sus atributos y realizar algunas operaciones en ellos. Digamos que si queremos saber qué está haciendo el empleado en este momento, le preguntaremos.

 employe whatAreYouDoing. 

Este "whatAreYouDoing" es el "mensaje" enviado al objeto. El objeto sabe cómo responder a estas preguntas, afirma que tiene un "método" para resolver el problema.

Entonces, la forma en que los objetos deben exhibir su comportamiento se llama métodos. Por lo tanto, los métodos de artefactos deben hacer algo.

Otros posibles métodos:

 employee whatIsYourName employee whatIsYourDepartmentsName 

y otros

Por otro lado, las funciones son formas en que un lenguaje de programación debe calcular algunos datos, por ejemplo, puede tener una función addValues ​​(8, 8) que devuelve 16

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

Dado que los primeros lenguajes de programación populares (como fortran, c, pascal) no abrazaron el paradigma OO, solo se refieren a estos "artefactos" de estos objetos.

por ejemplo, la función anterior en C:

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

No se puede decir que un objeto tiene una "función" para realizar alguna acción, porque las funciones están más asociadas con el material matemático, y Worker tiene pocas matemáticas, pero puede tener métodos que hagan exactamente lo mismo que las funciones, por ejemplo, en Java, esta será la función equivalente de addValues.

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

Parece familiar? Esto se debe al hecho de que Java tiene sus raíces en C ++ y C ++ en C.

Al final, esto es solo un concepto, pueden tener el mismo aspecto en la implementación, pero se les llama método en la documentación de OO.

Aquí hay un ejemplo de un objeto Employee anterior en Java.

 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. 

La diferencia entonces está en el "dominio" donde se aplica.

AppleScript tiene una comprensión del matphor del "lenguaje natural", que en algún momento tuvo OO. Por ejemplo, Smalltalk. Espero que te sea más fácil comprender los métodos en los objetos después de leer esto.

NOTA. El código no debe compilarse, solo para servir de ejemplo. Siéntase libre de modificar el mensaje y agregar un ejemplo de Python.

26
01 окт. La respuesta se da OscarRyz 01 oct. 2008-10-01 03:21 '08 a las 3:21 am del 2008-10-01 03:21

En el mundo OO, estos dos se usan comúnmente para significar lo mismo.

Desde un punto de vista puro, la función Math y CS siempre devuelve el mismo resultado cuando se llama con los mismos argumentos (f (x, y) = (x + y)). Un método, por otro lado, generalmente se asocia con una instancia de una clase. Una vez más, la mayoría de los lenguajes OO modernos ya no usan el término "función" en su mayor parte. Muchos métodos estáticos pueden parecer funciones, ya que generalmente no tienen un estado (no siempre es cierto).

16
01 окт. La respuesta está dada por TheSoftwareJedi 01 oct. 2008-10-01 02:56 '08 a las 2:56 am del 2008-10-01 02:56

Digamos que una función es un bloque de código (generalmente con su propio alcance, y algunas veces con su propio cierre), que puede tomar algunos argumentos y también puede devolver un resultado.

Un método es una función que pertenece a un objeto (en algunos sistemas orientados a objetos, es más correcto decir que pertenece a una clase). Al ser un objeto / clase "de propiedad", se refiere a un método a través de un objeto / clase; por ejemplo, en Java, si desea llamar al método "open ()" que pertenece a un objeto "door", debe escribir "door.open ()".

Por lo general, los métodos también reciben algunos atributos adicionales que describen su comportamiento en un objeto / clase, por ejemplo: visibilidad (asociado con el concepto de encapsulación orientado a objetos), que determina de qué objetos (o clases) se puede llamar un método.

En muchos lenguajes orientados a objetos, todas las "funciones" se refieren a un objeto (o clase), por lo que no hay funciones en estos lenguajes que no sean métodos.

14
01 окт. Respuesta dada por Mike Tunnicliffe 01 de octubre 2008-10-01 02:55 '08 a las 2:55 am del 2008-10-01 02:55

Una función o método es un fragmento con nombre llamado que realiza algunas operaciones y no necesariamente devuelve un valor.

En C , se utiliza el término función. La gente de Java y C # dirá este método (y la función en este caso se define dentro de la clase / objeto).

Un programador de C ++ puede llamarlo una función o, a veces, un método (dependiendo de si escriben código de C ++ de procedimiento o hacen una ruta de C ++ orientada a objetos, también es probable que el programador de C / C ++ lo llame una función, porque el término "método" se usa con menos frecuencia en la literatura de C / C ++).

Usas la función simplemente llamando a este nombre, como,

 result = mySum(num1, num2); 


Llamaría a un método refiriéndose primero a su objeto, por ejemplo,

 result = MyCalc.mySum(num1,num2); 
11
06 февр. Respuesta dada por Abdullah Leghari 06 Feb 2014-02-06 08:03 '14 a las 8:03 2014-02-06 08:03

Históricamente, puede haber una diferencia sutil cuando el "método" es algo que no devuelve un valor, y una "función" que lo hace. Cada idioma tiene su propio vocabulario de términos con un significado especial.

En "C", la palabra "función" significa un procedimiento de programa .

En Java, el término "función no tiene un significado especial. Mientras que " método " significa una de las subrutinas que conforman la implementación de la clase.

En C # , que se verá así:

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

Pero en realidad, repito que en 2 conceptos no hay diferencia. Si usa el término "función" en discusiones informales sobre Java, la gente asume que usted quiere decir "método" y continúa. No lo use en documentos o presentaciones relevantes sobre Java, de lo contrario parecerá tonto.

11
12 янв. La respuesta es de Jaimin Patel el 12 de enero. 2016-01-12 05:13 '16 a las 5:13 2016-01-12 05:13

Función - un concepto matemático. Por ejemplo:

 f(x,y) = sin(x) + cos(y) 

dice que la función f () devolverá el pecado del primer parámetro agregado al coseno del segundo parámetro. Es sólo matemáticas. Ya que sin () y cos () también son funciones. La función tiene una propiedad diferente: todas las llamadas de función con los mismos parámetros deben devolver el mismo resultado.

El método, por otro lado, es una función asociada con un objeto en un lenguaje orientado a objetos. Tiene un parámetro implícito: el objeto afectado (y su estado).

Entonces, si tiene un objeto Z con el método g (x), puede ver lo siguiente:

 Zg(x) = sin(x) + cos(Zy) 

En este caso, se pasa el parámetro x, igual que en la función de ejemplo anterior. Sin embargo, el parámetro cos () es el valor que vive dentro del objeto Z. Z, y los datos dentro de él (Zy) son los parámetros implícitos para el método Zg ().

11
01 окт. respuesta dada por Bradley Mazurek 01 de octubre 2008-10-01 03:54 '08 a las 3:54 2008-10-01 03:54

Los métodos son funciones de las clases. En la jerga ordinaria, las personas intercambian un método y una función en todas partes. Básicamente, puede pensar que son lo mismo (no está seguro de que las funciones globales se llamen métodos).

http://en.wikipedia.org/wiki/Method_(computer_science)

10
01 окт. respuesta dada Declaración 01 oct. 2008-10-01 02:52 '08 a las 2:52 am del 2008-10-01 02:52

En lenguajes OO como Object Pascal o C ++, un "método" es una función asociada con un objeto. Por ejemplo, el objeto "Perro" puede tener la función de "ladrar", y esto se considerará un "método". En contraste, la función "StrLen" es independiente (proporciona la longitud de la cadena proporcionada como argumento). Es, por lo tanto, simplemente una "función". Javascript es técnicamente orientado a objetos, pero tiene muchas limitaciones en comparación con un lenguaje completo, como C ++, C # o Pascal. Sin embargo, esta distinción aún tiene que persistir.

Algunos datos adicionales: C # está completamente orientado a objetos, por lo que no puede crear "funciones" autónomas. En C #, cada función está vinculada a un objeto y, por lo tanto, es técnicamente un "método". El factor clave es que pocas personas en C # los llaman "métodos"; simplemente usan el término "funciones" porque no hay una diferencia real.

Finalmente, para que todos los gurús de Pascal no se me acerquen aquí, Pascal también distingue entre "funciones" (que devuelven valor) y "procedimientos" que no lo son. C # no hace esta distinción explícitamente, aunque, por supuesto, puede elegir un valor o no.

7
01 окт. respuesta dada por Mark Brittingham 01 de octubre 2008-10-01 02:59 '08 a las 2:59 am del 2008-10-01 02:59

Métodos de acción de clase en una instancia de una clase llamada objeto.

 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" } } 
7
01 окт. respuesta dada Declaración 01 oct. 2008-10-01 02:57 '08 a las 2:57 2008-10-01 02:57

Como mencionó Python, la siguiente ilustración puede ser una ilustración útil de la relación entre los métodos y los objetos en la mayoría de los lenguajes orientados a objetos modernos. En resumen, lo que llaman "método" es solo una función que toma un argumento adicional (como indican otras respuestas), pero Python lo hace más explícito que la mayoría de los idiomas.

 # perfectly normal function def hello(greetee): print "Hello", greetee # generalise a bit (still a function though) def greet(greeting, greetee): print greeting, greetee # hide the greeting behind a layer of abstraction (still a function!) def greet_with_greeter(greeter, greetee): print greeter.greeting, greetee # very simple class we can pass to greet_with_greeter class Greeter(object): def __init__(self, greeting): self.greeting = greeting # while we're at it, here a method that uses self.greeting... def greet(self, greetee): print self.greeting, greetee # save an object of class Greeter for later hello_greeter = Greeter("Hello") # now all of the following print the same message hello("World") greet("Hello", "World") greet_with_greeter(hello_greeter, "World") hello_greeter.greet("World") 

Ahora compare la función greet_with_greeter y el método greet : la única diferencia es el nombre del primer parámetro (en la función que llamé "greeter", en el método que llamé "self"). Por lo tanto, puedo usar el método de greet de la misma manera que uso la función greet_with_greeter (usando la sintaxis de "punto" para acceder a él, como lo greet_with_greeter dentro de la clase):

 Greeter.greet(hello_greeter, "World") 

Entonces, efectivamente convertí el método en una función. ¿Puedo convertir una función en un método? Bueno, ya que Python te permite comunicarte con las clases una vez que están definidas, prueba:

 Greeter.greet2 = greet_with_greeter hello_greeter.greet2("World") 

Sí, la función greet_with_greeter ahora también se conoce como el método greet2 . Esto muestra la única diferencia real entre un método y una función: cuando llama a un objeto en el método, al llamar a object.method(args) , el lenguaje lo convierte mágicamente en method(object, args) .

(Los puristas de OO pueden argumentar que un método es diferente de una función, y si caes en Python o Ruby avanzado - ¡o Smalltalk! - comenzarás a ver su punto. También algunos idiomas proporcionan acceso especial a bits, pero la diferencia conceptual básica todavía está oculta parámetro opcional.)

7
01 окт. Responder a Sam Stokes 01 de octubre 2008-10-01 04:20 '08 a las 4:20 2008-10-01 04:20

Una función es un conjunto de elementos lógicos que se pueden utilizar para manipular datos.

Mientras que el método es una función que se utiliza para administrar los datos del objeto al que pertenece. Técnicamente, si tiene una función que no está totalmente asociada con su clase, pero que se ha declarado en una clase, esto no es un método; Llamó mal diseño.

7
03 дек. la respuesta la da gian ebao 03 dic. 2008-12-03 12:47 '08 a las 12:47 2008-12-03 12:47

Una función es un conjunto de lógica que se puede utilizar para manipular datos. Mientras que el método es una función que se utiliza para administrar los datos del objeto al que pertenece. Técnicamente, si tiene una función que no está totalmente asociada con su clase, pero que se ha declarado en una clase, esto no es un método; Llamó mal diseño.

7
25 февр. Debaprasad se da el 25 de febrero. 2014-02-25 07:40 '14 a las 7:40 2014-02-25 07:40

Para mí: la función del método y la función coinciden, si estoy de acuerdo con el hecho de que:

  • la función puede devolver valor
  • puede esperar parámetros

Como cualquier pieza de código, puede tener objetos que inserte y puede tener un objeto que aparece como resultado. En el tiempo de ejecución, pueden cambiar el estado de un objeto, pero esto no cambiará su funcionamiento básico para mí.

Puede haber una definición que difiera al llamar a funciones de objetos u otros códigos. ¿Pero no es esto algo para diferencias verbales y por qué las personas las cambian? Un ejemplo de un ejemplo de cálculo, tendría cuidado. Porque contrate empleados para realizar mis cálculos:

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

Por lo tanto, puedo confiar en el hecho de que el empleador es responsable de los cálculos. Si él quiere más dinero, lo liberaré y dejaré que el encargado de la función de deshacerse de los empleados innecesarios haga el resto y obtenga un nuevo empleado.

Incluso afirmando que el método es una función de los objetos, y la función no está relacionada, el cálculo no me ayudará. El descriptor de la función en sí mismo y, idealmente, la documentación de la función me dirá qué necesita y qué puede devolver. El resto, como la manipulación de algún estado del objeto, para mí no es muy transparente. Espero que tanto las funciones como los métodos entreguen y manipulen lo que dicen, sin saber en detalle cómo lo hacen. Incluso una función computacional pura puede cambiar el estado de la consola o agregar al archivo de registro.

6
13 апр. Respuesta dada por Dirk Schumacher el 13 de abril. 2012-04-13 12:50 '12 a las 12:50 pm 2012-04-13 12:50

A mi entender, un método es cualquier operación que se puede realizar en una clase. Este es un término general utilizado en la programación.

En muchos idiomas, los métodos están representados por funciones y subrutinas. La principal diferencia que la mayoría de los idiomas usan para ellos es que las funciones pueden devolver un valor a la persona que llama, y ​​la subrutina puede no funcionar. Однако многие современные языки имеют только функции, но они необязательно не возвращают никакого значения.