Il y a deux concepts principaux dans la confusion: la liaison et le chargement. Il est confondu avec le concept de DataBinding, qui est quelque part au milieu et fait souvent les deux. Après y avoir réfléchi, je vais ajouter un autre concept, pour compléter le triplé, dépêche.
Les types
Liaison tardive : le type est inconnu jusqu'à ce que la variable soit exercée pendant l'exécution; généralement par cession, mais il existe d'autres moyens de contraindre un type; les langages à typage dynamique appellent cela une fonctionnalité sous-jacente, mais de nombreux langages à typage statique ont une méthode permettant d'obtenir une liaison tardive
Mis en œuvre souvent à l'aide de types dynamiques [spéciaux], d'introspection / réflexion, d'indicateurs et d'options de compilation, ou via des méthodes virtuelles en empruntant et en étendant la répartition dynamique
Early Binding : le type est connu avant que la variable ne soit exercée pendant l'exécution, généralement par l'intermédiaire d'un moyen déclaratif statique
Implémenté souvent à l'aide de types primitifs standard
Les fonctions
Répartition statique : fonction ou sous-programme spécifique connu au moment de la compilation; il est sans ambiguïté et assorti de la signature
Implémenté en tant que fonctions statiques; aucune méthode ne peut avoir la même signature
Dispatch dynamique : pas une fonction ou un sous-programme spécifique au moment de la compilation; déterminé par le contexte lors de l'exécution. Il existe deux approches différentes de la "répartition dynamique", différenciées par les informations contextuelles utilisées pour sélectionner l'implémentation de la fonction appropriée.
Dans la répartition unique [ dynamique ] , seul le type de l'instance est utilisé pour déterminer l'implémentation de la fonction appropriée. Dans les langages à types statiques, cela signifie en pratique que le type d'instance décide quelle implémentation de la méthode est utilisée, quel que soit le type de référence indiqué lors de la déclaration / affectation de la variable. Étant donné que seul un type, le type de l'instance d'objet, est utilisé pour déduire l'implémentation appropriée, cette approche est appelée "envoi unique".
Il existe également de multiples répartitions [ dynamiques ] , où les types de paramètres d'entrée aident également à déterminer quelle implémentation de fonction appeler. Étant donné que plusieurs types, à la fois le type de l'instance et le ou les types de paramètre (s), influencent la mise en œuvre de la méthode sélectionnée, cette approche est appelée "envoi multiple".
Implémenté en tant que fonctions virtuelles ou abstraites; d'autres indices incluent les méthodes écrasées, cachées ou ombrées.
NB: Que la surcharge de méthode implique une dépêche dynamique dépend de la langue. Par exemple, en Java, les méthodes surchargées sont distribuées de manière statique.
Valeurs
Chargement paresseux : stratégie d'initialisation d'objet qui reporte l'attribution de valeur jusqu'au besoin ; permet à un objet d'être dans un état essentiellement valide mais sciemment incomplet et d'attendre que les données soient nécessaires avant de les charger; souvent trouvé particulièrement utile pour le chargement de grands ensembles de données ou l'attente de ressources externes
Implémenté souvent en ne chargeant pas délibérément une collection ou une liste dans un objet composite pendant les appels de constructeur ou d'initialisation jusqu'à ce qu'un appelant en aval demande à voir le contenu de cette collection (par exemple, get_value_at, get_all_as, etc.). Les variations incluent le chargement d'informations méta sur la collection (telles que la taille ou les clés), mais en omettant les données réelles; fournit également un mécanisme permettant à certaines exécutions de fournir aux développeurs un schéma d'implémentation singleton assez sûr et efficace
Eager Loading : stratégie d'initialisation d'objet qui exécute immédiatement toutes les attributions de valeur afin que toutes les données nécessaires soient complètes avant de se considérer comme étant dans un état valide.
Souvent mis en œuvre en fournissant à un objet composite toutes les données connues le plus rapidement possible, comme lors d'un appel ou d'une initialisation du constructeur
Liaison de données : implique souvent la création d'un lien actif ou d'une carte entre deux flux d'informations compatibles, de sorte que les modifications apportées à l'un soient reflétées dans l'autre, et inversement; afin d'être compatibles, ils doivent souvent avoir un type de base commun, ou une interface
Souvent implémentée dans le but de fournir une synchronisation plus propre et cohérente entre différents aspects de l’application (par exemple, le modèle de vue à afficher, le modèle sur le contrôleur, etc.), elle aborde des concepts tels que source et cible, points de terminaison, liaison / dissociation, mise à jour et événements tels que on_bind, on_property_change, on_explicit, on_out_of_scope
EDIT NOTE: Dernière édition majeure pour fournir une description d’exemples de la façon dont elles se produisent souvent. Les exemples de code particuliers dépendent entièrement de la mise en œuvre / exécution / plate-forme