Pregunta

¿Alguien puede dar una explicación sencilla de métodos vs. funciones en el contexto de programación orientada a objetos?

¿Fue útil?

Solución

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

Un método es un código que se llama por un nombre asociado con un objeto. En la mayoría de los aspectos, es idéntico a una función, excepto por dos diferencias clave:

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

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

Otros consejos

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.

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

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

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

[adición tardía]


De hecho, como Brian Neal señaló en un comentario a esta pregunta , el C ++ standard 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.

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:

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 llamado " open " ;, se llama método porque se declaró dentro de una clase. Hay otra porción de código con & Quot; def & Quot; justo debajo de lo que define una función, es una función porque no se declara 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 se llama por sí misma.

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 (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 una entidad puede hacer, por lo tanto, si tiene una clase Dog, tendría sentido tener una función de ladrido solo dentro de esa clase y ese sería un método, si también tiene una clase Person podría tiene sentido escribir una función " feed " porque eso no pertenece a ninguna clase ya que tanto los humanos como los perros pueden ser alimentados y podría llamarse una función ya que no pertenece a ninguna clase en particular.

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 dentro de las clases.

Manera simple de recordar:

  • F unción & # 8594; F ree (Gratis significa no pertenecer a un objeto o clase)
  • M ethod & # 8594; M ascua (Un miembro de un objeto o clase)

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" el software que lo compone.bueno "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.etc.

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

employe whatAreYouDoing.

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

Entonces, la forma que tienen los objetos de exponer su comportamiento se llama métodos.Los métodos, por tanto, son el objeto artefacto que tiene que "hacer" algo.

Otros métodos posibles son

employee whatIsYourName
employee whatIsYourDepartmentsName

etc.

Las funciones, por otro lado, son formas en que un lenguaje de programación tiene para calcular 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...

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 cuestiones matemáticas mientras que un Empleado tiene poca matemática, pero puedes 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?Esto se debe a que Java tiene sus raíces en C++ y C++ en C.

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

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

NOTA:El código no debe ser compilado, sólo para que sirva como ejemplo.No dudes en modificar la publicación y agregar un ejemplo de Python.

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

Desde una perspectiva matemática y CS pura, una función siempre devolverá 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. Sin embargo, una vez más, los lenguajes OO más modernos ya no usan el término & Quot; function & Quot; en la mayor parte. Muchos métodos estáticos pueden ser muy similares a las funciones, ya que generalmente no tienen estado (no siempre es cierto).

Digamos que una función es un bloque de código (generalmente con su propio alcance, y a 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). Siendo & Quot; propiedad de & Quot; por 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 " necesita 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) se puede invocar el método.

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

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

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

Una función es 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 solo matemática. Como sucede, sin () y cos () también son funciones. Una función tiene otra propiedad: todas las llamadas a una función con los mismos parámetros deben devolver el mismo resultado.

Un método, por otro lado, es una función que está relacionada con un objeto en un lenguaje orientado a objetos. Tiene un parámetro implícito: el objeto sobre el que se actúa (y su estado).

Entonces, si tiene un objeto Z con un método g (x), es posible que vea lo siguiente:

Z.g(x) = sin(x) + cos(Z.y)

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

La función o un método es un fragmento de código invocable llamado que realiza algunas operaciones y opcionalmente devuelve un valor.

En el lenguaje C se utiliza el término función. Java & amp; C # la gente lo diría un método (y una función en este caso se define dentro de una clase / objeto).

Un programador de C ++ podría llamarlo una función o, a veces, un método (dependiendo de si está escribiendo código de C ++ de estilo de procedimiento o está haciendo una forma orientada a objetos de C ++, también sería probable que un programador de C / C ++ solamente llámelo función porque el término 'método' se usa con menos frecuencia en la literatura C / C ++).

Utiliza una función simplemente llamando su nombre como,

result = mySum(num1, num2);


Llamaría a un método haciendo referencia a su objeto primero como,

result = MyCalc.mySum(num1,num2);

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

En " C " , la palabra " function " significa una rutina de programa .

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

En C # eso se traduciría como:

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

Pero realmente, reitero que realmente no hay diferencia en los 2 conceptos. Si usa el término & Quot; function & Quot; En discusiones informales sobre Java, la gente asumirá que usted quiso decir " método " y seguir. No lo use en documentos o presentaciones adecuadas sobre Java, o se verá tonto.

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

En lenguajes OO como Object Pascal o C ++, un " método " es una función asociada a un objeto. Entonces, por ejemplo, un & Quot; Perro & Quot; el objeto puede tener un " ladrido " función y esto se consideraría un " Método " ;. En contraste, el & Quot; StrLen & Quot; La función es independiente (proporciona la longitud de una cadena proporcionada como argumento). Por lo tanto, es solo una & Quot; función. & Quot; Javascript también está técnicamente orientado a objetos, pero enfrenta muchas limitaciones en comparación con un lenguaje completo como C ++, C # o Pascal. No obstante, la distinción aún debe mantenerse.

Un par de hechos adicionales: C # está totalmente orientado a objetos, por lo que no puede crear funciones " independientes. " En C #, cada función está vinculada a un objeto y, por lo tanto, técnicamente es un método & "; &"; La patada es que pocas personas en C # se refieren a ellos como & Quot; métodos & Quot; - solo usan el término " funciones " porque no hay ninguna distinción real que hacer.

Finalmente, para que ningún gurú de Pascal salte sobre mí aquí, Pascal también diferencia entre " funciones " (que devuelve un valor) y " procedimientos " que no lo hacen C # no hace esta distinción explícitamente aunque, por supuesto, puede elegir devolver un valor o no.

Como mencionaste Python, lo siguiente podría ser una ilustración útil de la relación entre métodos y objetos en la mayoría de los lenguajes orientados a objetos modernos.En pocas palabras, lo que llaman un "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 lenguajes.

# 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 compara 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").Entonces puedo usar el greet método exactamente de la misma manera que uso el greet_with_greeter función (usando la sintaxis "punto" para acceder a ella, ya que la definí dentro de una clase):

Greeter.greet(hello_greeter, "World")

Así que efectivamente convertí un método en una función.¿Puedo convertir una función en un método?Bueno, como Python te permite alterar las clases una vez definidas, intentemos:

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

Si, la funcion 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 llamas a un método "sobre" un objeto llamando object.method(args), el lenguaje lo convierte mágicamente en method(object, args).

(Los puristas de OO podrían argumentar que un método es algo diferente de una función, y si te familiarizas con Python o Ruby avanzado, ¡o Smalltalk!- Empezarás a ver su punto.Además, algunos lenguajes otorgan a los métodos acceso especial a los bits de un objeto.Pero la principal diferencia conceptual sigue siendo el parámetro adicional oculto).

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

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

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 inserte y puede tener un objeto que se obtiene 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 al llamar a funciones de objetos u otros códigos. Pero, ¿no es eso algo para las diferencias verbales y es por eso que la gente las intercambia? El ejemplo de cálculo que menciono sería cuidadoso. porque contrato empleados para hacer mis cálculos:

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

Al hacerlo de esa manera, puedo confiar en que un empleador sea responsable de los cálculos. Si quiere más dinero, lo libero y dejo que la función del recolector de carburador 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 que una función es computación no conectada no me ayudará. El descriptor de la función en sí mismo 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 entreguen y manipulen lo que dicen sin necesidad de 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.

Según tengo entendido, 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 principal distinción que usan la mayoría de los idiomas para estos es que las funciones pueden devolver un valor al llamador y una subrutina no. Sin embargo, muchos lenguajes modernos solo tienen funciones, pero opcionalmente no pueden devolver ningún valor.

Por ejemplo, supongamos que desea describir a 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.

Para una aproximación de primer orden, un método (en estilo C ++ OO) es otra palabra para una función miembro, es decir, 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 llama a una función no asociada a una clase un método.

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

Si está diciendo métodos, quiere decir 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 ) de hacer algo. El método es un método para resolver el problema.

Hace lo mismo. Es la misma cosa. Si desea ser súper preciso y seguir la convención, puede llamar a los métodos como funciones dentro de los objetos.

Función es el concepto que pertenece principalmente a Programación orientada a procedimientos donde una función es una entidad que puede procesar datos y le devuelve valor

Método es el concepto de Programación orientada a objetos donde un método es miembro de una clase que principalmente procesa en los miembros de la clase.

No complicamos demasiado lo que debería ser una respuesta muy simple. Los métodos y las funciones son lo mismo. Llama a una función una función cuando está fuera de una clase, y llama a una función un método cuando se escribe dentro de una clase.

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, por lo general tiene este puntero en el parámetro de la función. No puede invocar este fragmento de código como C, debe usar el objeto para invocarlo.

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

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

Sé que muchos otros ya han respondido, pero descubrí que la siguiente es una respuesta de una sola línea simple pero efectiva. Aunque no se ve mucho mejor que otras respuestas aquí, pero si lo lee detenidamente, tiene todo lo que necesita saber sobre el método y la función.

Un método es una función que tiene un receptor definido, en términos OOP, un método es una función en una instancia de un objeto.

Diferencia entre métodos y funciones

Al leer este documento en Microsoft

  

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

Entonces 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 se puede decir como un método pero es una función.

Aquí hay alguna explicación para método vs. función usando ejemplos de JavaScript:

test(20, 50); es una función definida y utilizada para ejecutar algunos pasos o devolver algo que pueda almacenarse / usarse en algún lugar.

  

Puede reutilizar el código: defina el código una vez y utilícelo muchas veces.

     

Puede usar el mismo código muchas veces con diferentes argumentos, para producir resultados diferentes.

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); here test () puede ser un método de algún objeto o un prototipo definido a medida para objetos incorporados, aquí hay más explicaciones:

  

Los métodos de JavaScript son las acciones que se pueden realizar en los objetos.

     

Un método JavaScript es una propiedad que contiene una definición de función.

Propiedad / método incorporado para cadenas en javascript:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

Ejemplo personalizado:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

También puede definir propiedades para String, Array, etc., por ejemplo

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

Algunas referencias: Método de objeto Javascript , Funciones , Más información sobre el prototipo

Función: una función en un fragmento de código independiente que incluye algo de lógica y debe llamarse independientemente y se define fuera de la clase.

Método: un método es un código independiente que se llama en referencia a algún objeto y se define dentro de la clase.

En C ++, a veces, el método se usa para reflejar la noción de función miembro de una clase. Sin embargo, recientemente encontré una declaración en el libro & # 171; The C ++ Programming Language 4th Edition & # 187 ;, en la página 586 & Quot; Clases derivadas & Quot;

  

Una función virtual a veces se llama método.

Esto es un poco confuso, pero dijo a veces , por lo que tiene sentido, el creador de C ++ tiende a ver los métodos, ya que las funciones pueden invocarse en los objetos y pueden comportarse polimórficas.

Una clase es la recopilación de algunos datos y funciona opcionalmente con un constructor.

Mientras crea una instancia (copia, replicación) de esa clase en particular, el constructor inicializa la clase y devuelve un objeto.

Ahora la clase se convierte en objeto (sin constructor) & amp; Las funciones se conocen como método en el contexto del objeto.

Entonces, básicamente

Clase < == new == > Object

Función < == new == > Método

En Java, generalmente se dice que el nombre del constructor es igual al nombre de la clase, pero en realidad ese constructor es como un bloque de instancia y un bloque estático, pero con un usuario que define el tipo de retorno (es decir, el tipo de clase)

Mientras que la clase puede tener un bloque estático, bloque de instancia, constructor, función El objeto generalmente solo tiene datos & Amp; método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top