04.4.1 Polymorphie angewendet, Teil 1 Jörn Loviscach https://www.youtube.com/watch?v=-ZYPqG-6Ntc Transkript (automatisch erstellt) 0:00 wie gehe ich nun damit um ich habe gesagt die kindklassen Instanzen der kindklassen dürfen die Instanzen der Mutterklasse vertreten dass das der 0:09 erste wesentliche Schritt zur Polymorphie ist für den lückendex Nummer 9 führe ich das jetzt mal tatsächlich vor was dieses vertreten heißt Sie 0:16 können sagen auch ich brauche mal ein neues Meeting das heißt von mir aus 0:23 M aber ich baue da jetzt kein neues Meeting das könnte ich ja ich könnte da jetzt ein neues Meeting bauen warum baue ich nicht einfach ein neues business 0:30 meeting eine Instanz der Kindklasse die jetzt eben eine Instanz der Mutterklasse vertritt schreibe ich jetzt blöderweise rein wahrscheinlich DateTime DateTime 0:42 now auf die Schnelle irgendeine Uhrzeit zu habenss irgendeine timpanp from was auch immer so so viel 0:53 Stunden irgendein Titel was wollen wir noch wir wollten ein Budget haben 20,0 dezimal wir wollten ein Topic haben 1:05 Deff ser einfallsreich so damit habe ich ein business meeting gebaut der konstraktor von business meeting wird 1:14 aufgerufen aber das business meeting verwende ich jetzt um hier das Meeting zu vertreten da steht m ist die Hausnummer kann sich erinnern 1:24 m ist die Hausnummer eines Meetings und ich weiß ins geheim dieses Meeting ist eigentlich gar kein meeting sondern stillschweigend ein business meeting 1:31 aber das stört mich ja gar nicht weil das business meeting öffentlich all das kann was das Meeting kann deshalb kann das dieses Meeting da vertreten und ich 1:40 kann jetzt hier z.B Fragen in P m.piority nach der Priorität Fragen und diese Priorität wird hoffentlich jetzt nicht Null sein für 1:55 das nackte Meeting wäre die Priorität Null aber dieses Meeting ist ja einfachgabtes business meeting wenn Sie das hier nicht sehen würden würden sie 2:03 meinen h da müsste jetzt ja null rauskommen weil das Meeting die Priorität Null hat aber eigentlich ist das Meeting ein business meeting deshalb 2:09 wird jetzt hoffentlich die Priorität 10 rauskommen to da sind vi und die Priorität ist c also ich rufe ihr die Eigenschaft 2:21 priority von einem Meeting augenscheinlich auf aber ins geheim wissen wir das Meeting ist ein business meeting und deshalb kommt 2:31 da als Priorität 10 raus es wird also immer bei den virtuellen und bei den überschriebenen dann überschriebenen Methoden wird immer die richtige Methode 2:39 aufgerufen genauso bei den virtuellen und danach überschriebenen properties wird die richtige aufgerufen die für das jeweilige 2:47 Ding so Stopp wenn m stoppen lässt so das funktioniert soweit also da kommt tatsächlich ze 3:03 raus gibt ze schreibe ich da mal hin bau mal weiter ich kann auch eine Liste anlegen von 3:13 Meetings in der Liste von Meetings müssen nicht unbedingt nur Meetings stehen es dürfen auch business meetings stehen oder Dinners 3:23 stehen Ableitungen davon Meetings natürlich erstmal bauen diese Liste so weil die Instanzen der Kindklasse 3:33 Instanzen der Mutterklasse vertreten können darf ich jetzt sagen ich bau noch mal so ein neues business meeting ups ich da noch eine Klammer ne 3:47 so baue ein neues business meeting ne baue ein neues business meeting nur business meeting blablabla und füge das zu dieser Liste 3:56 an Meetings hinzu das ist also streng genommen kein echtes meeting sondern was verfeinertes aber das stört mich nicht 4:04 wieder eine Instanz der Kindklasse die die Mutterklasse vertritt also in dieser Liste Meetings müssen nicht nur Meetings drin sein es darf alles an Kinden und 4:13 Enkeln und Urenkeln und was auch immer drin sein in so einer Liste dann weil die auch alle das können was die Eltern schon gekonnt haben genauso kann in 4:24 dieser Liste ein neues Dinner rein die darf ich also lustig mischen ich sage okay da kommt ein neues Ding ein neues Abendessen so das hat 4:34 netterweise ein standardkonstraktor ohne Parameter alle lustig gemischt hauptsache es sind Meetings alles was in der Liste drin steht müssen Meetings 4:41 sein oder in Klammern Ableitungen davon das frisst die Liste und dann kann ich natürlich hier genauso mir angucken was ist denn 4:54 P m ne nicht m Meetings gibt mir Meeting 1 in der Liste also nicht Meeting 0 sondern Meeting 1 in der Liste 5:06 gib mir Meeting ein in der Liste das ist also dieses Dinner gib mir dessen priority wie groß wird diese priority jetzt 5:16 sein das wird Null sein weil das ein Dinner ist und das Dinner hat keine Überschreibung für priority 5:27 wenn man in Dinner guckt ist Dinner DIN Dinner Dinner Dinner hier ist das Dinner Dinner überschreibt die priority nicht das heißt beim Dinner wird die priority 5:36 funktionieren wie in der Mutterklasse und in der Mutterklasse gibt sie null des wir da null rauskommen und wenn ich 5:45 nach dem nach der priority von Null Frage wird es natürlich wieder 10 sein weil in Meetings Null steht ein business meeting bevor ich Unsinn erzähle 5:54 probieren wir es lieber einmal aus also den hier ausführen nächste Schritt 6:03 den hier ausführen in P steht 10 drin weil Meetings von Null auch wenn das eine Meeting Liste ist eigentlich gar kein Meeting ist sondern ein business 6:12 meeting und deshalb gibt hier die priority 10 und wenn ich zum nächsten gehe Meeting 1 ist ein Dinner und das hat die priority Null als dummes 6:23 Beispiel sowas wie sowas dann in Aktion aussehen kann also sie können sich dann nachher nicht mehr drauf verlassen wenn Klasse irgendwo als Meeting auftaucht 6:32 dass das im Kern auch wirklich ein Meeting ist es kann auch ein Kind davon sein eine Instanz der Kindklasse davon sein das kann überraschende Effekte 6:40 haben aber typischerweise hat es sehr hilfreiche Effekte was ist einem z.B ererspart ist ein Switch Case wenn Sie früher sowas hatten oh ich habe eine 6:51 Liste an Meetings und ich muss jetzt das wichtigste rausfinden denn sie erstmal rausfinden müssen was ist der Typ vom jeweiligen meeting und dann haben sie 6:59 für den jeweiligen für das jeweiligen für den jeweiligen Typ an Meeting haben Sie eine bestimmte priority und entscheiden sich dann das wird dann 7:06 typischerweise irgendwas mit einem Switch Case ich gehe die Liste durch und habe für jeden Eintrag irgendein Switch Case mit dem ich alle Typen dann durch 7:14 dekliniere das ist hier nicht mehr nötig ich frage einfach jedes Ding direkt gib mir was du meinst was richtig ist tu was du meinst was richtig ist wenn sie in 7:23 objektorientierter Programmierung irgendwo ein Switch Case haben ist typischerweise was faul an der konstruk die meisten Switch cases kann man durch 7:33 solche Konstruktionen beseitigen indem man nur richtig ableitet wir sehen das sowieso in Aktion hier bei dem main 7:45 window was das Ableiten so alles natürlich nicht da sondern hier was das Ableiten so alles nettes tut hier steht ja mein main window 7:57 ert von der vorgefer dichten Klasse window so funktioniert das Ganze deshalb ist da alles mögliche schon eingebaut sie können sich ja angucken was denn 8:05 schon eingebaut ist und Punkt alle diese Methoden und properties und was auch immer da stehen 8:15 noch andere Sachen Events alle diese Sachen alle diese Sachen ich sollte vielleicht nicht sagen alle diese Sachen fast alle diese Sachen 8:23 sind von der Mutterklasse geerbt ein paar andere können noch paar einzelne können noch anders stehen falls sich jemals gewundert haben dass hier 8:30 partial steht ein Teil dieser Klasse steht in ein anderen Datei deshalb steht hier partial nur eine fußnot ignorieren sie das 8:40 ansonsten diese Mutterklasse stellt praktisch alle diese Methoden und properties und andere Sachen bereit die Erbe ich so funktioniert das überhaupt 8:50 deshalb muss ich das nicht alles schreiben deshalb funktioniert das mehrter automatisch ich sage nur was mein window mein main window besonders 8:58 macht insbesondere braucht es konstraktor der wird ja nicht geerbt der konstraktor es kriegt so ein paar Funktionen zur 9:06 Ereignisbehandlung und das war's hier dann sogar schon in dem Fall und ein paar Sachen die vor ihren Augen versteckt sind weil sie in anderen Datei 9:13 stehen die ich jetzt auch lieber gar nicht zeigen will weil sie eher fürchterlich aussehen also da sehen sie diese 9:21 Polymorphie in Aktion mein window was ich hier baue ist ein Spezialfall eine Erweiterung von window was mir Microsoft vorprogrammiert 9:32 hat es gibt eine Klasse von der man automatisch erbt ohne dass es dabei steht das hat glaube ich im Praktikum schon zu einigen Verwirrungen 9:41 geführt was eigentlich immer dabei steht ist folgendes ich Erbe von der Klasse Object das ist so das die 9:52 Minimalausstattung in c# in in Java ist das genauso in C++ nicht in in Java und Shar gibt es so ein Objekt mit Minimalausstattung von dem 10:01 ich grundsätzlich Erbe das kann ich nicht ändern ich erbe immer davon Punkt das steht dann auch nicht dabei man könnte es dazu schreiben das wäre ein 10:09 bisschen affig es steht einfach nicht dabei weil sowieso immer davon geerbt wird und diese Klasse Object was auch lustig ist dass eine Klasse Objekt heißt 10:18 kann ich auch nichts für hat sich so eingebürgert diese objectklasse hat so ein paar Standard Sachen die ich überschreiben 10:28 kann sie können ja einfach weiß hier Meeting scheint war nichts zu erben aber wenn sie jetzt overright tippen bietet ja trotzdem bisschen was 10:36 an das kommt nicht aus dem irgendwo wir sehen object equals und doch ja object getthh Code und vor allen D object to String das ist der 10:46 spannendste von den drei die ich hier per se Erbe also ich Erbe von einer Klasse die heißt object die Mutterklasse für 10:55 alles und insbesondere Erbe ich damit hier diese mit Methode to String die wollte ich noch mal ausdrücklich vorführen also sie können 11:04 in jeder Klasse die sie schreiben können Sie to String überschreiben weil jede Klasse auch ohne dass sie sagen von Object erbt deshalb haben Sie überall 11:13 diese virtuelle Methode drin können sie überschreiben und sollten Sie auch überschreiben ganz sinnvoll wäre hier zurückzugeben was man den so ein 11:21 wichtigen Daten hat M sagen wir mal was haben wir hier das wäre nachdenk nachdenk 11:31 nachdenk Meeting Meeting Plus und dann gebe ich einfach die wesentlichen Angaben plus when ne tit soll ich vielleicht 11:45 zuerstt Plus und ein Lehrzeichen und wann und ein Lehrzeichen und wie lange übrigens ganz stillschweigend was da schon passiert hier steht plus when 12:02 das ist eigentlich schon komisch dass das geht das ist eine Zeichenkette das ist eine Zeichenkette das ist eine Zeichenkette Plus für Zeichenketten in 12:09 Java genauso soll heißen Zeichenketten aneinander hängen und jetzt wird plötzlich ein when addiert aber when ist keine Zeichenkette 12:18 wen ist eine DateTime ein Zeitpunkt mit Datum und Uhrzeit was hierinter im Hintergrund passiert ist das automatisch für das 12:29 aufgerufen wird wenn das geschrieben wird passiert automatisch das hier na ma wir das hier das ist was automatisch passiert wenn Sie das Schreiben diese du 12:38 stringfunktion kommt an allen und Ecken Ecken und Enden automatisch vor in dem Framework wo immer irgendwas zu einer Zeichenkette werden soll ruft das 12:46 Framework to String auf hier passiert es automatisch ich schreib analog hier auch noch mal in den in die dinnerklasse so und bei der 12:59 business meeting auch noch in die Klasse rein natürlich nicht Dinner sondern business 13:07 meeting Meeting sobald irgendeine Instanz von diesen Klassen sich jetzt in eine 13:14 Zeichenkette verwandeln soll wird diese überschriebene virtuelle Methode aufgerufen wir könnten das wir jetzt super blödes Beispiel mache ich das 13:29 gerade mal ich kann z.B den Inhalt von meinem Knopf der hieß ne warte wenn ich dafffe Button 1 davon nehme ich mal den Inhalt Content und den setze ich jetzt 13:43 mal auf habe ich ein reines Meeting habe ich hier gar nicht egal nehme ich den 13:52 nicht Meetings von Null den setze ich mal auf Meetings von Null von Null ist ja eigentlich ein 14:03 Meeting ich brauche aber eine Zeichenkette und der wird jetzt hoffentlich einfach dafür to String aufrufen um die Zeichenkette zu 14:12 generieren das heißt sobald ich den Knopf klicke passiert das hier oben und dann wird zum Abschluss hier noch aus dem Meeting Meetings Null das heißt 14:20 diesem business meeting hier dieingfunktion aufrufen um den Inhalt vom Knopf zu setzen das mal klappt das heißt auf den Knopf müsste stehen 14:29 business meeting denn das habe ich eben als z stringfunktion gehabt und Achtung business meeting das ist natürlich die völlig unsinnige Anwendung dafür aber 14:37 sie sehen wie das dann in Aktion aussieht sobald irgendwas in dem Framework eine Zeichenkette haben will ruft es im Zweifelsfall ihre eigene to 14:45 String Funktion auf kommenti ich mal wieder aus und was total hilfreich ist ist dass der die 14:54 Bagger auch ihre ting Funktion aufruft ich gehe hier noch mal rein dann guck gucken wir uns die Werte die wager 15:02 an ja D sehen Sie hier die Variable a halt a wo ist a ach so die gab's vorher 15:13 schon bei der Variablen a steht jetzt business meeting bei derblen B na gut das ist ein M das Meeting m ist ein business meeting 15:27 offensichtlich da sehen sie Meeting m wird als business meeting da wiedergegeben ich könnte noch mal in Meetings reingehen 15:35 hier die mal auf im Meetings rein dann sehen Sie hier A0 ist ein business meeting und eins ist ein Dinner der ruft mir hier schön fleißig immer die toing 15:44 Funktion auf für alles was drinnen steht so kommen die Zeichenketten hier zustande wenn Sie die to String Funktion nicht selbst 15:50 überschreiben kommt automatisch einfach der Name der Klasse dann Stund die hier sowieso sowieso Punk business meeting und hier Stund sowieso sowieso Punkt 15:59 Dinner aber das lustige ist wenn ich jetzt eben die toingfunktion selbst überschreibe kann ich auch sowas veranstalten ich nehme mal noch 16:10 irgendeine variable Meeting baue ein neues [Musik] Meeting Q ein neues 16:19 Meeting Meeting und schreibe wirklich mal was rein kopiere das mal ganz 30i von dem business 16:27 meeting dass H wirklich was tut gehe mal hierhin und gucke was mir der diebagger dann anzeigt 16:38 dieingfunktion für das Meeting als solches hatte ich ein bisschen raffinierter gebaut sie sehen hier steht Q noch auf 0 das ist noch nicht 16:46 ausgeführt worden ich stehe vor der Zeile deshalb ist Q noch 0 der Verweis ist noch 0 erst jetzt im nächsten Schritt wird das nu ausgeführt 16:56 werden und und hier kann ich direkt ablesen was drinnen steht mit der to String Funktion auch an dieser Stelle wird die to String Funktion aufgerufen 17:04 Meeting bla war der Titel die Uhrzeit und die Länge hintereinander so wie ich das in der to stringfunktion angegeben habe also schon 17:13 aus dem Grund sollte man den eigenen Klassen dieingfunktion überschreiben dass man hier in der Liste oder wenn man mit der 17:19 Maus drüber geht sofort sehen kann was drinen steht sie können hier im Prinzip auch das Aufklappen und sehen dann noch mal im Detail was drin steht aber 17:26 spätestens hier wenn Sie so eine Liste haben von hunderten von Sachen W s jetzt nicht mehr aufklappen da soll sofort stehen was da drin ist und das ist total 17:35 hilfreich dann dann die toing Funktion überschrieben zu haben das ist dann genauso eine virtuelle Funktion wie alle anderen 17:46 auch die man beliebig überschreiben kann das einzig komische ist dass diese virtuelle Funktion in einer Klasse steht die bisher gar nicht vorgekommen war 17:56 weil die so natürlich ist ist dieser Form weil die so natürlich ist dass man sie gar nicht mehr hinschreibt über object müssen sie erstmal nichts 18:06 mehr wissen denke ich als to String dass sie das Überschreiben können ach so das W lentex 10 gehesen wir hier 18:20 den nach wo ist die String Funktion