function - una - metodos de funciones




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

Diferencia entre métodos y funciones

De leer este documento en Microsoft

Los miembros que contienen código ejecutable se conocen colectivamente como miembros de la función de una clase. La sección anterior describe los métodos, que son el tipo principal de miembros de funciones. Esta sección describe los otros tipos de miembros de función admitidos por C #: constructores, propiedades, indizadores, eventos, operadores y finalizadores.

Así que los métodos son el subconjunto de las funciones. Cada método es una función, pero no todas las funciones son un método, por ejemplo, un constructor no puede decirse como un método, sino que es una función.

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


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

En muchos idiomas los métodos están representados por funciones y subrutinas. La distinción principal que la mayoría de los lenguajes usa para estos es que las funciones pueden devolver un valor a la persona que llama y una subrutina no. Sin embargo, muchos idiomas modernos solo tienen funciones, pero estos pueden opcionalmente no devolver ningún valor.

Por ejemplo, supongamos que desea describir un gato y le gustaría poder bostezar. Crearía una clase Cat, con un método de bostezo, que probablemente sería una función sin ningún valor de retorno.


Como mencionó Python, la siguiente podría 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 pocas palabras, lo que llaman "método" es solo una función a la que se le pasa un argumento adicional (como han señalado 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's 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 lo llamé "greeter", en el método lo llamé "self"). Así que puedo usar el método de greet exactamente de la misma manera que uso la función greet_with_greeter (usando la sintaxis de "punto" para obtenerlo, ya que lo greet_with_greeter dentro de una clase):

Greeter.greet(hello_greeter, "World")

Así que efectivamente he convertido un método en una función. ¿Puedo convertir una función en un método? Bueno, como Python te permite meterte con las clases una vez que están definidas, intentemos:

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 se llama a un método "en" un objeto llamando 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 algo diferente de una función, y si te metes en Python o Ruby avanzado - ¡o Smalltalk! - comenzarás a ver su punto. Además, algunos lenguajes dan a los métodos acceso especial a los bits de un objeto. Pero La principal diferencia conceptual sigue siendo el parámetro extra oculto.)


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 "door", 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 (relacionado con el concepto de encapsulación orientado al objeto) que define de qué objetos (o clases) se puede invocar el método.

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


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

Desde una perspectiva de matemáticas y CS puras, una función siempre devolverá el mismo resultado cuando se llame con los mismos argumentos (f (x, y) = (x + y)). Por otro lado, un método generalmente se asocia con una instancia de una clase. Sin embargo, 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 ser bastante similares a las funciones, ya que normalmente no tienen estado (no siempre es cierto).


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 indicar que todos los métodos son 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 ejemplo dado le muestra una clase llamada "Puerta" que tiene un método o acción llamada "abrir", se llama método porque se declaró dentro de una clase. Hay otra parte del 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 si 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 que se declara el método (Class.method (objeto)) o tiene que invocar el método dentro del objeto (object.Method ()), al menos en python.

Piense en los métodos como cosas que solo puede hacer una entidad, por lo que si tiene una clase de Perros, tendría sentido tener una función de ladrido solo dentro de esa clase y ese sería un método. Si tiene también una clase de Persona, podría tener sentido escriba una "fuente" de función para que no pertenezca a ninguna clase, ya que tanto los humanos como los perros pueden ser alimentados y usted podría llamar a esa función una función ya que no pertenece a ninguna clase en particular.


En mi humilde opinión, las personas solo querían inventar nuevas palabras para facilitar la comunicación entre los programadores cuando querían referirse a funciones dentro de los objetos.

Si estás diciendo métodos, te refieres a funciones dentro de la clase. Si está diciendo funciones, quiere decir simplemente funciones fuera de la clase.

La verdad es que ambas palabras se usan para describir funciones. Incluso si lo usaste mal, no pasa nada malo. Ambas palabras describen bien lo que quieres lograr en tu código.

La función es un código que tiene que desempeñar un papel ( una función ) para hacer algo. El método es un método para resolver el problema.

Hace la misma cosa. Es la misma cosa. Si desea ser súper preciso e ir de acuerdo con la convención, puede llamar a los métodos como funciones dentro de los objetos.


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

En "C" , la palabra "función" significa una rutina de programa .

En Java , el término "función" no tiene ningún significado especial. Mientras que "método" significa una de las rutinas que forman la implementación de una clase.

En C # que se traduciría como:

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

Pero en realidad, reitero que realmente no hay diferencia en los 2 conceptos. Si usa el término "función" en discusiones informales sobre Java, la gente asumirá que usted quiso decir "método" y continuará. No lo use en documentos o presentaciones sobre Java, o parecerá tonto.


La función es un conjunto de lógica que se puede utilizar para manipular datos. Mientras que, Método es una función que se utiliza para manipular los datos del objeto al que pertenece. Así que técnicamente, si tiene una función que no está completamente relacionada con su clase pero que fue declarada en la clase, no es un método; Se llama un mal diseño.


La función es un conjunto de lógica que se puede utilizar para manipular datos.

Mientras que, Método es una función que se utiliza para manipular los datos del objeto al que pertenece. Así que técnicamente, si tiene una función que no está completamente relacionada con su clase pero que fue declarada en la clase, no es un método; Se llama un mal diseño.


Los métodos en una clase actúan en la instancia de la clase, llamada el 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"
   }
}

Los métodos son funciones de las clases. En la jerga normal, las personas intercambian método y función por todas partes. Básicamente, puede pensar en ellos como lo mismo (no estoy seguro de si las funciones globales se denominan métodos).

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


No soy un experto, pero esto es lo que sé:

  1. La función es un término del lenguaje C, se refiere a un fragmento de código y el nombre de la función será el identificador para usar esta función.

  2. Método es el término OO, normalmente tiene un puntero en el parámetro de función. No puede invocar este fragmento de código como C, necesita usar el objeto para invocarlo.

  3. Los métodos de invocación también son diferentes. Aquí invoca significado para encontrar la dirección de este fragmento de código. C / C ++, el tiempo de enlace utilizará el símbolo de la función para localizar.

  4. Objecive-C es diferente. Invoque una función de C para usar la estructura de datos para encontrar la dirección. Significa que todo se conoce en tiempo de ejecución.


Para una aproximación de primer orden, un método (en C ++ estilo OO) es otra palabra para una función miembro, que es una función que forma parte de una clase.

En lenguajes como C / C ++ puede tener funciones que no son miembros de una clase; no llamas a una función no asociada con una clase un método.


Si tienes ganas de leer aquí está "Mi introducción a los métodos OO"

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

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

employe whatAreYouDoing.

Ese "whatAreYouDoing" 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. Los métodos así son el objeto artefacto que tiene que "hacer" algo.

Otros métodos posibles son

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Por otro lado, las funciones son formas en que un lenguaje de programación tiene que computar algunos datos, por ejemplo, podría 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...

Desde que los primeros lenguajes de programación populares (como fortran, c, pascal) no cubrieron 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 las cosas matemáticas, mientras que un empleado tiene poca matemática, pero puede tener métodos que hagan exactamente lo mismo que las 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 les llama método.

Aquí hay un ejemplo del objeto Employee anteriormente 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 "lenguaje natural" matphor, que en algún momento tuvo OO. Por ejemplo Smalltalk. Espero que le resulte más fácil comprender los métodos en los objetos después de leer esto.

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


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ía de si estás o no en una clase.


Una definición muy general de la diferencia principal 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 son parte de las clases.


Una forma sencilla de recordar:

  • F unción → F ree (Libre significa que no pertenece a un objeto o clase)
  • M ethod → M ember (Un miembro de un objeto o clase)

para mí: la función de un método y una función es la misma si estoy de acuerdo en que:

  • una función puede devolver un valor
  • puede esperar parámetros

Al igual que cualquier pieza de código, puede tener objetos que coloque y puede tener un objeto que se presente como resultado. Al hacerlo, podrían cambiar el estado de un objeto, pero eso no cambiaría su funcionamiento básico para mí.

Puede haber una diferencia de definición en las funciones de llamada de objetos u otros códigos. ¿Pero no es eso algo para una diferenciación verbal y es por eso que las personas los intercambian? Las menciones de ejemplo de cómputo con las que tendría cuidado. Porque contrate empleados para hacer mis cálculos:

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

Al hacerlo de esa manera, puedo confiar en que un empleador es responsable de los cálculos. Si él quiere más dinero, lo libero y permito que la función del recolector de carbage de deshacerse de los empleados no utilizados haga el resto y obtenga un nuevo empleado.

Incluso argumentar que un método es una función de objetos y una función no conectada, la computación no me ayudará. El descriptor de la función en sí e idealmente la documentación de la función me dirá qué necesita y qué puede devolver. El resto, como manipular el estado de algún objeto, no es realmente transparente para mí. Espero que tanto las funciones como los métodos proporcionen y manipulen lo que dicen sin tener que saber en detalle cómo lo hacen. Incluso una función computacional pura podría cambiar el estado de la consola o agregarse a un archivo de registro.


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

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

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

[adición tardía]

De hecho, como señaló Brian Neal en un comentario a esta pregunta , el estándar de C ++ nunca usa el término 'método' cuando se refiere a funciones miembro. 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 creía que hubiera una razón particularmente fuerte para usar un término diferente.







terminology