¿Alguien puede proporcionar una explicación simple de los métodos frente a las funciones en el contexto OOP?
if(class(object)) { ... } else {stop()}
sería conceptualmente equivalente al método?
¿Alguien puede proporcionar una explicación simple de los métodos frente a las funciones en el contexto OOP?
if(class(object)) { ... } else {stop()}
sería conceptualmente equivalente al método?
Respuestas:
Una función es un fragmento de 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 fragmento de 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:
(esta es una explicación simplificada, ignorando los problemas de alcance, etc.)
Un método está en un objeto.
Una función es independiente de un objeto.
Para Java y C #, solo hay métodos.
Para C, solo hay funciones.
Para C ++ y Python 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 estándar 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.
self
argumento es explícito. Y muchos idiomas tienen métodos estáticos, que no se pasan una instancia.
this
o self
, pero esas construcciones generalmente se denominan funciones, en lugar de métodos.
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 llamada "abierta", se llama método porque se declaró 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 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 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 (objeto)) o debe 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 que si tiene una clase de perro, tendría sentido tener una función de ladrido solo dentro de esa clase y eso sería un método, si también tiene una clase de persona, podría tener sentido escriba una función "feed" para que no pertenezca a ninguna clase ya que tanto los humanos como los perros pueden ser alimentados y podría llamar a eso una función ya que no pertenece a ninguna clase en particular.
Manera simple de recordar:
Si tiene ganas de leer aquí está "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 ... 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 manejar sus atributos y realizar algunas operaciones en ellos. Digamos que si queremos saber qué está haciendo un empleado en este momento, le preguntaríamos.
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. Por lo tanto, los métodos son el objeto de 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 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 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 cosas matemáticas mientras que un Empleado tiene poca matemática, pero puede tener métodos que hacen 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 tener el mismo aspecto, pero en la documentación de OO se les llama 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 "lenguaje natural" matphor, que en algún momento tuvo OO. Por ejemplo Smalltalk. Espero que pueda ser razonablemente más fácil para usted 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.
En el mundo OO, los dos se usan comúnmente para significar lo mismo.
Desde una perspectiva pura de Matemáticas y CS, 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, la mayoría de los lenguajes OO modernos ya no usan el término "función". 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). 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) 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 las 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).
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 (Zy) son parámetros implícitos del método g () de Z.
La función o un método es una pieza de código invocable que realiza algunas operaciones y opcionalmente devuelve un valor.
En lenguaje C se usa el término función. La gente de Java & C # lo diría un método (y una función en este caso se define dentro de una clase / objeto).
Un C ++ programador de 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 un programador de C / C ++ probablemente lo llamaría una función porque el término 'método' es menos utilizado 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" que es algo que no devuelve un valor, y una "función" que sí lo hace. Cada idioma 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 # 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 "función" en discusiones informales sobre Java, la gente asumirá que se refería a "método" y continuará. No lo use en documentos o presentaciones adecuadas sobre Java, o se verá tonto.
method
... o lo llamaría procedure
y function
.
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.
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 con un objeto. Entonces, por ejemplo, un objeto "Perro" podría tener una función "ladrar" y esto se consideraría un "Método". Por el contrario, la función "StrLen" es independiente (proporciona la longitud de una cadena proporcionada como argumento). Por lo tanto, es solo una "función". 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". El truco es que pocas personas en C # se refieren a ellos como "métodos", simplemente usan el término "funciones" porque no hay ninguna distinción real que hacer.
Finalmente, para que los gurús de Pascal no me salten encima, Pascal también diferencia entre "funciones" (que devuelven 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 mencionó 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 modernos orientados a objetos. En pocas palabras, lo que ellos 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 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"). Entonces, puedo usar el greet
método exactamente de la misma manera que uso la greet_with_greeter
función (usando la sintaxis "punto" para llegar a ella, ya que la definí 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 jugar con las clases después de 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 método greet2
. Esto muestra la única diferencia real entre un método y una función: cuando llama a un método "sobre" un objeto llamando object.method(args)
, el lenguaje lo convierte mágicamente method(object, args)
.
(Los puristas de OO podrían argumentar que un método es algo diferente de una función, y si entras en Python o Ruby avanzados, ¡o Smalltalk!) Comenzarás a ver su punto. Además, algunos lenguajes dan a los métodos acceso especial a partes de un objeto. Pero la principal diferencia conceptual sigue siendo el parámetro adicional oculto).
para mí: la función de un método y una función es la misma si estoy de acuerdo en que:
Al igual que cualquier pieza de código, puede tener objetos que inserte y puede tener un objeto que viene 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 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, 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 a una clase un método.
La función es el concepto que pertenece principalmente a la 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.
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 las funciones dentro de los 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 la misma cosa. 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.
No soy un experto, pero esto es lo que sé:
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.
Método es el término OO, normalmente tiene un 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.
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.
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.
De 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 compatibles con 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, constructor
no se puede decir como método pero es una función.
Función: una función en un código independiente que incluye algo de lógica y debe llamarse de manera independiente y se define fuera de la clase.
Método: un método es un fragmento de código independiente que se llama en referencia a algún objeto y se define dentro de la clase.
Aquí hay alguna explicación para método vs. función usando ejemplos de JavaScript:
test(20, 50);
Esta función define y usa para ejecutar algunos pasos o devolver algo que puede 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 de 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 objetos Javascript , funciones , más información sobre el prototipo
TL; DR
Una función es una pieza de código para ejecutar.
Un método es una función dentro de un objeto.
Ejemplo de una función:
function sum(){
console.log("sum")l
}
Ejemplo de un método:
const obj = {
a:1,
b:2,
sum(){
}
}
Por eso decimos que una palabra clave "this" dentro de una función no es muy útil a menos que la usemos con call, apply o bind ... porque call, apply, bind llamará a esa función como un método dentro de object ==> básicamente convierte función a método
A menudo son intercambiables, pero un método generalmente se refiere a una subrutina dentro de una clase, y una función generalmente se refiere a una subrutina fuera de la clase. por ejemplo, en Ruby:
# function
def putSqr(a)
puts a ** 2
end
class Math2
# method
def putSqr(a)
puts a ** 2
end
end
En Java, donde todo (excepto las declaraciones de paquete e importación) debe estar dentro de la clase, la gente casi siempre se refiere a ellos como "métodos".