Hay dos conceptos principales en confusión: encuadernación y carga. Se confunde con el concepto de DataBinding, que está en algún lugar en el medio a menudo haciendo ambas cosas. Después de considerarlo, voy a agregar un concepto más, para completar la trifecta, el envío.
Tipos
Enlace tardío : el tipo es desconocido hasta que la variable se ejerce durante el tiempo de ejecución; por lo general a través de la asignación, pero hay otros medios para forzar a un tipo; los idiomas tipeados dinámicamente llaman a esto una característica subyacente, pero muchos lenguajes tipificados estáticamente tienen algún método para lograr un enlace tardío
Se implementa a menudo utilizando tipos dinámicos [especiales], introspección / reflexión, opciones de indicadores y compiladores, o mediante métodos virtuales mediante préstamos y extensiones de envío dinámico
Enlace temprano : se conoce el tipo antes de que la variable se ejecute durante el tiempo de ejecución, generalmente a través de medios declarativos estáticos
Se implementa a menudo utilizando tipos primitivos estándar
Funciones
Envío estático : función específica conocida o subrutina en tiempo de compilación; es inequívoco y está emparejado por la firma
Implementado como funciones estáticas; ningún método puede tener la misma firma
Dynamic Dispatch : no es una función específica o subrutina en tiempo de compilación; determinado por el contexto durante la ejecución. Hay dos enfoques diferentes para el "envío dinámico", que se distinguen por la información contextual que se utiliza para seleccionar la implementación de la función adecuada.
En single [ dynamic ] dispatch , solo se utiliza el tipo de instancia para determinar la implementación de la función adecuada. En lenguajes de tipo estático, lo que esto significa en la práctica es que el tipo de instancia decide qué implementación de método se usa independientemente del tipo de referencia indicado cuando la variable se declara / asigna. Debido a que solo se utiliza un solo tipo, el tipo de la instancia del objeto, para inferir la implementación apropiada, este enfoque se denomina "envío único".
También hay múltiple [ dinámico ] envío , donde los tipos de parámetros de entrada también ayudan a determinar a qué función de implementación llamar. Debido a que varios tipos, tanto el tipo de instancia como el tipo (s) de los parámetros (s), influyen en la implementación del método seleccionado, este enfoque se denomina "envío múltiple".
Implementado como funciones virtuales o abstractas; otras pistas incluyen métodos anulados, ocultos o sombreados.
NB: Si la sobrecarga de métodos implica un envío dinámico es específico del idioma. Por ejemplo, en Java, los métodos sobrecargados se distribuyen de forma estática .
Valores
Carga diferida : estrategia de inicialización del objeto que difiere la asignación de valor hasta que sea necesario ; permite que un objeto esté en un estado esencialmente válido pero a sabiendas incompleto y que espere hasta que se necesiten los datos antes de cargarlo; a menudo es especialmente útil para cargar grandes conjuntos de datos o esperar en recursos externos
Se implementa con frecuencia al no cargar una colección o lista a propósito en un objeto compuesto durante las llamadas del constructor o de la inicialización hasta que alguna persona que llama en sentido descendente solicita ver el contenido de dicha colección (por ejemplo, get_value_at, get_all_as, etc.). Las variaciones incluyen la carga de metainformación sobre la colección (como tamaño o claves), pero omitiendo los datos reales; también proporciona un mecanismo para algunos tiempos de ejecución para proporcionar a los desarrolladores un esquema de implementación Singleton bastante seguro y eficiente
Carga impaciente : estrategia de inicialización del objeto que realiza de inmediato todas las asignaciones de valores para que todos los datos deban estar completos antes de considerarse que están en un estado válido.
Se implementa a menudo proporcionando objetos compuestos con todos sus datos conocidos tan pronto como sea posible, como durante una llamada o inicialización del constructor
Enlace de datos : a menudo implica la creación de un enlace activo o mapa entre dos flujos de información compatibles para que los cambios en uno se reflejen en el otro y viceversa; para ser compatibles, a menudo tienen que tener un tipo de base o interfaz común
Se implementa a menudo como un intento de proporcionar una sincronización más clara y coherente entre los diferentes aspectos de la aplicación (por ejemplo, ver el modelo para ver, modelar para el controlador, etc.) y habla sobre conceptos como origen y destino, puntos finales, enlace / desvinculación, actualización, y eventos como on_bind, on_property_change, on_explicit, on_out_of_scope
NOTA DE EDICIÓN: Última edición importante para proporcionar una descripción de ejemplos de cómo ocurren a menudo. Los ejemplos de códigos particulares dependen completamente de la implementación / tiempo de ejecución / plataforma