Das Kefk Network Wiki befindet sich im Testbetrieb.


Dynamische Bindung

Aus Kefk.

Wechseln zu: Navigation, Suche
Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf bitte mit, ihn zu verbessern, und entferne anschließend diese Markierung.


In der Informatik, speziell der objektorientierten Programmierung, ist die Dynamische Bindung (engl. dynamic dispatch) ein Begriff, der den Umgang des Compilers mit Polymorphie polymorphen Methoden beschreibt.

Man spricht von dynamischer Bindung, wenn ein Methodenaufruf zur Laufzeit anhand des tatsächlichen (dynamischen) Typs eines Objektes aufgelöst wird.

Inhaltsverzeichnis

Erklärung

Bei Klassenhierarchien kann die Variable einer Klasse auch Instanzen von Unterklassen beinhalten, welche eventuell Methoden der Oberklasse überschreiben.

Ruft man nun für die Klassenvariable eine bestimmte Methode auf, gibt es zwei Kandidaten: 1. Die Methode der Oberklasse 2. Die überschriebene Version der Unterklasse

Von dynamischer Bindung spricht man, wenn in diesem Fall zur Laufzeit geprüft wird, ob die Klassenvariable eine Instanz der Ober- oder einer Unterklasse beinhaltet und dann die jeweilige Version der Methode aufgerufen wird.

Wird stattdessen immer die Methode der Oberklasse genutzt, so spricht man von statischer Bindung.

Die dynamische Bindung ist von enormer Bedeutung für die objektorientierte Programmierung, da die Flexibilität der Vererbung nur durch dynamische Bindung zum Tragen kommt.

Beispiele

Ein typisches Beispiel zu dynamischer Bindung in Java:

 class Saeugetier {
   void steckbrief() {
     System.out.println("Ich bin ein Saeugetier");
   }
 }
 class Gepard extends Saeugetier {
   void steckbrief() {
     System.out.println("Ich bin ein Gepard\n");
   }
 }
 class Elefant extends Saeugetier {
   void steckbrief() {
     System.out.println("Ich bin ein Elefant\n");
   }
 }
 public class Basisklassenarrays {
   public static void main(String[] args) {
     Saeugetier[] saeuger = new Saeugetier[4];
     for(int i = 0, n = saeuger.length; i < n; i++) {
       if (Math.random() < 0.5)
         saeuger[i] = new Gepard();
       else
       saeuger[i] = new Elefant();
     }
     System.out.println("Alle Tiere durchgehen: \n");
     for(int i = 0, n = saeuger.length; i < n; i++) {
       saeuger[i].steckbrief();
     }
   }
 }

Implementierung

Die dynamische Bindung erfordert eine Typprüfung zur Laufzeit. Sie muss den Quelltext daher erweitern und führt zu einer (geringfügigen) Verlangsamung des Programmes. Üblicherweise legt der Compiler für jede virtuelle Methode eine Virtual function table an, welche für die möglichen dynamischen Typen Referenzen auf die aufzurufenden Methoden enthält.

Siehe auch

Wikipedia
Dieses Dokument entstammt in seiner ersten oder einer späteren Version der deutschsprachigen Wikipedia. Es ist dort zu finden unter dem Stichwort Dynamische_Bindung, die Liste der bisherigen Autoren befindet sich in der Versionsliste; die Originalfassung kann dort auch bearbeitet werden. Alle Texte der Wikipedia und ihre Derivate stehen unter der GNU-Lizenz für freie Dokumentation.
Persönliche Werkzeuge
Andere Sprachen