Diskussion:Dynamische Bindung

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 4 Jahren von 109.192.123.147 in Abschnitt Nach wie vor ist der Artikel falsch
Zur Navigation springen Zur Suche springen

Was hat denn dynamische Bindung mit Polymorphie zu tun? Das sind doch zwei Paar Stiefel: Dynamische Bindung beschreibt, wo eine Variable ihren Wert erhält, Polymorphie ist ein Typkonzept.

- Genau, es ist grob falsch


Sorry, Dynamische Bindung hat was mit Polymorphie zu tun. Ist ein wichtiger Aspekt darin.

  • Es tut mir leid. Informatik ist eine Wissenschaft. Mag sein, dass der Begriff bei Java-Programmierern so verwendet wird, aber ansonsten ist es grob falsch. Was Ihr erklärt, ist weder dynamic binding noch late binding - was trotz des gemeinsamen Wortes binding zwei Paar Schuh sind-, sondern einfach ein Beispiel für ad-hoc Polymorphismus per Vererbung oder Polymorphismus allgemein.
  • Ihr könnt die anderen Begriffe in der englischsprachigen Wikipedia nachsehen [1] oder googlen. Bitte nehmt bald Stellung, damit der Artikel korrigiert werden kann.
Hm, dachte weil wir es sowohl in Java in unserer Vorlesung hatten, als auch Bjarne Stroustrup den Begriff für die späte Bindung in seinem Buch The C++ Programming Language benutzt, müsste da schon was dran sein. Nur... was soll man jetzt tun? Den Artikel in seiner jetzigen Form verschieben und von hier höchstens als Anmerkung drauf verweisen? Dann würde ich aber diejenigen bitten, vorher ihre Vorstellung des "richtigen" dynamischen Bindens hier als brauchbaren Artikel zu hinterlassen ;) --Prometeus 20:52, 3. Feb 2006 (CET)
Das klingt gut. Euer Text enthält ja richtige Information. Der Vorschlag wäre dann, zunächst dynamische Bindung nach Art von Shells zu erklären und unten einen Link "Darunter wird auch ... verstanden" und unter ... Eure Seite zu verlinken. Als Namen für ... schlage ich Dynamic Dispatch vor, bin mir da aber nicht 100% sicher. Was meint Ihr?

Also der Artikel sieht jetzt so richtig schlecht aus. Warum muss man sich immer an der engl. Version orientieren? Da muss auch nicht alles immer richtig sein... Statische und dynamische Bindung haben zentral was mit C++ und Java zu tun.

Statische und dynamische Bindung haben zentral was mit C++ und Java zu tun. Wie oben mehrfach erklärt ist das falsch. Wenn Du konkrete Kritik hast, nenn die doch. Ich werde den Artikel jedenfalls wie mit Benutzer:Prometeus besprochen überarbeiten.

Ihr seid einfach nur peinlich. Der Artikel MUSS Java und C++ zentral beinhalten, andernfalls ist der Artikel ganz einfach falsch. Ihr tragt so nur zu der weiteren Unglaubwürdigkeit der Wikipedia bei...

Statische und dynamische Bindung würds auch ohne Java und C++ geben. Dies sind ja nur Programmiersprachen die dieses Konzept umsetzen.

Genau! Es ist kompletter Unsinn, dass dynamische Bindung etwas mit C++ zu tun hat. Dynamische Bindung ist ein sehr wichtiges Konzept der OO und C++ benutzt dieses (wenn auch nicht 100%, da der liebe Stroustrup sich die Arbeit bei der nichtvirtuellen Mehrfachvererbung in Hinblick auf die Mehrdeutigkeit (-> statische Bindung) etwas erleichtern wollte ;) )
Dann könnte man ja auch sagen: WEP hat etwas mit FritzBox zu tun, deshalb muss FritzBox unbedingt in den WEP-Artikel.
Was mich ankot** bei der Wikipedia sind diese selbsternannten Experten, die meinen alles besser zu wissen. Da wird nicht konstruktiv diskutiert, sondern nur versucht den eigenen Standpunkt mit allen rhetorischen Mitteln zu verteidigen. Ich kenne dyn. Binden auch aus dem Zusammenhang mit Java und auch so, wie es auf der Seite zur Zeit beschrieben ist. my three cents.

---

Dynamic Binding und Dynamic Dispatch sind zwei vollständig unterschiedliche Dinge. Dynamic Dispatch meint tatsächlich den Methodendispatch zur Laufzeit anhand der Klassen der Argumente. Dynamic Binding hingegen meint eine Bindung in einer 'dynamischen Umgebung' (dynamic environment). Für Variablen bedeutet das, dass es Hierarchien von Umgebungen geben kann und die Bindungen schattiert werden können. Diese Bindungsumgebungen können zur Laufzeit erzeugt werden. Deswegen 'dynamisch'. Variablen können zur Laufzeit neu gebunden werden. Die Bindung einer Variable wird erst zur Laufzeit ermittelt. Das Konzept geht im Bereich der Programmiersprachen mindestens bis auf die erste Lisp-Implementierung Ende der 1950ger Jahre zurück. In den ersten Lisp-Implementationen gab es nur dynamische Bindung. Später wurde mit Scheme und Common Lisp (Ende der 1970ger, Anfang der 1980ger Jahre) die lexikalische (statische) Bindung als Standard eingeführt.

Mit statischer Bindung in Common Lisp:

 (let ((fn (let ((a 1))
               (lambda () a))))
    (let ((a 10))
      (funcall fn)))
-> Ergebnis ist 1.

Mit dynamischer Bindung in Common Lisp:

 (let ((fn (let ((a 1))
               (declare (special a))
               (lambda ()
                  (declare (special a))
                  a))))
     (let ((a 10))
          (declare (special a))
          (funcall fn)))
 -> Ergebnis ist 10.

In unterem Beispiel wird die Funktion aufgerufen und der Wert der Variable A ermittelt. Da wir es mit dynamischer Bindung zu tun haben, wird nicht die Umgebung der Definition (A = 1), sondern die Laufzeitumgebung (A = 10) benutzt. -RJ


Dynamic Dispatch hat mit Polymorphie nix zu tun! Afaik ist der Ausdruck 'Late binding' fuer Polymorphie das richtige und kommt aus der zeit als funktionsaufrufe (genauer gesagt der funktionspointer) an polymorphe methoden beim aufruf auf die richtige methode gebunden wurde. Dynamische Bindung hab ich noch nicht gehoert. Dynamic Dispatch beschreibt das verhalten im bezug auf ueberladenen methoden, also methoden mit gleichem namen und anderer signatur. Ein Bsp:

class test {
  public static void print(Typ1 obj){
    Syso("typ1");
  }

  public static void print(Typ2 obj){
    Syso("typ2");
  }

}

class Typ1 ...
class Typ2 extends Typ1 ...

class haupt(){
  public static void main(String[] args){
     Typ2 t2 = new Typ2();
     Typ1 t1 = t2;
     test.print(t1);
  }
}

Da java kein dynamic dispatch kann wird hier typ1 ausgegeben. Der methodenaufruf wird statisch gebunden. Groovy z.B. wuerde typ2 ausgeben. Eigentlich suchte ich nur nach dem Deutschen Begriff fuer Dynamic Dispatch. Stefan.qn 15:56, 1. Feb. 2008 (CET)Beantworten

---

Vollkommen richtig was dynamisches Binden angeht! Ich beschaeftige mich momentan mit der Sprache Clojure, welche ein Lisp-Dialekt ist. Zur Dokumentation hat jemand Beispiele des Buches "Practical Common Lisp" auf Clojure umgemuenzt. Hier das Beispiel vom dynamischen Binden: http://thinkrelevance.com/blog/2008/09/16/pcl-clojure-chapter-6.html

Bei dynamic dispatch muss ich allerdings widersprechen: Angenommen, man hat generische Funktionen, also Funktionen, welche von der Klasse losgeloest sind. Ruft man eine solche Funktion auf und uebergibt das Laufzeitobjekt der Klasse der Funktion als Parameter, so kann ueber den konkreten Typ des Objektes dispatched werden und ist nichts anderes als die beschriebene Polymorphie. Bei Clojure ist es moegliche, sogenannte Multimethods zu definieren (http://clojure.org/multimethods), welche ueber die Parameter einer Funktion die richtige Funktion auswaehlen und aufrufen. Bei Polymorphie wird dies ueber einen Parameter gemacht (single value dispatch), naemlich ueber den impliziten Parameter "this". [churib, bin unangemeldet] (nicht signierter Beitrag von 82.82.220.107 (Diskussion) 14:09, 8. Sep. 2010 (CEST)) Beantworten

Überarbeitung, Begriffsklärung[Quelltext bearbeiten]

Das Problem dieser Diskussionsseite ist offensichtlich, dass der Begriff Dynamische Bindung unter verschiedenen Aspekten verwendet wird. Der erste Entwurf dieses Artikels vom 23. Dez. 2005 meinte etwas ganz anderes, nämlich die hier in der Diskussion breit dargestellten Bindung von Variablen zur Laufzeit (Lisp-Beispiel). Diese Bedeutungserklärung hatte im Artikel aber offensichtlich nur eine kurze Überlebenschance, bis 8. Jan. 2006. Danach wurde hier die Dynamische Bindung von Methodenaufrufen bei polymorphen Klassen erklärt. Sachlich ist das alles ganz OK.

Ich habe im Artikel eine Begriffsklärung mit Links untergebracht. Vergessen habe ich dabei das hier erwähnte Dynamic Dispatch, ein weiterer Aspekt.

Es ist nun wichtig, kein Doppelleben von Artikeln in der Wikipedia zu erzeugen. Ich mach mich auf die Suche ob irgendwo anders das Dynamische Binden von Methodenaufrufen bezüglich Polymorphie nochmal erklärt ist. Erst dann werde ich diese Bedeutung etwas besser beschreiben. Die anderen Bedeutungen sollten hier querverweist aber in anderen Artikeln entsprechend ausführlich erklärt werden (oder andersherum, polymorphes Binden woanders), aber bitte immer mit dem Verteiler der Begriffsbedeutungen am Artikelanfang. Um die anderen Bedeutungen kann ich mich nicht selbst kümmern, da ich wenig bis gar nicht mit dynamischen Programmiersprachen arbeite (keine Zeit, würde gerne). Ich bin sozusagen Java/C/C++-Spezi. --HartmutS 16:08, 7. Jan. 2012 (CET)Beantworten

Ṽorerst aufgelöst gem. BKL2--repat 15:58, 22. Jan. 2012 (CET)Beantworten
Da fehlt aber noch die Lösung eines Konflikts und Erklärung einer weiteren Bedeutung: Dynamisches Binden bezieht sich auch auf die Auflösung von Methodenaufrufen zur Laufzeit des Programms (im Ggs. zu statischem Binden zur Übersetzungszeit). Gemeint ist hiermit die Arbeitsweise des Linkers (=Binders), zur Laufzeit ist das ld.so. Dessen Aufgabe ist es, zur Übersetzungszeit festgelegte Methodenaufrufe durch Auffinden und ggf. Laden von dynamischen Bibliotheken (.so, .dll) so zu verketten, daß sie ausgeführt werden können. Das ist deswegen wichtig, weil z.B. die Seite Virtuelle Methode mit genau dem Erklärungsbedarf hierher verlinkt. (nicht signierter Beitrag von 91.60.10.152 (Diskussion) 16:11, 19. Jul 2014 (CEST))

Nach wie vor ist der Artikel falsch[Quelltext bearbeiten]

Auch wenn die letzten Arbeiten an diesem Artikel schon etwas zurückliegen, ist der Begriff Bindung dennoch wichtig.

In diesem Artikel wird er falsch erklärt. Dynamische Bindung hat rein gar nichts mit OOP zu tun. Es gab sie schon lange vor Simula. Was der Autor meint, nennt sich "späte Bindung". West of House (Diskussion) 15:21, 18. Mär. 2019 (CET)Beantworten

Also ich wüsste nicht, dass es endgültige Definitionen dieser Begriffe gibt, die alle Wissenschaftler auf die absolut gleiche Weise benutzen. Man sollte natürlich klar definieren, was man darunter versteht und sagen, wo die Begriffe wie benutzt werden. Für mich ist "late binding" das späte Binden der Funktion an ein Objekt z.B. über virtuelle Methoden im Gegensatz zum statischen, frühen Binden, bei dem die genaue Funktion eine Konstante ist. "Dynamic Dispatch" würde ich im Zusammenhang eines dynamischen Typsystems benutzen, bei dem man auch eine Objektmethode aufrufen kann, ohne zu wissen, welcher Typ das Objekt hat und ob das Objekt diese Methode anbietet. Da bei Java alle Typeigenschaften deklariert werden müssen, bietet Java in dieser Definition "Late Binding" aber kein "Dynamic Dispatch". --Velosonix (Diskussion) 21:36, 26. Aug. 2019 (CEST)Beantworten

In Java sind alle Bindungen, die nicht "late" sind, lexikalisch. (Der Begriff "dynamic dispatch" ist mir unbekannt. Es könnte sich um die Art handeln, wie im metaobject protocol die Liste der "Sorted Applicable Methods" mit Hilfe der Class Precedence List ermittelt wird. Damit wäre aber Java nicht betroffen, denn es kennt weder Multimethoden noch Mehrfachererbung) (nicht signierter Beitrag von West of House (Diskussion | Beiträge) 22:13, 26. Aug. 2019 (CEST))Beantworten
@West of House: Mit "Dynamic Dispatch" habe ich die Auflösung in einem dynamischen Typsystem gemeint, bei dem man auch Objekte referenzieren kann, die in keiner (expliziten) Vererbungshierarchie stehen. Java ist davon also nicht betroffen. Ein dynamisches Typsystem braucht überhaupt keine Vererbung, um "Dynamic Dispatch" zu betreiben, jedenfalls in der Definition, die ich beschrieben habe. Dynamic Dispatch ist ein Teil des Duck-Typing. Sprachen, die das unterstützen sind JavaScript, Python, Ruby etc. Ich habe den Eindruck, dass man hier das dynamische/Late Binding vs statische/Early Binding aus der Objektorientierung mit den Gültigkeitsbereichen/Scopes von Variablenbezeichnern/Identifier vermengt. Die Begriffe sind in der Tat ähnlich oder gleich, haben aber erstmal nichts miteinander zu tun. Java, C# und C++ sind im Sinne des Gültigkeitsbereichs alle ausschließlich lexikalisch gebunden, unterstützen aber auch das dynamische Binden im Sinne der Objektorientierung. Das dynamische Binden der Objektorientierung unterstützen Java und C# über die sog. Referenztypen, C++ über Pointer (T*) und Referenzen (T&). --Velosonix (Diskussion) 08:13, 27. Aug. 2019 (CEST)Beantworten
Ich habe nochmal nachgelesen: Dynamic Dispatch wird oft als Synonym für Late Binding/OOP-Dynamic-Binding benutzt. Daher könnte man sich überlegen, den Artikel in Dynmamic Dispatch umzubenennen. Zu Dynamic Dispatch gehört m.E. dann auch alle Arten von dynamischer Auflösung dazu, sowohl Duck-Typing als auch Klassen mit "Virtual-Method-Tables" etc. --Velosonix (Diskussion) 09:22, 27. Aug. 2019 (CEST)Beantworten

Ich schlage vor den Artikel "Dynamisches Binden" und nicht "Dynamische Bindung" zu nennen. Das ist der Begriff, der in Bertrand Meyers Buch über Eiffel verwendet wird. Auch ein Blick in seine Definition kann evtl. nicht schaden. (nicht signierter Beitrag von 109.192.123.147 (Diskussion) 08:45, 15. Feb. 2020 (CET))Beantworten

Dynamic Binding und Dynamic Scoping[Quelltext bearbeiten]

[2]

Schaut man in die englischsprachige Wikipedia, dann findet man eine Übersichtsseite, die zwischen Dynamic Binding (Late Binding) und Dynamic Scoping unterscheidet. Unter Dynamic Scoping wird das beschrieben, was manche auf dieser Diskussionsseite unter Dynamischer Bindung verstehen und diesen Artikel deshalb für falsch halten. --Velosonix (Diskussion) 20:32, 27. Aug. 2019 (CEST)Beantworten

Ich schlage vor, zwei Artikel zu erstellen, welche diese Titel haben könnten mit dem Hinweis, dass das eine nichts mit dem anderen direkt zu tun hat:

Dynamische Methodenbindung (Polymorphie)

Dynamische Variablenbindung (Geltungsbereich) --Velosonix (Diskussion) 20:49, 27. Aug. 2019 (CEST)Beantworten