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


¿Alguien puede proporcionar una explicación simple de métodos vs. funciones en contexto OOP?


1447
2017-09-30 23:45


origen


Respuestas:


UN función es una pieza de código que se llama por nombre. Se pueden pasar datos para operar (es decir, los parámetros) y opcionalmente puede devolver datos (el valor de retorno). Todos los datos que se pasan a una función se pasan explícitamente.

UN método es una pieza de código que es llamada por un nombre que está asociado con un objeto. En la mayoría de los aspectos, es idéntica a una función, excepto por dos diferencias clave:

  1. Un método se pasa implícitamente al objeto sobre el que se llamó.
  2. Un método puede operar con datos contenidos en la clase (recordando que un objeto es una instancia de una clase, la clase es la definición, el objeto es una instancia de esa información).

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


1502
2017-10-01 00:00



Un método está en un objeto.
Una función es independiente de un objeto.

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

Para C ++ dependerá de si estás en una clase o no.


871
2017-09-30 23:51



'método' es la palabra orientada a objetos para 'función'. Eso es prácticamente todo lo que hay (es decir, no hay diferencia real).

Desafortunadamente, creo que muchas de las respuestas aquí están perpetuando o avanzando la idea de que existe una diferencia compleja y significativa.

Realmente, no hay mucho para eso, solo palabras diferentes para la misma cosa.

[última adición]


De hecho, como Brian Neal señaló en un comentario a esta pregunta, el estándar de C ++ nunca usa el término 'método' cuando se refiere a funciones de miembros. Algunas personas pueden tomar eso como una indicación de que C ++ no es realmente un lenguaje orientado a objetos; sin embargo, prefiero tomarlo como una indicación de que un grupo bastante inteligente de personas no cree que haya una razón particularmente fuerte para usar un término diferente.


165
2017-09-30 23:48



En general: los métodos son funciones que pertenecen a una clase, las funciones pueden estar en cualquier otro ámbito del código, por lo que podría decirse que todos los métodos son funciones, pero no todas las funciones son métodos:

Tome 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 ejemplo dado muestra una clase llamada "Puerta" que tiene un método o acción llamada "abrir", se llama método porque fue declarada dentro de una clase. Hay otra porción de código con "def" justo debajo que define una función, es una función porque no está declarada dentro de una clase, esta función llama al método que definimos dentro de nuestra clase como puede ver y finalmente la función está siendo llamado 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 en la que se declara el método (Class.method (object)) o debe invocar el método dentro del objeto (object.Method ()), al menos en python.

Piensa en los métodos como cosas que solo una entidad puede hacer, así que si tienes una clase Dog, tendría sentido tener una función ladrar solo dentro de esa clase y eso sería un método, si también tienes una clase Person, podría tener sentido escribe una función "alimentar" para que no pertenezca a ninguna clase ya que tanto humanos como perros pueden ser alimentados y podrías llamar a eso una función ya que no pertenece a ninguna clase en particular.


81
2017-10-01 00:33



Una definición muy general de la principal diferencia entre una Función y un Método:

Las funciones se definen fuera de las clases, mientras que los Métodos se definen dentro y parte de las clases.


35
2017-10-28 23:08



Si tiene ganas de leer aquí, es "Mi introducción a los métodos OO"

La idea detrás del paradigma orientado a objetos es "amenazar" que el software se compone de ... buenos "objetos". Los objetos en el mundo real tienen propiedades, por ejemplo, si tiene un empleado, el empleado tiene un nombre, una identificación de empleado, un puesto, pertenece a un departamento, etc.

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

employe whatAreYouDoing.

Ese "qué estás haciendo" es un "mensaje" enviado al objeto. El objeto sabe cómo responder a esas preguntas, se dice que tiene un "método" para resolver la pregunta.

Entonces, la forma en que los objetos tienen que exponer su comportamiento se llaman métodos. Por lo tanto, los métodos son el objeto artefacto que tiene que "hacer" algo.

Otros posibles métodos son

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Las funciones, por otro lado, son las formas en que un lenguaje de programación tiene que calcular algunos datos, por ejemplo, puede tener la 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 cubrían el paradigma OO, solo llaman a estos artefactos "funciones".

por ejemplo, la función anterior en C sería:

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

No es "natural" decir que un objeto tiene una "función" para realizar alguna acción, porque las funciones están más relacionadas con material matemático, mientras que un empleado tiene poca matemática, pero puede tener métodos que hacen exactamente lo mismo que funciones. por ejemplo, en Java, esta sería la función addValues ​​equivalente.

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

¿Luce familiar? Eso es porque Java tiene sus raíces en C ++ y C ++ en C.

Al final es solo un concepto, en la implementación pueden parecer iguales, pero en la documentación de OO se llaman método.

Aquí hay un ejemplo del 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 la idea de la metáfora del "lenguaje natural", que en algún momento tuvo OO. Por ejemplo, Smalltalk. Espero que te sea más fácil entender los métodos en objetos después de leer esto.

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


26
2017-10-08 00:07



Manera simple de recordar:

  • Función → Free (Gratis significa que no pertenece a un objeto o clase)
  • METROethod → METROEmber (miembro de un objeto o clase)

20
2017-09-30 23:56



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

Desde una perspectiva pura de Math y CS, una función siempre devolverá el mismo resultado cuando se invoque con los mismos argumentos (f (x, y) = (x + y)). Un método por otro lado, típicamente se asocia con una instancia de una clase. Sin embargo, nuevamente, 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 ser bastante similares a las funciones, ya que normalmente no tienen ningún estado (no siempre son verdaderos).


16
2017-09-30 23:55



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 recibir algunos argumentos y también puede devolver un resultado.

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

Por lo general, los métodos también obtienen algunos atributos adicionales que describen su comportamiento dentro del objeto / clase, por ejemplo: visibilidad (relacionada con el concepto de encapsulación orientado a objetos) que define desde qué objetos (o clases) puede invocarse el método.

En muchos lenguajes orientados a objetos, todas las "funciones" pertenecen a algún objeto (o clase) y entonces en estos lenguajes no hay funciones que no sean métodos.


14
2017-10-01 00:54