Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Dynamische Bindung

Der Begriff dynamische Bindung (englisch dynamic binding) bezeichnet die verzögerte Bindung eines Namens an ein Objekt, das diesen Namen implementiert; …

Inhalt5 Abschnitte
  1. 1. Grundidee und Bedeutung
  2. 2. Polymorphe Methoden zur Laufzeit
  3. 3. Einsatzbereiche
  4. 4. Technische Umsetzung
  5. 5. Java-Beispiel

Grundidee und Bedeutung

Dynamische Bindung (englisch dynamic binding) bedeutet, dass ein Name erst zur Laufzeit an das Objekt gebunden wird, das diesen Namen implementiert. Die Zuordnung zu einer konkreten Variablen, Funktion oder Methode erfolgt also erst bei der Ausführung einer Anweisung.

Sie ist allgemein eine Eigenschaft schwach typisierter Programmiersprachen, wird inzwischen aber auch in streng typisierten Sprachen verwendet. In der objektorientierten Programmierung ist sie wichtig, weil sie erlaubt, Verhalten in einer Basisklasse allgemein oder abstrakt zu beschreiben und es in abgeleiteten Klassen jeweils passend zu implementieren.

Polymorphe Methoden zur Laufzeit

Bei einer Klassenhierarchie kann eine Variable mit einem festgelegten Typ einer Basisklasse auch ein Objekt einer abgeleiteten Klasse referenzieren. Hat diese abgeleitete Klasse eine Methode der Basisklasse überschrieben, entscheidet sich erst beim Methodenaufruf, welche Implementierung ausgeführt wird.

Eine polymorphe oder virtuelle Methode wird daher anhand des tatsächlichen Objekttyps ausgewählt: Zuerst wird beim Aufruf der konkrete Typ beziehungsweise die Klasse des Objekts ermittelt, danach wird die passende Methodenimplementierung aufgerufen. Methodenüberladung ist eine zentrale Funktionalität der Polymorphie.

Klassen können festlegen, dass Methoden nicht überschrieben werden dürfen, etwa mit final in C++, oder überschrieben werden müssen, etwa bei rein-virtuellen Methoden einer C++-Basisklasse. Eine abstrakte Basisklasse kann so ein Interface aus polymorphen Methoden festlegen, ohne selbst zwingend eine Implementierung anzugeben. Instanziierungsfähig ist eine Klasse erst, wenn sie alle polymorphen Methoden einschließlich der geerbten Methoden implementiert.

Nicht polymorphe Methoden sind statisch gebundene Methoden. In vielen objektorientierten Sprachen lässt sich für jede Methode einzeln wählen, ob sie statisch oder dynamisch gebunden wird; diese Eigenschaft wird vererbt. Dynamische Bindung erleichtert spätere Erweiterungen: Spezialisierte Klassen können ergänzt werden, ohne die übrige Software überarbeiten zu müssen.

Einsatzbereiche

In der objektorientierten Programmierung dient dynamische Bindung dazu, die Implementierung polymorpher Methoden laufzeitabhängig auszuwählen. Die Auswahl kann beispielsweise mithilfe von Run-Time Type Information (RTTI) erfolgen; RTTI sind Typinformationen, die während der Programmausführung verfügbar sind.

Auch die kontextorientierte Programmierung (Context-Oriented Programming, COP) verwendet dynamische Bindung als allgemeinen Mechanismus. Damit kann Objektverhalten zur Laufzeit dynamisch zusammengesetzt und ausgeführt werden. COP behandelt dabei die Entwicklung kontextsensitiver Systeme auf Sprachebene und stellt Abstraktionen bereit, um Anpassungen modular zu verwalten und dynamisch zu aktivieren.

Technische Umsetzung

Wie dynamische Bindung umgesetzt wird, hängt von der Programmiersprache ab. Der Artikel nennt zwei Möglichkeiten:

  • Bei einer Virtual Method Table legt der Compiler für jeden Typ mit virtuellen Methoden eine Tabelle an. Diese enthält Referenzen auf die jeweils aufzurufenden Methoden.
  • Bei einem Dispatch Tree fügt der Compiler an jedem Aufruf einer dynamischen Methode eine Verzweigung ein. Sie wählt anhand des Objekttyps die richtige Methode aus.

Java-Beispiel

Das Java-Beispiel definiert die Basisklasse Saeugetier mit der Methode steckbrief(). Die abgeleiteten Klassen Gepard und Elefant überschreiben diese Methode. Eine Liste vom Typ List<Saeugetier> enthält anschließend ein Saeugetier-, ein Gepard- und ein Elefant-Objekt.

In der Schleife wird für jedes Element tier.steckbrief() aufgerufen. Obwohl die Variable tier den Typ Saeugetier hat, wird jeweils die Methode des tatsächlichen Objekttyps ausgeführt. Die Ausgabe lautet:

  • Ich bin ein Säugetier.
  • Ich bin ein Gepard.
  • Ich bin ein Elefant.

Lernvideos zu Dynamische Bindung

Weiterlesen

Objektorientierte Programmierung Die objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee besteht darin … Objekt (Programmierung) Ein Objekt in der Programmierung bezeichnet eine inhaltlich zusammengehörige Datenmenge: In der objektorientierten Programmierung wird eine Objektinstanz … Variable (Programmierung) In der Programmierung ist eine Variable ein abstrakter Behälter für einen Wert, der bei der Ausführung eines Computerprogramms auftritt. Funktion (Programmierung) Eine Funktion (englisch function) ist in der Informatik und in verschiedenen höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, … Methode (Programmierung) Methoden (englisch method oder member function) sind in der objektorientierten Programmierung Unterprogramme in der Form von Funktionen oder Prozeduren, … Laufzeit (Informatik) Der Begriff Laufzeit (englisch runtime) beschreibt in der Informatik einerseits die Zeitdauer, die ein Programm, ausgeführt durch einen Rechner, … Typisierung (Informatik) B. Variablen, Funktionen oder Objekte (im Sinne der objektorientierten Programmierung) korrekt verwendet werden. Ein Ziel der Typisierung ist die Vermeidung von … Programmiersprache Bei deklarativen Programmiersprachen ist der Ausführungsalgorithmus schon vorab festgelegt und wird nicht im Quelltext ausformuliert/beschrieben, sondern es … Dialekt Im deutschen Sprachgebiet erwirbt ein Dialektsprecher ab seinem Eintritt in die Grundschule eine zusätzliche normierte Standardsprache (Standarddeutsch). Polymorphie (Programmierung) Polymorphie oder Polymorphismus (griechisch für Vielgestaltigkeit) ist ein Konzept in der objektorientierten Programmierung, das ermöglicht, … Klasse (Objektorientierung) Die Klasse dient als Bauplan für die Abbildung von realen Objekten in Softwareobjekte und beschreibt Attribute (Eigenschaften) und Methoden (Verhaltensweisen) … Abgeleitete Klasse Die abgeleitete Klasse erbt alle Attribute (Member) und Methoden der Basisklasse, kann dabei aber nur auf die nicht als privat deklarierten direkt zugreifen.