Dynamic dispatch

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

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

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

Erklärung

Bei Klassenhierarchien kann eine Variable, deren Typ auf eine bestimmte Klasse festgelegt ist, auch Instanzen von deren Unterklassen beinhalten, in denen eventuell Methoden der Oberklasse überschrieben worden sind.

Ruft man nun für die das in der Variablen gespeicherte Objekt 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 solchen Fällen zur Laufzeit in Abhängigkeit von der Tatsache, ob das Objekt eine Instanz der Ober- oder einer Unterklasse ist, die jeweilige Version der Methode aufgerufen wird.

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

Viele objektorientierte Programmiersprachen erlauben, für jede Methode einzeln festzulegen, ob statische oder dynamische Bindung anzuwenden ist. Diese Eigenschaft wird logischerweise mitvererbt.

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");
    }
  }
 
  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 Programms. Üblicherweise legt der Compiler für jede virtuelle Methode eine Tabelle virtueller Methoden an, welche für die möglichen dynamischen Typen Referenzen auf die aufzurufenden Methoden enthält.


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Dynamic dispatch — Theories and practice of polymorphism Double dispatch Multiple dispatch Operator overloading Polymorphism in computer science Polymorphism in OOP Subtyping Vir …   Wikipedia

  • Dispatch — or dispatches may refer to: In literature Dispatches (book), a 1977 book by Michael Herr about the Vietnam War dispatches (magazine), a magazine edited by Gary Knight and Mort Rosenblum In radio and television Dispatches (radio program), a… …   Wikipedia

  • Dynamic binding — may refer to: Dynamic dispatch in Computer Science Dynamic binding (chemistry) This disambiguation page lists articles associated with the same title. If an internal link led you …   Wikipedia

  • Dynamic Language Runtime — Developer(s) Microsoft Dynamic Language Runtime Team Stable release 1.0 / April 16, 2010 Operating system Microsoft Windows, Debian, Ubuntu Platform …   Wikipedia

  • Dynamic range compression — This article is about a process that intentionally reduces the dynamic range of audio signals. For similar reductions caused by circuit imperfections, see Gain compression. For processes that reduce the size of digital audio files, see Audio… …   Wikipedia

  • Dynamic web page — A dynamic web page is a kind of web page that has been prepared with fresh information (content and/or layout), for each individual viewing. It is not static because it changes with the time (e.g. news content), the user (e.g. preferences in a… …   Wikipedia

  • Multiple dispatch — Theories and practice of polymorphism Double dispatch Multiple dispatch Operator overloading Polymorphism in computer science Polymorphism in OOP Subtyping …   Wikipedia

  • Double dispatch — Theories and practice of polymorphism Double dispatch Multiple dispatch Operator overloading Polymorphism in computer science Polymorphism in OOP Subtyping …   Wikipedia

  • High Dynamic Range — Ein High Dynamic Range Image (HDRI, „Bild mit hohem Dynamikumfang“) oder HDR Bild ist ein digitales Bild, das die in der Natur vorkommenden großen Helligkeitsunterschiede detailgetreu speichern kann. Herkömmliche digitale Bilder, die dazu nicht… …   Deutsch Wikipedia

  • High Dynamic Range Imaging — Ein High Dynamic Range Image (HDRI, „Bild mit hohem Dynamikumfang“) oder HDR Bild ist ein digitales Bild, das die in der Natur vorkommenden großen Helligkeitsunterschiede detailgetreu speichern kann. Herkömmliche digitale Bilder, die dazu nicht… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”