Es gibt zwei Hauptkonzepte in der Verwirrung: Binden und Laden. Es wird durch das Konzept von DataBinding zusammengeführt, das irgendwo in der Mitte ist und oft beides tut. Nachdem ich darüber nachgedacht habe, werde ich ein weiteres Konzept hinzufügen, um die Trifecta zu vervollständigen, den Versand.
Typen
Late Binding : Der Typ ist unbekannt, bis die Variable zur Laufzeit ausgeführt wird. normalerweise durch Zuweisung, aber es gibt andere Mittel, um einen Typ zu erzwingen; Dynamisch typisierte Sprachen nennen dies eine zugrunde liegende Funktion, aber viele statisch typisierte Sprachen verfügen über eine Methode zum Erreichen einer späten Bindung
Wird häufig mithilfe von [speziellen] dynamischen Typen, Introspection / Reflection, Flags und Compiler-Optionen oder durch virtuelle Methoden durch Ausleihen und Erweitern des dynamischen Versands implementiert
Frühes Binden : Der Typ ist bekannt, bevor die Variable zur Laufzeit ausgeführt wird, in der Regel statisch und deklarativ
Wird häufig mit Standardprimitivtypen implementiert
Funktionen
Statischer Versand : bekannte, spezifische Funktion oder Subroutine zur Kompilierzeit; es ist eindeutig und entspricht der Signatur
Implementiert als statische Funktionen; Keine Methode kann dieselbe Signatur haben
Dynamischer Versand : Keine bestimmte Funktion oder Unterroutine zur Kompilierungszeit. während der Ausführung durch den Kontext bestimmt. Es gibt zwei verschiedene Ansätze für "dynamisches Versenden", die sich dadurch unterscheiden, welche Kontextinformationen zur Auswahl der geeigneten Funktionsimplementierung verwendet werden.
Bei einem einzelnen [ dynamischen ] Versand wird nur der Typ der Instanz verwendet, um die entsprechende Funktionsimplementierung zu bestimmen. In statisch typisierten Sprachen bedeutet dies in der Praxis, dass der Instanztyp entscheidet, welche Methodenimplementierung verwendet wird, unabhängig vom Referenztyp, der beim Deklarieren / Zuweisen der Variablen angegeben wird. Da nur ein einzelner Typ - der Typ der Objektinstanz - verwendet wird, um die entsprechende Implementierung abzuleiten, wird dieser Ansatz als "einzelner Versand" bezeichnet.
Es gibt auch mehrere [ dynamische ] Dispatches , bei denen Eingabeparametertypen auch helfen, die aufzurufende Funktionsimplementierung zu bestimmen. Da mehrere Typen - sowohl der Typ der Instanz als auch der Typ der Parameter - Einfluss darauf haben, welche Methodenimplementierung ausgewählt wird, wird dieser Ansatz als "Mehrfachversand" bezeichnet.
Als virtuelle oder abstrakte Funktionen implementiert; Andere Hinweise sind überschriebene, versteckte oder schattierte Methoden.
Hinweis: Ob das Überladen von Methoden einen dynamischen Versand beinhaltet oder nicht, ist sprachspezifisch. In Java werden beispielsweise überladene Methoden statisch verteilt.
Werte
Lazy Loading : Objektinitialisierungsstrategie, die die Wertzuweisung aufschiebt, bis sie benötigt wird ; ermöglicht es einem Objekt, sich in einem im Wesentlichen gültigen, aber wissentlich unvollständigen Zustand zu befinden und zu warten, bis die Daten benötigt werden, bevor es geladen wird; Wird oft als besonders nützlich zum Laden großer Datensätze oder zum Warten auf externe Ressourcen angesehen
Wird häufig implementiert, indem eine Sammlung oder Liste während des Konstruktor- oder Initialisierungsaufrufs nicht absichtlich in ein zusammengesetztes Objekt geladen wird, bis ein nachgeschalteter Aufrufer den Inhalt dieser Sammlung abfragt (z. B. get_value_at, get_all_as usw.). Variationen beinhalten das Laden von Metainformationen über die Sammlung (wie Größe oder Schlüssel), aber das Weglassen der tatsächlichen Daten; bietet auch einen Mechanismus für einige Laufzeiten, um Entwicklern ein ziemlich sicheres und effizientes Singleton-Implementierungsschema zur Verfügung zu stellen
Eager Loading : Objektinitialisierungsstrategie, die alle Wertzuweisungen sofort ausführt , damit alle erforderlichen Daten vollständig sind, bevor sie als gültig eingestuft werden.
Wird häufig implementiert, indem zusammengesetzte Objekte wie bei einem Konstruktoraufruf oder einer Initialisierung so schnell wie möglich mit allen bekannten Daten versorgt werden
Datenbindung : Häufig wird ein aktiver Link oder eine Karte zwischen zwei kompatiblen Informationsströmen erstellt, sodass Änderungen an einem in den anderen zurückgespiegelt werden und umgekehrt. Um kompatibel zu sein, müssen sie häufig einen gemeinsamen Basistyp oder eine gemeinsame Schnittstelle haben
Wird häufig implementiert, um eine sauberere, konsistente Synchronisation zwischen verschiedenen Anwendungsaspekten (z. B. Ansichtsmodell zu Ansicht, Modell zu Steuerung usw.) zu gewährleisten und Konzepte wie Quelle und Ziel, Endpunkte, Binden / Aufheben, Aktualisieren und Ereignisse wie zu beschreiben on_bind, on_property_change, on_explicit, on_out_of_scope
BEARBEITUNGSHINWEIS: Letzte größere Bearbeitung, um Beispiele für deren häufiges Auftreten zu beschreiben. Bestimmte Codebeispiele hängen vollständig von der Implementierung / Laufzeit / Plattform ab