Zum Inhalt springen
L

Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).

04C.1 Fuhrpark in C#, Polymorphie, Teil 1

Jörn Loviscach44:40 5.358 Aufrufe veröffentlicht Auf YouTube

Das Wichtigste aus dem Video

Tipp auf eine Zeit – das Video springt genau dorthin.

Transkriptautomatisch erstellt · 263 Zeilen
Herunterladen
  1. heute soll es um eine einfache KFZ Verwaltung gehen stellen sich vor Sie haben irgendeine Firma mit einem größeren
  2. Fuhrpark und dann sollen die verschiedenen Laster und Personenwagen irgendwie verwaltet werden
  3. dass man weiß wann W zum TÜV mus wie viel Kilometer jeweils aufgelaufen sind und so weiter oder um das praktischer zu machen stellen sich vor Sie haben ganzen
  4. Park an Windkraftanlagen haben sie dasselbe welcher Generator ist wann zur Überprüfung fällig und so weiter aber
  5. der Einfachheit Aberer jetzt mit Autos denke ich n das mal fuhpark so ein richtige Verwaltung Datenverarbeitung ganz
  6. klassischer Art das Richtige c#arp und WPF ja heute soll eben nicht so sehr um grafische Oberflächen gehen sondern um
  7. das was hinter den Kulissen passiert objektorientierte Modellierung ist das Stichwort objektorientierte Modellierung ich versuche einen Sachverhalt aus der
  8. wahren Welt mit Hilfe der Objektorientierung darzustellen also insbesondere mit Hilfe von Polymorphie darzustellen es gibt Oberklassen es gibt
  9. Unterklassen will sagen elternklassen und kindklassen die in geeigneter Weise zusammenspielen typischer we is bei
  10. objektorientierter Modellierung muss nicht bisher haben wir es ja auch ohne geschafft aber das ist schon ein wesentlicher Punkt da bin ich heute
  11. drauf hinaus mit dem fuhpark wie gesagt nichts oberflächliches erstmal hier was ich sofort machen würde ist
  12. eine neue Datei anzulegen mit den ganzen Klassen die jetzt entstehen sollen nicht so viel Platz auf dem Bildschirm hier also hier unten mausck rechts in dem
  13. Projekt Mappen Explorer hier unten mauslick rechts hinzufügen und wieder mal nicht sichtb
  14. im Aufnahmebereich Klasse oder hier neues Element eins von beiden neues Element eine Klasse wir brauchen auf jeden Fall irgendwas von wegen einer
  15. Klasse die heißt KFZ also bauen wir mal hier Klasse eine Klasse die heißt KFZ
  16. rafahrzeug das richtig ja soweit sie das richtig aus hinzufügen zieh das mal in den sichtbaren Bereich
  17. hinzufügen so soweit so simpel ich denke wir fangen mal sofort an mit vererbungsgeschichten ich will nachher
  18. im Allgemeinen in meinem fuhrpar Kraftfahrzeuge haben eine Sammlung von Kraftfahrzeugen KFZ
  19. und das sollen dann speziellerweise Personenkraftwagen hat sich das komisch an Autos Autos und Laster sein wie würden sie das jetzt modellieren
  20. schreiben Sie das mal hin mit Hilfe von Ableitungen also ich möchte zwei Ausprägungen davon haben zwei Ausprägungen von Kraftfahrzeug haben
  21. einmal ma das richtig ausführlich einmal LKW ich habe richtig schön formal einmal LKW und einmal wie sieht das aus wie schrei ich das hin dass ich zwei
  22. Ausprägungen habe sozusagen später zwei Spezialfälle von Kraftfahrzeug also jetzt erstmal nicht in die schweifklammern okay sondern eine
  23. neue Klasse und die eine Klasse heißt eben PKW ich schreib jetzt mal groß GL das das übliche da derelle groß zu schreiben
  24. und sie soll Erben von KFZ so sieht das in c# aus in plus plus müsste man da noch public davor schreiben was irgendwie keine gute Idee
  25. war im Nachhinein aber so ist es nur mal geworden in C++ in Java würden sie schreiben extens erweitert die Klasse PKW
  26. erweitert die Klasse KFZ und hier ist es einfach nur ein Doppelpunkt also je nach Sprache ein bisschen anders das ist ir wie das kürzeste was man haben kann
  27. anscheinend der Doppelpunkt und dit schweifklammern um zu sagen na ja erstmal kommt da nichts Neues hinzu
  28. und was soll ich noch haben LKW wollte ich haben der soll auch von dem
  29. Erben so das wäre diese Hierarchie ich Erbe von dieser
  30. Mutterklasse das sind Spezialfälle so das übliche Beispiel wäre immer Tier und dann erbt Katze von Tier und dann er erbt Hund von Tier aber das wäre
  31. natürlich bisschen banal jetzt kann man drüber nachdenken was man denn alles so speichern will auf jeden Fall würde ich wohl ein
  32. Kennzeichen haben wollen das Nummernschild sozusagen am einfachsten wäre das als Zeichenkette dass ich sage Kennzeichen
  33. so ist es dann eben als Zeichenkette drin so K wir mal gucken wenn nachher noch Zeit ist im zweiten Block insbesondere wenn nachher noch Zeit ist
  34. dass wir versuchen das kennze ein bisschen genauer zu modellieren ähm das Kennzeichen kann ja nicht keine Ahnung 1000 ABC sein wir sind ja nicht in den
  35. USA sondern es ist ja nach einer bestimmten Form gebaut in Deutschland ähm das könnte man auch noch einbauen wenn ich jetzt sage Zeichenkette
  36. Kennzeichen wäre im Prinzip alles mögliche vorstellbar mit 3798 Zeichen und Umlauten und was auch immer das geht offensichtlich nicht als Kennzeichen
  37. aber der Einfachheit erst halb mal so dann wird man sich vielleicht sowas merken wie ein Kilometerstand und den vielleicht als ganze
  38. Zahl weil weniger oder Bruchteile von Kilometer nicht so richtig spannend sind ich schreibs nicht hm sondern km
  39. stand man wird sich vielleicht merken groß geschrieben dattime die Erstzulassung und so weiter und so
  40. weiter als Ideen jetzt mal was man da alles an an Daten reinklatschen könnte also jede Instanz von KFZ hat dann diese Datenelemente aber damit hat auch jede
  41. Instanz von PKW diese Datenelemente und jede Instanz von Lkw diese Datenelemente ähm was können wir noch einbauen sinvollerweise um das zu modellieren wie
  42. gesagt es soll um die Verwaltung eines vuhparks gehen was könnte ich noch alles einbauen okay jedes kann noch nach der Art des
  43. Treibstoffs sozusagen oder nach der Art des Antriebs unterschieden werden Diesel Benzin elektrogas überlegen sich das wie kann ich das als
  44. Datenelement einbringen nicht als Zeichenkette das wäre langweilig hier so als String wie ich das nennen Triebwerk oder
  45. Treibstoff oder wie auch immer das ist wahrscheinlich noch keine gute Idee als Zeichenkette ist keine gute Idee weil es gibt ja doch nur endlichen Satz an
  46. Möglichkeiten wie würden sie das Modellieren nicht mit der Zeichenkette überlegen sich wie sie das
  47. Modellieren Treibstoff ist viicht nicht so gut Antrieb kann mir jetzt am besten gefallen
  48. Antrieb ich möchte sowas sowas haben wie ein Datenelement von der Sorte Antrieb und das soll heißen kleingeschrieben Antrieb sie sehen ich
  49. ma das jetzt knallhart wie Microsoft sich das vorstellt die privaten Elemente klein geschrieben dieser Typ soll nachher öffentlich werden deshalb groß
  50. geschrieben das hier soll der Typ nachher werden namens Antrieb und ist kleingeschriebene Antrieb soll die Variable werden die das Attribut genauer
  51. gesagt auf Deutsch dann Member variable das Attribut die elementvariable werden hier namens kleingeschrieben Antrieb da möchte ich drin speichern ist es Benzin
  52. ist es Diesel ist es Elektro was mir jetzt fehlt ist dieser Typ die meisten von ihnen haben den jetzt direkt in der Klasse gebaut
  53. wahrscheinlich we ich das in den alten Videos auch mal so vorgeführt habe machen wir das mal so dieser Typ sollte eine inumeration werden ENUM wie sie das
  54. aus C kennen dieser Typ soll heißen großantrieb so soll er heißen und dann Liste ich auf was die
  55. Werte sein sollen einmal Benzin nicht Benzon immer noch Benzin Diesel Elektro weiter muss jetzt h nicht
  56. den ganzen hybridgas was auch immer ich lass es bei den dreien hier mal also Antrieb kann drei Werte hab was sollte man was W jetzt so software engineering
  57. der Sicherheit halber noch ein sonstiges dabei haben sonst haben sie ein echtes Problem stellen sich vor Sie müssen dann in irgende Daten
  58. bankingabemaske was eintragen haben nur die drei Möglichkeiten Benzin Diesel Elektro und jetzt steht da ein gasbetriebendes Auto und sie haben nur
  59. die drei Möglichkeiten deshalb ist es immer gut noch eine Möglichkeit sonstige zu haben weil irgendein blödsin wird garantiert passieren sie nicht abgedeckt
  60. haben ähm so würde das Funktionieren dieses ENUM sagt jetzt es gibt einen neuen Typ namens
  61. Antrieb und Benzin heißt Wert Null Diesel heißt Wert 1 und so weiter diese vier Werte sind als Begriffe sozusagen vordefiniert
  62. wenn sie nur diese Zeile schreiben haben sie aber noch keine Variable von der Sorte das sagt nur ich habe ein eine einen Typ der heißt Antrieb ganz
  63. abstrakt und hier sagen sie erst jetzt habe ich bitte auch eine Variable von diesem Typ die Variable kleineschrieben Antrieb von
  64. diesem Typ Antrieb das sind also zwei paar Schuhe man muss beide oder ist ein paar Schuhe sozusagen sie müssen den linken und den rechten Schuh anziehen
  65. wenn man das so macht ist diese Enumeration dieser neue Typ privat in der Klasse KFZ hier steht ja nicht V wegen public davor sie können
  66. jetzt hier public davor schreiben dann ist das in dieser Klasse drinnen ein Typ in einer Klasse drin also sie können nicht nur Daten in einer Klasse
  67. drin haben und Funktionen drin haben sie können auch Typen in einer Klasse drin haben aber dieser Typ ist öffentlich er ist also von außen zu erreichen wenn Sie
  68. hier kein public davor stehen haben ist dieser Typ von außen nicht zu erreichen was ungeschickt ist dann kann keiner von außen irgendwas mit Benzin und Diesel
  69. anfangen das brauchen wir garantiert also hier müsste schon ein Public davor stehen damit es irgendwie Sinn ergibt
  70. man könnte das so machen eine Alternative wäre und ich bin mir jetzt gar nicht so sicher ob es die bessere Alternative ist vielleicht nicht aber
  71. ich sag's noch mal sie könnten natürlich auch außen eine ENUM bauen ich schreibe hier mal jetzt nicht sch hier mal Antrieb 2 damit das hier keine
  72. Verwicklungen gibt sie könnten auch außen sowas bauen und sagen wzin noch nicht richtig so Benzin und so weiter
  73. das können Sie auch außen machen dann wäre es nicht Teil der Klasse und ich müsste mich hier mit nicht mit public oder so
  74. rumschlagen auf ANB gefällt mir muss ich gestehen diese Lösung am besten es ist Teil der Klasse das heißt ich rede nachher damit indem ich sage
  75. kfz.anttrieb hier heißt es nur Antrieb 2 und hier muss ich dann nachher wahrscheinlich in meisten Fällen sagen was heißt wahrscheinlich außerhalb der
  76. Klasse muss ich ich dann immer sagen KFZ punantrieb gefällt mir am besten also dies ist W eine alternative Möglichkeit hier oben ist an dieser Stelle
  77. vielleicht nicht so hübsch aber da sehen sie noch mal wie das auf einer Ebene steht ENUM und KAS schweifklammer schweifklammer das sieht verdächtig
  78. ähnlich aus das ist schon alles mit Bedacht so gebaut dass das alles so ähnlich aussieht ENUM definiert einen neuen Typen hier
  79. jetzt Antrieb 2 class definiert einen neuen Typen hier jetzt KFZ sieht alles verdächtig ähnlich aus nur bei ENUM Liste ich jetzt die möglichen Werte auf
  80. dies möglichen Begriffe aus auf und bei class geht's richtig rund mit methodenattributen vielleicht sogar weiteren Typen inen drin ich nehme die
  81. oben mal wieder weg gelingt so ich denke das ist jetzt genug Stoff zum Spielen um wirklich mal gleichen
  82. konstraktor zu schreiben überlegen was wir zuerst machen genau ma wir das in der Reihenfolge schreiben Sie
  83. mal einen konstraktor für Kfz und dann gucken wir uns erst die beiden kindklassen an was die vielleicht noch mehr können müssten was mir
  84. überlegt habe PKW sollte z.B wissen wie viel Sitzplätze er hat und ein LKW sollte wissen wie viel Tonnen er laden kann das ist beim PKW jetzt nicht so
  85. spannend wie viel Tonnen er laden kann also das tatsächlich was spezielles passiert beim PKW noch die Zahl Sitzplätze und beim LKW wie
  86. viel Lademöglichkeit es sozusagen gibt aber schreiben sie erstmal für Kfz ein konstraktor eine Funktion die so eine die eine Instanz von der Klasse KFZ dann
  87. mal aufbaut hatte ich gerade noch vergessen enumanttrieb und so weiter da hinten kein Semikolon in C müssen ja Semikolon
  88. machen und da stand ja und C++ würde auch nach class ein Semikolon stehen wil man ja immer sofort hier schon ein Datenelement einführen könnte genauso
  89. bei der enung keine Semikolons keins nach ENUM und keins nach KAS in dieser Sprache und auch nicht in Java das sieht dann doch sehr gradlinig
  90. aus der konstraktor heißt wie die Klasse sicher aber das noch mal immer auch nicht die groß Kleinschreibung irgendwie ändern er heißt genau wie die Klasse in
  91. dieser Sprache und in Java und in C++ heißt er genau wie die Klasse anders wo ist es anders aber hier heißt er genau wie die Klasse auch nicht mit Groß und
  92. Kleinschreibung irgendwie rumfummeln äh er sollte public sein damit ich von außen auch ein Auto bauen kann das wäre sonst ein bisschen ungeschickt es ist
  93. tatsächlich möglich einen konstraktor protected oder private zu machen und das ist an einigen Stellen sogar sinnvoll z.B dass sie den konstraktor private
  94. machen um zu verhindern dass jemand eine Instanz ihrer Klasse baut das ist an einigen Stellen sogar sinnvoll später aber hier auf jeden Fall public ich
  95. möchte dass andere Leute so ein Ding bauen können na ja und jetzt werden wir sinnvollerweise hier den ganzen krimpel
  96. übergeben eine Zeichenkette für das Kennzeichen eine ganze Zahl für den Kilometerstand fängt ja wahrscheinlich nicht bei Null
  97. an eine DateTime für die
  98. Erstzulassung Z hab wir dann schon den Antrieb okay dann kommt schon der Antrieb von der Sorte großgeschrieben Antrieb eine Variable kleingeschrieben
  99. Antrieb das sieht im Druck nachher nicht so richtig wunderbar aus im Druck ist das nur noch der Unterschied mit dem großen a und dem kleinen a auf dem
  100. Bildschirm wenn das hier wenn das erste hier türkis ist und das zweite schwarz ist ist ist deutlicher ähm also es ist für den Druck nicht ganz
  101. so geschickt die Sachen so zu benennen aber ich denke das ist inzwischen Usus das wirklich so zu machen dass ich Sachen dann tatsächlich nur noch im
  102. Anfangsbuchstaben unterscheiden und in der Farbe und das soll natürlich eine Methode sein also schweifklammer auf
  103. schweifklammer zu und jetzt diese übliche Zuweisung meine Variablen hier haben wir dieselben Namen wie die Attribute der Klasse deshalb also
  104. this Kennzeichen um auf das Attribut zuzugreifen gleich Kennzeichen um diese Variable hier zu holen und den Rest
  105. genauso komilometerstand komstand und
  106. Erstzulassung ist GLE Erstzulassung und ist pun Antrieb er kennt bevor ich falsch geschrieben habe ist gleich Antrieb das
  107. erkennt jetzt nicht mehr irgendwo hat auch seine Grenzen okay das war der konstraktor billige
  108. Geschichte den rufe ich einmal auf nur mal um zu sehen ob auch alles so funktioniert wie ich das haben wir den rufe ich einmal auf und dazu bau ich
  109. jetzt eine minimale grafischeerfläche einfach ich seze hier einfach mal einen Knopf auf die Oberfläche Werkzeugkasten Buton ein einziger
  110. Knopf bisschen sehr klein hier ne 100% so ein einziger Knopf Doppelklick dann richtet er das ja sofort ein ich bin jetzt in meiner hauptfensterklasse hier
  111. main window aber alles lebt im Namensraum furpark Namespace furpark ich geh noch mal zur
  112. Klasse KFZ Namespace furpark alles lebt im Namensraum fuhpark das heißt wir sollten uns
  113. gegenseitig sehen können wenn ich hier sage KFZ ist GLE n KFZ wunderbar sie ist da alles da
  114. jetzt kann ich das Kennzeichen hier keine Ahnung KB CD 123 als KFZ Kennzeichen Kilometerstand
  115. 123 1234 die Erstzulassung da brauche ich ja irgendwas von wegen DateTime der konstraktor für DateTime sie sehen in
  116. dem konstraktor Aufruf für Kfz rufe ich den konstraktor für time auf das wäre hier und jetzt ist auch nicht so spannend Jahr
  117. Monat Tag dass ich sage okay Erstzulassung im Jahr 2000 1. und der Antrieb und da sehen sie wie jetzt zuliert
  118. kfz.antrieb muss da stehen Punkt und jetzt kann ich wählen ein Benziner so sieht dann der konstraktorauruf aus damit wird jetzt also
  119. ha was fehlt ist ja noch früh am Morgen bei mir hier klar da muss natürlich jetzt ein Variablen Name noch
  120. stehen die Fehlermeldung ist etwas die FU vurpark KFZ ist eine Typ wird aber wie eine Variable verwendet hier brauche ich noch was mein
  121. Auto ein Variablenname wie immer int a 100 oder was genauso hier KFZ mein Auto Typ variable und hier sage ich womit initialisiert werden soll womit soll
  122. initialisiert werden baue ein neues KFZ mit diesen Angaben dann sehen sie eben solche Geschichten wie ein konstraktor Aufruf
  123. im anderen konstraktor Aufruf dieser konstraktor hier will ein DateTime Objekt haben okay dann bauen wir ein neues DateTime
  124. Objekt und hinten brauchen wir eben was von den Antrieb sie sehen da steht jetzt kfz.antrieb. Benzin wenn sie gehch mal zurück zur GFZ Geschichte hier wenn Sie
  125. dieses enumanttrieb auf die oberste Ebene gesetzt hätten das noch mal vor enumantrieb
  126. 2 irwas da drin wenn Sie das auf die oberste Ebene gesetzt hätten se es etwas anders aus dann könnte ich hier direkt
  127. Antrieb Z versuchen was jetzt vom Typ nicht passt aber es wäre direkt auf der obersten Ebene da verfügbar hätten sie nicht KFZ davor stehen jetzt ist es eben
  128. in der Klasse drinnen und deshalb muss ich hier mit dem Klassennamen anfangen KFZ pun Antrieb Antrieb der Typ Antrieb ist Teil der Klasse
  129. KFZ wieder weg hier also das ist der Preis sozusagen den man zahlt aber vielleicht ist das gar kein
  130. Preis der Preis dafür dass ich den Antrieb zum Teil der Klasse KFZ mache ist dass ich hier dann auch KFZ Punkt schreiben muss aber das macht es
  131. vielleicht sogar strukturierter wenn man das so schreiben muss vielleicht brauchen Sie noch einen anderen Antrieb nuklear oder
  132. was auch immer und der wäre dann wahrscheinlich nicht an dieser Stelle beim KFZ insofern ist es vielleicht gar nicht so schlecht dass es bei KFZ
  133. eingeordnet ist das war der konstraktor so jetzt geben sie den beiden unten noch
  134. mal weitere Datenelemente dem PKW die Zahl der Sitzplätze und dem LKW die mögliche Ladung und bauen dafür auch
  135. Konstruktoren wie kann ich eine Instanz von Pkw und eine Instanz von Lkw aufbauen erstmal die Datenelemente der Pkw soll
  136. die Zahl der Sitzplätze haben eine ganze Zahl sinnvollerweise Zahl Sitzplätze ich schreib es mal so
  137. zahlsitzplätze Plätze und der LKW soll ich schreib es auch mal als int dreinhalb Tonnen wä vielleicht ein bisschen komisch der LKW soll wissen was
  138. seine maximale Nutzlast ist maximale Nutzlast in Tonnen da sehen sie schon mal ein kleines Problem bei der üblichen Sorte an bei der üblichen Art
  139. das zu programmieren bei der maximalen l Nutzlast sind das jetzt Gramm oder Kilogramm oder Tonnen oder
  140. nanogram oft redet man sich raus indem man da jetzt einfach Tonnen hinter schreibt daen hat ich Kilometer stand aber das wird natürlich nicht überprüft
  141. wenn er jetzt einer Kilogramm statt Tonnen einträgt weiß man es nicht oder falsche Einheit stellen sich vorrechter unsen ein das
  142. Programm wird in USA benutzt oder was auch immer das noch ein Thema für sich wie mache ich das eigentlich mit Einheiten ich nehme die Tonnen mal da
  143. weg weil es sonst so lang wird wie macht man das mit Einheiten das kann man auch noch ganz raffiniert lösen sie können ja eigene Klassen schreiben die mit
  144. Einheiten umgehen können aber das ist jetzt einen Schritt zu weit das würde man im Allgemeinen nicht machen also wir denken uns in
  145. Tonnen jetzt der konstraktor er soll wieder öffentlich sein er soll wieder öffentlich sein er muss heißen wie die Klasse also PKW
  146. nicht KFZ muss heißen wie die Klasse die Klasse heißt PKW diesem konstraktor werde ich jetzt sinnvollerweise alles
  147. geben was ich dem originalkonstraktor hier oben gegeben habe und ein Ding mehr nämlich die Zahl der Sitzplätze also das und ein Ding
  148. mehr in sitzplät und natürlich die schweifklammern
  149. so jetzt kommt hier schon die interessante Fehlermeldung fuhpark KFZ enthält keinen konstraktor der Null Argumente
  150. akzeptiert um ein PKW zu bauen muss er innen drin erstmal ein KFZ bauen BKW ist wie so eine Zwiebelschale drum rumgelegt um
  151. KFZ ich kann das den BKW nur bauen wenn ich erst stillschweigend ein KFZ gebaut habe damit dieser konstraktor laufen kann muss stillschweigend der
  152. konstraktor von KFZ laufen was er uns hier sagt ist dass das ne dass das nicht funktioniert er kann jetzt nicht stillschweigend den konstraktor von KFZ
  153. laufen lassen weil er keinen konstraktor hat der einfach so funktioniert Null Argumente kein Standard er kan nicht einfach den standardkonstraktor aufrufen
  154. weil es gibt kein wir haben nämlich anderen geschrieben ich muss ausdrücklich den konstraktor von KFZ aufrufen das ist Doppelpunkt in dieser
  155. Sprache Doppelpunkt Base so ein ausdrücklicher Aufruf mit dem ganzen Krempel natürlich jetzt der da oben steht Kennzeichen genauso rufe ich den
  156. konstraktor auf von der Mutterklasse Kilometerstand Erstzulassung Erstzulassung
  157. Antrieb so sieht das dann aus also um eine Instanz von PKW zu bauen mit diesen Daten rufe zuerst mal den konstraktor der Mutterklasse auf
  158. Base in Java sieht das anders aus in Java ist das in der ersten Seite in den schweifklammern das ist ein bisschen sehr versteckt
  159. egal hier ist es mit Base den Doppelpunkt na ja das erinnert hier an den Doppelpunkt da oben in C sieht es na ja irgendwie so ähnlich
  160. aus hier ist es eben mit dem Base stellvertreten Basis als für den konstraktor der Mutterklasse der konstraktor der Mutterklasse mit diesen
  161. Daten aufrufen natürlich nicht mit der Zahl der Sitzplätze der konstraktor der Mutterklasse hat diese Daten und weiß nichts von der Zahl der
  162. Sitzplätze jetzt in unserem eigenen konstraktor weggelöscht in unserem eigenen konstraktor kann ich natürlich jetzt sagen okay die Zahl der Sitzplätze
  163. nehme bitte auf die Zahl der Sitzplätze die da übergeben worden ist was sollte ich auch noch klar machen hier bei dem konstraktorauruf der Mutterklasse sie
  164. können natürlich hier sagen oh den rufe ich jetzt mit der doppelten Zahl der Kilometer auf und das Kennzeichen das soll hinten noch XY Z nicht mal das
  165. Kennzeichen soll noch hinten XY Z angehängt haben also sie müssen jetzt dir nicht wortwörtlich das Übertragen die Sachen die hier stehen das ein
  166. Funktionsaufruf den konstrakt der Mutterklasse aufrufen das ist ein Funktionsaufruf sie können hier Sachen ausrechnen hauptsache sie rufen den
  167. konstrakt der Mutterklasse auf natürlich auf irgendeine vernünftige Weise und den Kilometerstand zu verdoppeln ist offensichtlich nicht die vernünftige
  168. Weise an anderen Stellen könnte es hilfreich sein vielleicht müss das Wartungsintervall halbieren oder die Zahl der Räder verdoppeln was weiß ich
  169. kann auf jeden Fall sinnvoll sein und dann kommt jetzt noch dazu die Zahl der Sitzplätze die kann die Mutterklasse ja gar nicht das erledig hier das war der
  170. Pkw und hier bei dem M Laster dasselbe ich gucke gerade kann ich das hier auf die Schnelle ich ma das
  171. hier ganz dre mit Copy und Paste das ist natürlich jetzt hier LKW und der
  172. kriegt die maximale Nutzlast und hier haben wir die maximale Nutzlast so alle
  173. glücklich mal gerade wie das jetzt aussieht im realen Programm wir können jetzt also hier wieder in die hauptfensterklasse reingehen und sagen
  174. okay jetzt bauen wir eben einen BKW oh kein OKW sondern ein [Musik] BKW noch ein Auto
  175. und da kann ich jetzt eben n PKW und so weiter wie auch immer ne da sollte man beim Kennzeichen vielleicht doch noch ein bisschen was
  176. basteln da sagen wir der ist gerade in diesem Moment zugelassen worden was war das für ein Antrieb sein
  177. immer mit Tabulator nebenbei also ich tippe das Komma Komma lezeichen sehen da bietet er jetzt schon an KFZ Antrieb
  178. Tabulator okay das soll Elektro sein Zahl der Sitzplätze keine Ahnung vier fertig damit ist jetzt ein Ding von der Sorte gebaut und vielleicht führe
  179. ich diesen Aufruf auch noch mal vor was jetzt passiert wenn Sie diesen konstraktor aufrufen ich jetzt hier mal ein
  180. breakpunkt also vor die zweite Zeile vor den Pkw ein breakpunkt so wir landen hier jetzt gehe ich in den konstraktor von PKW rein n PKW die Zeile
  181. führe ich jetzt in Einzelschritten aus na Einzelschritt F11 das ist der konstraktor ich geh mal zwei Zahlen noch mal rauf hier das ist
  182. der konstraktor von PKW da bin ich jetzt reingesprungen das ist mein Kennzeichen das ist der Kilometerstand der es werden soll das Datum der Erstzulassung und so
  183. weiter der konstraktor von PKW nächster Schritt F11 er geht zum konstraktor von KFZ das war dieser Aufruf mit Base um den PKW zu
  184. bauen baut er erstmal das KFZ Ding in Einzelschritten weitermachen jetzt entsteht das hier innen drin das ist der Kern des Ganzen raus aus dem KFZ
  185. konstraktor jetzt zurück in den PKW konstraktor dieses d jetzt ausgeführt worden Base Kennzeichen und so weiter ich habe jetzt den Kern gebaut und um
  186. den Kern herum das ist KFZ ist der Kern um den Kern herum die Zwiebelschale ist PKW was der noch kriegt nämlich die Zahl der
  187. Sitzplätze diese Zeile jetzt weiß der zu was die Zahl der Sitzplätze ist Ende des Aufrufs so sieht das dann aus also es es wird wenn man vererbt vererbt
  188. vererbt wird dann zwiebelschalenmäßig von innen nach außen aufgebaut das kommt kommt immer noch was dazu die abgeleiteten Klassen sind
  189. spezieller die abgeleiteten Klassen können im Zweifelsfall mehr als die mutterklassen die sitzen quasi ja die bilden quasi so eine
  190. Zwiebel innen drin die Mutterklasse eine Instanz der Mutterklasse und außendrum vielleicht in mehreren Schichten dann was jeweils dazuekommen
  191. ist jetzt zur Polymorphie jetzt nutzt man das auch dass es diese Mutterklasse gibt dieses allgemeine Ding kann in zwei
  192. verschiedenen Arten auftreten einmal als PKW und als LKW und es kann nicht nur verschiedene Sachen enthalten dann einmal die Zahl der
  193. Sitzplätze einmal die maximale lutzlast es kann auch verschieden funktionieren das ist nachher ein wesentlicher Trick das Überschreiben von
  194. Methoden ich kann eine Methode hier in der Mutterklasse anlegen die dann in der einen Kindklasse so funktioniert und in der anderen
  195. Kindklasse so funktioniert jeder kann das auf seine Art machen dann mal Ideen was könnte man haben
  196. inwiefern könnten PKW und LKW dieselbe Funktion haben dasselb ein Ding desselben Namens tun sozusagen eine Tätigkeit desselben Namens haben die
  197. aber verschieden ist für PKW und LKW no ein naives Modell von der mautzahlung ich
  198. möchte folgendes haben hier möchte ich in der Mutterklasse eine Methode haben die folgendes
  199. sagt aus den gefahrenen Autobahnkilometern möchte ich ausrechnen wie viel Euro zu zahlen
  200. sind sowas eine Methode die das kann für das jeweilige Fahrzeug ich gebe rein okay ich habe 500 km Autobahn zurückgelegt und das Ding sagt dann okay
  201. bitte zahle keinen Schimmer wie viel man dann zahlt eigentlich von der bei der LKW Maut okay zahle 100 € oder sowas beim
  202. Auto eben zahle 0 € bis lang in Deutschland eine Methode die das kann die möchte ich in die Mutterklasse einbauen das ist jedes Kraftfahrzeug
  203. Fragen kann aber beim PKW beim normalen Auto kommt eben Null raus und beim Laster kommt nicht null raus bei dieser Methode versuchen Sie das mal
  204. hinzukriegen das wäre dann nachher wenn man das korrekt umsetzen eine Anwendung für Polymorphie für die Vielgestaltigkeit
  205. der LKW und der BKW haben dieselbe Methode aber diese Methode ist verschieden bei den beiden sie arbeiten verschieden
  206. also ich wollte jetzt kein weiteres Datenelement von wegen Autobahnkilometer oder so sondern eine Methode die eine Zahl kriegt die Autobahnkilometer sich
  207. nichts merkt und die Euros dann zurückliefert diese Methode soll öffentlich sein sinnvollerweise sie soll Euros
  208. zurückliefern natürlich nicht nur ganz Euros man neigt dann dazu douel zu nehmen was nicht gut ist wegen der Rundung
  209. deimal wäre in dieser Sprache besser aber wir nehmen mal double nicht zu viel Neues was wohnungstechnisch nicht ganz unproblematisch ist aber lassen wir es
  210. dabei das ist der Rückgabewert die Funktion soll die Maut ausrechnen ich würde die Funktion jetzt nicht Maut nennen Funktionen sollen ja in
  211. Befehlsform heißen Sätze legestelle Maut ist keine Befehlsform eines Verbs s mal zahle sehr schön zahle Maut oder berechne
  212. berechne Maut so und die soll die Zahl der Kilometer kriegen nehmen mal eine ganze Zahl irgendwie ein halber Kilometer ist ja auch nicht so richtig
  213. Prickeln dafür in Autobahn Kilometer das K schreibe ich jetzt groß um zu sagen da fängt ein neues Wort an im englischen sieht das
  214. alles viel harmloser aus mit der Groß und Kleinschreibung der Großschreibung mitten im Wort es gibt einen guten Grund
  215. tatsächlich alles dann auf Englisch zu schreiben auch wenn man Umlaute kann und so weiter auf Englisch sieht es dann schon alles etwas hübscher aus hier ist
  216. jetzt noch generil er sagt nicht alle codefade geben einen Wert zurück ich sage ja douel soll rauskommen aber ich gebe nichts raus
  217. return return 0 oder noch hübscher 0.0 dann sieht für eine douelzahl aus so ist er glücklich ich gebe tatsächlich auch eine douelzahl aus das heißt jedes
  218. Kraftfahrzeug hat jetzt diese Methode hier drin berechne Maut und sie gibt immer null aus schön und das wäre die Grundversion
  219. erstmal jetzt kommt der spannende Schritt bei der Polymorphie ich möchte dass die kindklassen ihre eigene Version dieser
  220. Methode bauen können anders funktionieren können innen drin und dazu muss ich das erstmal zulassen um das zuzulassen schreibe ich da virtual dazu
  221. public virtual berechne Maut eine virtuelle Methode ist das jetzt diese Methode wird virtuell das heißt die kindklassen können Sie
  222. ändern die kindklassen können Ihre eigene Variante dieser Methode bauen in Java muss man nicht wul daz schreiben das ist dann geschenkt in C++ heißt es
  223. auch virtual eine virtuelle Methode die kindklassen können was anderes machen unter demselben
  224. Namen die ein Kommentar Kannen wir schon mal schenken die pkw-klasse die macht das genau wie die
  225. Mutterklasse die muss gar nichts machen das bleibt so in der pkw-klasse aber in der lkw-klasse muss ich das jetzt anders
  226. machen und um zu sagen das soll anders sein sage ich override überschreiben wdich ja überreiten nicht override überreiten im englischen aber
  227. im deutschen eben überschreiben genannt Hal sie das schön auseinander overload heißt es gibt mehrere Varianten einer Funktion mit selben Namen aber
  228. verschiedenen Parametern overright heißt diese Geschichte hier in der Polymorphie eine Kindklasse macht es anders als die Mutterklasse das ist override
  229. überschreiben Sie tippen OV Tabulator overriite derzeichen und dann sehen Sie was sie überschreiben können aha gibt noch ein
  230. paar andere aber berechne Maut möchte ich überschreiben Tabulator unglaublich was da alles sch so schon steht er kopiert den ganzen Kram
  231. zusammen und sagt was möchte ich zurückgeben rufe dieselbe Funktion für die Mutterklasse auf das ist was er jetzt von selbst gebaut hat vielleicht
  232. fü ich das gerade noch mal vor was er von selbst gebaut hat ich tippe also override Tabulator Leerzeichen und brechte Maut ist schon der richtige noch
  233. mal Tabulator die Variante die jetzt vollautomatisch baut in der Klasse LKW jetzt die Variante der V vollautomatisch
  234. baut ist rufe von der Mutterklasse die Methode berechner Mount auf und gebe deren Ergebnis aus toll also es macht genau dasselbe wie vorher sie können an
  235. dieser Stelle natürlich sagen ich möchte hier jetzt das Doppelte bezahlen zweal Null ist jetzt nicht so sinnvoll aber sie z.B das Doppelte rufe die Methode in
  236. der Mutterklasse auf aber jetzt das Doppelte bitte aber hier brauch natürlich ganz was anders die Mutterklasse gibt ja null
  237. zurück hier brauchen was die jeder Kilometer Kost was auch immer 0,2 € 0,2 x Autobahnkilometer das sollte Laster
  238. zahlen wenn sie lustig sind bauen sie noch die Zahl der Achsen ein oder was auch immer ist ja ja keine große Kunst so sieht das
  239. aus jetzt hat der Laster also eine eigene Variante von der Funktion berechne Maut für den kostet das jetzt plötzlich was mit dem override hier in
  240. Java steht das override an etwas anderen Stelle in C++ gibt es inzwischen auch ein Override gab's lange Jahre nicht in dieser Sprache sieht ebeno aus was ich
  241. damit sagen will Vorsicht in allen Sprachen sieht immer ein bisschen anders aus wichtig ist dieser Begriff override das heißt überall so überschreiben in
  242. der Kindklasse überschreibe ich eine Methode der Mutterklasse das gucken wir uns gerade noch mal an wie das dann tatsächlich aussieht im wen
  243. Leben an dieser Stelle hier ich habe ein PKW jetzt baue ich noch ein Laster jetzt baue ich noch einen Laster LKW
  244. LKW Laster Laster LKW
  245. der heißt irgendwie vom Kennzeichen her und jetzt hte nicht für Sitzplätze sondern 10 Ton 20 Ton so immer elektrolaster sehr schön Diesel
  246. dra so keine große Überraschung wenn ich jetzt die Funktion aufrufe ist gleich noch ein Auto Punkt berechne Maut
  247. von 100 km dann wird da gleich null rauskommen hoffentlich und wenn ich von dem Laster das mache ein Laster berechne Maut 100 km dann wird er
  248. hoffentlich 20 € rauskommen das ist jetzt noch nicht wirklich Polymorphie sichalber gesagt kommt gleich noch noch eine Minute aber erstmal das gerade
  249. vorgeführt dass zumindest diee Funktionsaufrufe funktionieren ähm diese Zeile so Maut ist jetzt hier un auf
  250. lokal sieht man nicht im Video ach ma wir mal so ich gehe mit der Maus direkt drauf Maut ist null diese Zeile hier eben habe ich ausgeführt für
  251. das Auto Maut ist null okay jetzt die nächste Zeile für den Laster ma ist 20 okay no zwei soweit so gut das ist noch nicht wirklich
  252. Polymorphie Polymorphie wird es wenn ich sage oh ich habe ein [Musik] KFZ K ein KFZ K und das ist mein Laster
  253. von eben gucken sich an was ich jetzt zuweise ein Laster ist ein LKW ich weise
  254. eine Referenz auf einem LKW dem KFZ dieser KFZ Variable zu also dieses KFZ ist versteckt hinten drin ein Laster was in dieser Zeile aber gar nicht so
  255. deuttig würde wenn ich nicht die Variable so genannt hätte in einer KFZ Variablen ist ein Laster drin und jetzt mache ich folgendes double upsal
  256. double m 3 = K pun berechn Maut 100 das ist jetzt eigentlich wirklich erst Polymorphie ähm K ist eine Variable für ein KFZ das
  257. allgemeine Ding das Laster oder PKW sein kann und ich frage jetzt das allgemeine Ding nach der Maut und dann zeigt sich was es wirklich
  258. ist an dieser Stelle nächste Zeile jetzt Maut 3 ist 20 in KFZ habe ich eingebaut dass die Maut gratis ist so haben wir das in KFZ gebaut return Null
  259. und ich weise jetzt zu die Referenz auf den Laster einer KFZ Variablen und frage dann das KFZ nach der Maut und dann ist plötzlich nicht mehr Null sondern ich
  260. habe 20 € zu zahlen an dieser Stelle stellt stellt er eben fest K ist insbesondere ein Laster und beim Laster funktioniert diese Methode anders das
  261. ist der Witz bei der Polymorphie sie tun so als ob sie alles über ein G scheren aber hinter den Kulissen weiß die Maschine eben auch das ist ein Laster
  262. geht anders hinter den Kulissen wird dann eben Unterschieden das gucken wir uns nachher
  263. noch mal im Detail an glaube ich das war noch ein bisschen heftig

Zum Nachlesen