¿Qué es el envío de métodos? Puedo encontrar varios ejemplos concretos, pero me elude una definición abstracta de envío de métodos. ¿Alguien se atreve a aventurar el suyo?¿Qué es el envío de métodos?
Respuesta
primer lugar vamos a decir que es un mensaje y un método son:
Un mensajees un nombre que puede ser enviado desde un objeto a otro, posiblemente con objetos adicionales como argumentos. Por ejemplo, en
account withdraw: 100
El mensaje es
withdraw:
(sintaxis de Smalltalk.) (Otros idiomas pueden escribiraccount.withdraw(100)
.) El objeto que recibe el mensaje, en este ejemploaccount
, se llama el receptor .A método es una implementación que se puede invocar en respuesta a un mensaje.
Estas ideas se comparten entre una amplia variedad de lenguajes orientados a objetos, a veces bajo diferentes nombres. Por ejemplo, C++ llama a un mensaje una 'función de miembro virtual'.
Ahora:
Método despacho es el algoritmo utilizado para decidir que método debe ser invocada en respuesta a un mensaje. Algoritmos varían dramáticamente en diferentes idiomas:
Los lenguajes como Smalltalk, que tienen clases y herencia simple, consulte la clase del receptor. Si el método está definido en esa clase, se invoca ese método. De lo contrario, el algoritmo verifica la superclase única, y así sucesivamente.
En C++, el método todavía está determinado por la clase del receptor, pero debido a que una clase puede tener múltiples superclases, el problema de decidir qué método invocar es más complicado.
En lenguajes como yo, que tienen métodos pero no hay clases, el método es o bien encontrarse en una llamada ranura en el propio receptor, o posiblemente se encuentra en el prototipo de la que se clonó el objeto.
En los lenguajes orientados a objetos más avanzados, el algoritmo de envío de métodos examina no solo el receptor sino también los argumentos que se transmiten junto con el mensaje. Esta idea a veces se denomina 'multimétodos'. (Hasta cierto punto, esta técnica puede simularse usando lo que Smalltalk llama al doble despacho, pero hay un costo de programación y un costo de rendimiento). Creo que los lenguajes Cecil, Diesel y Dylan usan algún tipo de envío multimétodo, pero Estoy tambaleando al borde de mi experiencia.
Es difícil de decir sin contexto, pero lo describiría como el proceso que toma una invocación de método en el código fuente, decide qué método requiere ejecutarlo y lo ejecuta, realizando conversiones de argumento, por defecto, etc., según lo requiera el idioma. La parte de decisión del envío de métodos puede ser puramente en tiempo de ejecución (p. Ej. Java).
Diferentes idiomas pueden tener enfoques significativamente diferentes para el envío de métodos.
Así que esto es similar al controlador frontal? –
@samyismyhero: Eso depende de lo que quiere decir con "el controlador frontal" para ser honesto ... –
- 1. ¿Qué es el envío simple y doble?
- 2. ¿Qué es mejor? Los métodos estáticos o métodos de instancia
- 3. Clojure: ¿el macro de envío es especial?
- 4. ¿Qué es Delegado y Métodos de delegado
- 5. ¿Desde cuándo Xcode ya no requiere declaraciones de métodos de envío y por qué?
- 6. ¿Cuál es el hilo de envío de eventos?
- 7. Ruby: ¿Cómo evaluar múltiples métodos por comando de envío?
- 8. ¿Cómo funciona el envío de métodos Java con Generics y clases abstractas?
- 9. Cómo saber qué botón de envío activó el evento onsubmit
- 10. Android: determinar por qué el envío de SMS falló
- 11. Descubre qué botón de formulario activó el envío
- 12. ¿Qué es un grupo de métodos en C#?
- 13. Cuando envío SMS, a veces el resultado es código = 0. ¿Qué significa ese código?
- 14. ¿Cuál es el uso de múltiples métodos principales?
- 15. Ruby on Rails: Cómo tener varios botones de envío de ir a diferentes métodos
- 16. jQuery ¿qué es más rápido: selectores o métodos?
- 17. Configuración de SMTP El valor de configuración de envío de envío no es válido con ASP-Classic
- 18. ¿Es posible tener métodos dentro de los métodos?
- 19. el envío de datos de correos con jQuery en el envío de formularios
- 20. Cómo descubrir qué métodos aumentan el tamaño de 'exe'
- 21. ¿Qué es el estándar .NET para la invocación remota de métodos?
- 22. ¿Es posible vincular una función submit() antes de cualquier envío/envío existente?
- 23. ¿Qué son los métodos virtuales?
- 24. Uso de una variable de clase versus envío de variable local a funciones/métodos
- 25. Envío de correo electrónico programáticamente cuando se establece el número de seguimiento de envío
- 26. Envío de estilo S3 para objetos S3 utilizando las definiciones de métodos formales
- 27. ¿Qué lenguajes de programación admiten métodos constantes?
- 28. Establecer el encabezado de envío de formulario
- 29. Reemplazando el método de envío de XMLHttpRequest
- 30. ¿Cuál es la diferencia entre un elenco a BOOL y el envío del mensaje boolValue?
Common Lisp también utiliza el envío multimétodo. –
¿Puedes citar tus fuentes? –
¿Es seguro decir que el envío de un método es muy similar a un controlador frontal en el negocio de aplicaciones web? –