Was ist dynamische Bindung?
In der Informatik ist die Namensbindung die Zuordnung eines Bezeichners, z. B. eines Funktions- oder Variablennamens, zu einem Code- oder Datenabschnitt. Im gängigsten Szenario, der statischen Bindung, ist diese Zuordnung zum Zeitpunkt der Kompilierung bekannt. Bei der dynamischen Bindung ist das von einer Funktion abgebildete Objekt zur Kompilierungszeit nicht bekannt und kann nur zur Laufzeit des Programms bestimmt werden. Aus diesem Grund wird die dynamische Bindung auch als späte Bindung bezeichnet. Die dynamische Bindung bietet zwar eine Flexibilität, die bei der statischen Bindung nicht verfügbar ist, ist jedoch mit höheren Leistungskosten verbunden als die statische Bindung.
Die dynamische Bindung hängt eng mit dem Polymorphismus zusammen, der Teil der objektorientierten Programmierung ist. Durch Polymorphismus kann derselbe Methodenname auf verschiedene Arten implementiert werden. Wenn der Code nicht so geschrieben ist, dass die genaue Methode zur Kompilierungszeit nicht bestimmt werden kann, muss die dynamische Bindung verwendet werden.
Beispielsweise könnte eine "Shape" -Klasse eine Methode mit dem Namen "GetArea" haben, da jede Form einen Bereich hat. Eine "Circle" -Unterklasse von "Shape" würde jedoch "GetArea" anders implementieren als eine "Square" -Unterklasse. Wenn daher ein neues Objekt vom Typ "Shape" erstellt wird und der Code die Methode "GetArea" für dieses Shape aufruft, kann der Compiler nicht wissen, ob das Shape ein Kreis oder ein Quadrat ist Es wird nicht wissen, welche GetArea-Methode aufgerufen werden soll. Dies ist ein Beispiel für eine dynamische Bindung, da die korrekte GetArea-Methode erst zur Laufzeit zugeordnet wird, nachdem das Programm die Form des Objekts kennt.
Die dynamische Bindung ermöglicht die flexible Verwendung abstrakter Methoden, ohne zu wissen, welche bestimmte Implementierung verwendet wird. Im Beispiel "Shape" könnte der Code so geschrieben werden, dass eine dynamische Bindung vermieden wird, indem explizit die folgende Logik verwendet wird: Wenn die Form ein Kreis ist, rufen Sie die GetArea-Methode des Kreises auf. Wenn es sich bei der Form um ein Quadrat handelt, rufen Sie die spezifische GetArea-Methode für Quadrate auf. Der Vorteil der dynamischen Bindung besteht darin, dass der Code sauberer und wartbarer ist als die Alternative. Im statischen Bindungsbeispiel gibt es eine Codeduplizierung, und der Code muss jedes Mal aktualisiert werden, wenn ein neuer Formtyp hinzugefügt wird.
Die Nachteile der dynamischen Bindung sind Leistung und Sicherheit. Bei der statischen Bindung weiß der Compiler genau, welcher Code aufgerufen werden muss, und kann den Code optimieren, um eine effizientere Ausführung zu erzielen. Die Typensicherheit kann ein Problem sein, da in einigen Implementierungen der dynamischen Bindung eine Methode für ein Objekt aufgerufen werden kann, das die Methode nicht unterstützt. Beispielsweise kann die Methode "GetArea" für ein Objekt aufgerufen werden, das keine Form ist und daher keine Methode "GetArea" enthält, was zu einem Laufzeitfehler führen kann. Eine statische Bindung würde dieses Szenario verhindern, indem ein Kompilierungsfehler ausgelöst wird.