Als nächstes möchte ich den Begriff Dynamisches binden,
mit Ihnen besprechen. Das ist hier bei uns die Frage
5. Erläutern Sie dynamisches Binden in Objekte und dicken Programmiersprachen.
Und wir gehen zur nächsten Folge Nummer 12. Zunächst
erst mal Wiederholung, was statischer und dynamischer Typ ist.
Diese Typen haben Sie schon gehört in SE1 und wir wollen
das beides unterscheiden. Den statischen, intably dynamischen Typ,
warum müssen wir das unterscheiden? Der statische Typ,
der statisch heißt unveränderlich, was hat damit zu tun,
was mit der Deklaration steht
Der Typ, der Deklaration bei einer Variablen
ist festgelegt durch den Programmierer und zum Zeitpunkt des Compiler-Laufs
wird das übersetzt in Java-Whitecode und damit ist es festgelegt.
Man kann es nicht mehr verändern.
Hier in dem Fall wird die Variable Liste 1,
dem Namen wird der Typ Liste von String Elementen zugewiesen.
Und damit ist klar, was für Operationen,
was für Methoden möglich sind mit dieser Variable
Zum Beispiel hier hinzufügen, wäre möglich. Hinzufügen ist eine Möglichkeit,
die List kennt, sie ist,
sie wissen das von der letzten Folie, lässt es ein Interface.
Und der Compiler wird prüfen,
wenn sie irgendwo nach diesen Zeilen irgendwo später das schreiben,
wird der Compiler prüfen, ob das zugelassen ist.
Das wäre erstmal der statische Typ. Der dynamische Typ hängt davon ab,
welches Objekt, welchen Typ das Objekt tatsächlich hat,
zur Laufzeit. Und zwar zum Zeitpunkt des Laufs des Programms
Erzeugen, neue Exemplare, neue Objekte. Und diese Objekte
haben einen Typ. Und dieser Typ kann von unterschiedliche,
er kann ein unterschiedlicher Typ sein, und zwar alles,
was erlaubt ist. Ja,
also wir hatten eben auf der Vorgehenden Folie hier die Definition,
die Deklaration mit Mist, als Deklaration, als List.
Und wir hatten kurz vorher, ich gehe mal ein paar Folien zurück,
da hatten wir im Moment das gleiche, das richtige Treffen.
Ja, genau, hier war das nochmal. Also wir
sind hier. Ja, also wir haben die List,
ist ein Interface und Linklist und erwählest, sind Subtypen davon.
Wenn wir also hier ein Objekt erzeugen vom Typ Winklist,
dann ist das zulässig. Ja, weil Liste 1 ist
als Typ Mist deklariert und Linklist, das ist zulässig.
Ja, und damit wird Liste 1 jetzt ein Objekt sein,
ein Exemplar sein, was alle Eigenschaften der Klassen und auch Dimplementierung der Klasse im Linklist enthält.
Ja, und damit ist es Nicht vorher bekannt.
Sie könnten das auch, wir würden ja auch Arraylist machen,
was wir hier unten gleich machen.
Und das könnte man jederzeit zur Laufzeit machen. Und deswegen,
weil es zur Laufzeit passiert. Deswegen heißt das Ganze,
dynamisch. Also man könnte hier auch einen neuen Typ zuweisen,
erredest, ein Exemplar mit dem neuen Typ.
Sondern das Objekt existiert, ändert es seinen Typ nicht.
Ja, also das wirkt kein maximal aufgelöst werden, freigegeben werden.
Dann kann hier ein Neues erzeugen. Aber wenn das Objekt
erst mal erzeugt ist von link ist hier, dieses,
das wird seinen Wert nicht ändern, das müssen Sie wieder unbedingt bemerken.
Ja, also dynamisch heißt nicht,
ich ändere das zur Laufzeit
Wenn sie so etwas machen wollen, brauchen wir ja spezielle Sachen.
Wir werden es später als das Strategy-Pedal ankommen. Das werden
sie später kennenlernen, müssen in diesen Veranstaltungen, glaube ich.
Aber da gibt es schon Möglichkeiten, das zu simulieren.
Aber der Typ bleibt während der Lebenszeit konstant.
Welche konkrete Methode wir aufrufen können,
was können wir nämlich für Operationen mit Liliste 1 machen?
Das hängt davon ab, was es wirklich für ein Exemplar
ist, in welcher Klasse es ist.
Sie ändern sich auch, dass aus dem Mist hier
ein Interface ist und gar nicht wirklich Operationen mithält
Und das muss man also erst, kann man erst zur
Laufzeit prüfen, ob das wirklich das Richtige ist.
Schauen wir uns den Begriff nochmal an, die Definition,
dynamisches Finden, zur Laufzeit wird der dynamische Typ bestimmt,
der Compiler kann beim Aufruf der Operation das prüfen, ja,
aber man kann das nicht vorher beim Schreibungsprogramm schon wissen,
was tatsächlich genommen wird.
Ja, so als kleine Hinzufügung, es gibt tatsächlich so ein statisches Binden von Methoden,
das ist wieder, sie kennen schon das Symbol Keks,
ja, für die Cracks, das ist weiterführen.
Das meinen wir nicht in der Vorlesung. Für uns ist wichtig, ja,
dieser Aufruf, der zum Beispiel hier der Operation Ed,
das hängt davon ab, was wir,
also im Moment, was wir für ein Objekt hier,
für ein Exemplar, für welcher Klasse wir erzeugt haben,
wird da das Ed von Linklist oder das Ed von Arraylist aufgerufen.
Ja, das ist jeweils was Unterschiedliches. Und wenn wir das vergleichen mit dem vorhergehenden Bild,
Moment, hier, ja, also wenn wir die Folge hätten,
diese Teile war irgendwo vorher und diese Teile war irgendwo danach
und dann kommt das mit dem etwas auf der nächsten Folge steht,
dann würde das bedeuten,
es wird das Ed von Awaylist aufrufen.
So, das hatten wir schon. Wie sieht denn das
aus, die zwei unterschiedlichen Ebenen?
Ja, das möchte ich in Jan so verdeutlichen,
damit sie diese beiden Begriffe nicht durcheinander bringen.
Ich bin mir sehr bewusst, dass wir sie heute mit komplizierten Begriffen,
Pulmorphie und hier Typ Hierarchien, Typ Vererbung konfrontieren.
Deswegen versuchen wir das nochmal so darzustellen auf der Ebene
des Typs, sind Definitionen dabei. Ich würde gesagt,
was macht die Methode, mit welchen Operationen macht sie das?
Das kann geprüft werden, ob das das Richtige ist.
Da benutzen wir den Begriff Operationen auch dafür und auf der
Implementationsebene, da geht es um Quellcode.
Da geht es tatsächlich um ausführbaren Code, der wirklich vorhanden ist,
dem ich starten kann und dann benutzen wir dafür auch gern den Begriff Methode,
um diese Unterscheidung vorzuüben. Das bezieht sich auf die Frage 5,
wir gehen mal zu den Fragen nochmal,
Erkel erneutern Sie das dynamische Binden,
da müssten Sie also in der Lage sein,
das zu erklären, dass wir hier den dynamischen,
diese wirkliche Zuweisung eines Exemplars erst zur Laufzeit machen.
Und deswegen ist das Ganze dynamisch,
weil das erst entscheidet,
welche konkrete Methode
dafür geeignet ist