Hay dos conceptos principales en confusión: encuadernación y carga. Se combina con el concepto de enlace de datos, que se encuentra en algún punto intermedio a menudo haciendo ambas cosas. Después de considerarlo, voy a agregar un concepto más, para completar la trifecta, despacho.
Tipos
Enlace tardío : el tipo es desconocido hasta que la variable se ejerce durante el tiempo de ejecución; generalmente a través de la asignación, pero hay otros medios para forzar un tipo; los idiomas escritos dinámicamente llaman a esto una característica subyacente, pero muchos idiomas escritos estáticamente tienen algún método para lograr un enlace tardío
Implementado a menudo utilizando tipos dinámicos [especiales], introspección / reflexión, banderas y opciones de compilación, o mediante métodos virtuales al tomar prestado y extender el despacho dinámico
Enlace temprano : el tipo se conoce antes de que la variable se ejerza durante el tiempo de ejecución, generalmente a través de un medio estático y declarativo
Implementado a menudo utilizando tipos primitivos estándar
Las funciones
Despacho estático : función específica conocida o subrutina en tiempo de compilación; no es ambiguo y coincide con la firma
Implementado como funciones estáticas; ningún método puede tener la misma firma
Despacho dinámico : no es una función específica o subrutina en tiempo de compilación; determinado por el contexto durante la ejecución. Existen dos enfoques diferentes para el "despacho dinámico", que se distinguen por la información contextual que se utiliza para seleccionar la implementación de la función adecuada.
En el envío único [ dinámico ] , 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 se declara / asigna la variable. Debido a que solo se usa un solo tipo, el tipo de la instancia del objeto, para inferir la implementación adecuada, este enfoque se denomina "despacho único".
También hay un despacho [ dinámico ] múltiple , donde los tipos de parámetros de entrada también ayudan a determinar qué implementación de función llamar. Debido a que los tipos múltiples, tanto el tipo de la instancia como el tipo (s) de los parámetros, influyen en la implementación del método seleccionado, este enfoque se denomina "despacho múltiple".
Implementado como funciones virtuales o abstractas; Otras pistas incluyen métodos anulados, ocultos u sombreados.
NB: si la sobrecarga de métodos implica o no un despacho dinámico es específico del idioma. Por ejemplo, en Java, los métodos sobrecargados se envían estáticamente.
Valores
Carga diferida : estrategia de inicialización de objeto que difiere la asignación de valor hasta que se necesite ; permite que un objeto esté en un estado esencialmente válido pero incompleto y esperando hasta que se necesiten los datos antes de cargarlo; a menudo se encuentra particularmente útil para cargar grandes conjuntos de datos o esperar recursos externos
Se implementa a menudo al no cargar deliberadamente una colección o lista en un objeto compuesto durante el constructor o las llamadas de inicialización hasta que una persona que llama aguas abajo solicita ver el contenido de esa colección (por ejemplo, get_value_at, get_all_as, etc.). Las variaciones incluyen cargar metainformación sobre la colección (como tamaño o claves), pero omitir los datos reales; también proporciona un mecanismo para algunos tiempos de ejecución para proporcionar a los desarrolladores un esquema de implementación de singleton bastante seguro y eficiente
Eager Loading : estrategia de inicialización de objetos que realiza inmediatamente todas las asignaciones de valores para tener todos los datos necesarios para completarse antes de considerarse en un estado válido.
Se implementa a menudo proporcionando objetos compuestos con todos sus datos conocidos lo antes posible, como durante una llamada o inicialización del constructor
Enlace de datos : a menudo implica crear un enlace o mapa activo 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 base común o interfaz
Se implementa a menudo como un intento de proporcionar una sincronización más limpia y consistente entre diferentes aspectos de la aplicación (por ejemplo, ver modelo a ver, modelo a controlador, etc.) y habla sobre conceptos como origen y destino, puntos finales, vinculación / 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ódigo particulares dependen completamente de la implementación / tiempo de ejecución / plataforma