oop - studio - subir imagen con retrofit
¿Qué es el método de envío? (2)
¿Qué es el método de envío? Puedo encontrar varios ejemplos concretos, pero se me escapa una definición abstracta del envío del método. ¿Alguien quiere aventurarse a los suyos?
Es difícil decirlo sin un 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 ejecutarse y lo ejecuta, realizando conversiones de argumentos, omitiendo etc., según lo requiera el idioma.
La parte de decisión del envío del método puede ser puramente en tiempo de ejecución (por ejemplo, en un lenguaje dinámico), puramente en tiempo de compilación (por ejemplo, llamar a un método estático en C # / Java) o ambos (llamar a un método virtual en C # / Java).
Diferentes idiomas pueden tener enfoques significativamente diferentes para el envío de métodos.
Primero digamos que mensaje y método son:
Un mensaje es un nombre que se puede enviar de un objeto a otro, posiblemente con objetos adicionales como argumentos. Por ejemplo en
account withdraw: 100
El mensaje se
withdraw:
(sintaxis de Smalltalk). (Otros idiomas pueden escribiraccount.withdraw(100)
. El objeto que recibe el mensaje, en este ejemplo deaccount
, se denomina receptor .Un 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 con nombres diferentes. Por ejemplo, C ++ llama a un mensaje una ''función miembro virtual''.
Ahora:
El envío de métodos es el algoritmo utilizado para decidir qué método se debe invocar en respuesta a un mensaje. Los algoritmos varían dramáticamente a través de los idiomas:
Idiomas como Smalltalk, que tienen clases y herencia única, 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 aún está determinado por la clase del receptor, pero como una clase puede tener varias superclases, el problema de decidir qué método invocar es más complicado.
En lenguajes como Self, que tienen métodos pero no clases, el método se encuentra en una ranura con nombre en el propio receptor, o posiblemente se encuentra en el prototipo desde el cual se clonó el objeto.
En lenguajes más avanzados orientados a objetos, el algoritmo de envío de método examina no solo el receptor sino también los argumentos que se transmiten junto con el mensaje. Esta idea a veces se denomina "métodos múltiples". (Hasta cierto punto, esta técnica se puede simular utilizando lo que Smalltalk llama doble despacho , pero hay un costo de programación y un costo de rendimiento). Creo que los lenguajes Cecil, Diesel y Dylan utilizan algún tipo de despacho multimétodo, pero balanceándose en el borde de mi experiencia.