Das Video kommt von YouTube: erst beim Abspielen verbindet sich die Seite mit YouTube (Google).
04C.1 Fuhrpark in C#, Polymorphie, Teil 1
Das Wichtigste aus dem Video
Tipp auf eine Zeit – das Video springt genau dorthin.
Transkriptautomatisch erstellt · 263 Zeilen
- heute soll es um eine einfache KFZ Verwaltung gehen stellen sich vor Sie haben irgendeine Firma mit einem größeren
- Fuhrpark und dann sollen die verschiedenen Laster und Personenwagen irgendwie verwaltet werden
- 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
- Park an Windkraftanlagen haben sie dasselbe welcher Generator ist wann zur Überprüfung fällig und so weiter aber
- der Einfachheit Aberer jetzt mit Autos denke ich n das mal fuhpark so ein richtige Verwaltung Datenverarbeitung ganz
- klassischer Art das Richtige c#arp und WPF ja heute soll eben nicht so sehr um grafische Oberflächen gehen sondern um
- das was hinter den Kulissen passiert objektorientierte Modellierung ist das Stichwort objektorientierte Modellierung ich versuche einen Sachverhalt aus der
- wahren Welt mit Hilfe der Objektorientierung darzustellen also insbesondere mit Hilfe von Polymorphie darzustellen es gibt Oberklassen es gibt
- Unterklassen will sagen elternklassen und kindklassen die in geeigneter Weise zusammenspielen typischer we is bei
- objektorientierter Modellierung muss nicht bisher haben wir es ja auch ohne geschafft aber das ist schon ein wesentlicher Punkt da bin ich heute
- drauf hinaus mit dem fuhpark wie gesagt nichts oberflächliches erstmal hier was ich sofort machen würde ist
- 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
- Projekt Mappen Explorer hier unten mauslick rechts hinzufügen und wieder mal nicht sichtb
- im Aufnahmebereich Klasse oder hier neues Element eins von beiden neues Element eine Klasse wir brauchen auf jeden Fall irgendwas von wegen einer
- Klasse die heißt KFZ also bauen wir mal hier Klasse eine Klasse die heißt KFZ
- rafahrzeug das richtig ja soweit sie das richtig aus hinzufügen zieh das mal in den sichtbaren Bereich
- hinzufügen so soweit so simpel ich denke wir fangen mal sofort an mit vererbungsgeschichten ich will nachher
- im Allgemeinen in meinem fuhrpar Kraftfahrzeuge haben eine Sammlung von Kraftfahrzeugen KFZ
- und das sollen dann speziellerweise Personenkraftwagen hat sich das komisch an Autos Autos und Laster sein wie würden sie das jetzt modellieren
- schreiben Sie das mal hin mit Hilfe von Ableitungen also ich möchte zwei Ausprägungen davon haben zwei Ausprägungen von Kraftfahrzeug haben
- 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
- Ausprägungen habe sozusagen später zwei Spezialfälle von Kraftfahrzeug also jetzt erstmal nicht in die schweifklammern okay sondern eine
- neue Klasse und die eine Klasse heißt eben PKW ich schreib jetzt mal groß GL das das übliche da derelle groß zu schreiben
- 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
- war im Nachhinein aber so ist es nur mal geworden in C++ in Java würden sie schreiben extens erweitert die Klasse PKW
- 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
- anscheinend der Doppelpunkt und dit schweifklammern um zu sagen na ja erstmal kommt da nichts Neues hinzu
- und was soll ich noch haben LKW wollte ich haben der soll auch von dem
- Erben so das wäre diese Hierarchie ich Erbe von dieser
- 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
- 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
- Kennzeichen haben wollen das Nummernschild sozusagen am einfachsten wäre das als Zeichenkette dass ich sage Kennzeichen
- 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
- 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
- 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
- Kennzeichen wäre im Prinzip alles mögliche vorstellbar mit 3798 Zeichen und Umlauten und was auch immer das geht offensichtlich nicht als Kennzeichen
- aber der Einfachheit erst halb mal so dann wird man sich vielleicht sowas merken wie ein Kilometerstand und den vielleicht als ganze
- Zahl weil weniger oder Bruchteile von Kilometer nicht so richtig spannend sind ich schreibs nicht hm sondern km
- stand man wird sich vielleicht merken groß geschrieben dattime die Erstzulassung und so weiter und so
- 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
- 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
- gesagt es soll um die Verwaltung eines vuhparks gehen was könnte ich noch alles einbauen okay jedes kann noch nach der Art des
- Treibstoffs sozusagen oder nach der Art des Antriebs unterschieden werden Diesel Benzin elektrogas überlegen sich das wie kann ich das als
- Datenelement einbringen nicht als Zeichenkette das wäre langweilig hier so als String wie ich das nennen Triebwerk oder
- 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
- Möglichkeiten wie würden sie das Modellieren nicht mit der Zeichenkette überlegen sich wie sie das
- Modellieren Treibstoff ist viicht nicht so gut Antrieb kann mir jetzt am besten gefallen
- Antrieb ich möchte sowas sowas haben wie ein Datenelement von der Sorte Antrieb und das soll heißen kleingeschrieben Antrieb sie sehen ich
- ma das jetzt knallhart wie Microsoft sich das vorstellt die privaten Elemente klein geschrieben dieser Typ soll nachher öffentlich werden deshalb groß
- geschrieben das hier soll der Typ nachher werden namens Antrieb und ist kleingeschriebene Antrieb soll die Variable werden die das Attribut genauer
- gesagt auf Deutsch dann Member variable das Attribut die elementvariable werden hier namens kleingeschrieben Antrieb da möchte ich drin speichern ist es Benzin
- 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
- 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
- aus C kennen dieser Typ soll heißen großantrieb so soll er heißen und dann Liste ich auf was die
- Werte sein sollen einmal Benzin nicht Benzon immer noch Benzin Diesel Elektro weiter muss jetzt h nicht
- 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
- der Sicherheit halber noch ein sonstiges dabei haben sonst haben sie ein echtes Problem stellen sich vor Sie müssen dann in irgende Daten
- bankingabemaske was eintragen haben nur die drei Möglichkeiten Benzin Diesel Elektro und jetzt steht da ein gasbetriebendes Auto und sie haben nur
- 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
- haben ähm so würde das Funktionieren dieses ENUM sagt jetzt es gibt einen neuen Typ namens
- Antrieb und Benzin heißt Wert Null Diesel heißt Wert 1 und so weiter diese vier Werte sind als Begriffe sozusagen vordefiniert
- 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
- abstrakt und hier sagen sie erst jetzt habe ich bitte auch eine Variable von diesem Typ die Variable kleineschrieben Antrieb von
- 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
- 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
- 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
- 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
- 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
- anfangen das brauchen wir garantiert also hier müsste schon ein Public davor stehen damit es irgendwie Sinn ergibt
- 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
- 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
- Verwicklungen gibt sie könnten auch außen sowas bauen und sagen wzin noch nicht richtig so Benzin und so weiter
- 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
- 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
- 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
- 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
- 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
- ähnlich aus das ist schon alles mit Bedacht so gebaut dass das alles so ähnlich aussieht ENUM definiert einen neuen Typen hier
- 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
- dies möglichen Begriffe aus auf und bei class geht's richtig rund mit methodenattributen vielleicht sogar weiteren Typen inen drin ich nehme die
- oben mal wieder weg gelingt so ich denke das ist jetzt genug Stoff zum Spielen um wirklich mal gleichen
- konstraktor zu schreiben überlegen was wir zuerst machen genau ma wir das in der Reihenfolge schreiben Sie
- 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
- ü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
- 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
- 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
- mal aufbaut hatte ich gerade noch vergessen enumanttrieb und so weiter da hinten kein Semikolon in C müssen ja Semikolon
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- möchte dass andere Leute so ein Ding bauen können na ja und jetzt werden wir sinnvollerweise hier den ganzen krimpel
- übergeben eine Zeichenkette für das Kennzeichen eine ganze Zahl für den Kilometerstand fängt ja wahrscheinlich nicht bei Null
- an eine DateTime für die
- Erstzulassung Z hab wir dann schon den Antrieb okay dann kommt schon der Antrieb von der Sorte großgeschrieben Antrieb eine Variable kleingeschrieben
- 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
- 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
- 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
- Anfangsbuchstaben unterscheiden und in der Farbe und das soll natürlich eine Methode sein also schweifklammer auf
- schweifklammer zu und jetzt diese übliche Zuweisung meine Variablen hier haben wir dieselben Namen wie die Attribute der Klasse deshalb also
- this Kennzeichen um auf das Attribut zuzugreifen gleich Kennzeichen um diese Variable hier zu holen und den Rest
- genauso komilometerstand komstand und
- Erstzulassung ist GLE Erstzulassung und ist pun Antrieb er kennt bevor ich falsch geschrieben habe ist gleich Antrieb das
- erkennt jetzt nicht mehr irgendwo hat auch seine Grenzen okay das war der konstraktor billige
- 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
- jetzt eine minimale grafischeerfläche einfach ich seze hier einfach mal einen Knopf auf die Oberfläche Werkzeugkasten Buton ein einziger
- 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
- main window aber alles lebt im Namensraum furpark Namespace furpark ich geh noch mal zur
- Klasse KFZ Namespace furpark alles lebt im Namensraum fuhpark das heißt wir sollten uns
- gegenseitig sehen können wenn ich hier sage KFZ ist GLE n KFZ wunderbar sie ist da alles da
- jetzt kann ich das Kennzeichen hier keine Ahnung KB CD 123 als KFZ Kennzeichen Kilometerstand
- 123 1234 die Erstzulassung da brauche ich ja irgendwas von wegen DateTime der konstraktor für DateTime sie sehen in
- 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
- Monat Tag dass ich sage okay Erstzulassung im Jahr 2000 1. und der Antrieb und da sehen sie wie jetzt zuliert
- kfz.antrieb muss da stehen Punkt und jetzt kann ich wählen ein Benziner so sieht dann der konstraktorauruf aus damit wird jetzt also
- ha was fehlt ist ja noch früh am Morgen bei mir hier klar da muss natürlich jetzt ein Variablen Name noch
- stehen die Fehlermeldung ist etwas die FU vurpark KFZ ist eine Typ wird aber wie eine Variable verwendet hier brauche ich noch was mein
- 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
- initialisiert werden baue ein neues KFZ mit diesen Angaben dann sehen sie eben solche Geschichten wie ein konstraktor Aufruf
- im anderen konstraktor Aufruf dieser konstraktor hier will ein DateTime Objekt haben okay dann bauen wir ein neues DateTime
- 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
- dieses enumanttrieb auf die oberste Ebene gesetzt hätten das noch mal vor enumantrieb
- 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
- 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
- in der Klasse drinnen und deshalb muss ich hier mit dem Klassennamen anfangen KFZ pun Antrieb Antrieb der Typ Antrieb ist Teil der Klasse
- KFZ wieder weg hier also das ist der Preis sozusagen den man zahlt aber vielleicht ist das gar kein
- 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
- vielleicht sogar strukturierter wenn man das so schreiben muss vielleicht brauchen Sie noch einen anderen Antrieb nuklear oder
- 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
- eingeordnet ist das war der konstraktor so jetzt geben sie den beiden unten noch
- mal weitere Datenelemente dem PKW die Zahl der Sitzplätze und dem LKW die mögliche Ladung und bauen dafür auch
- Konstruktoren wie kann ich eine Instanz von Pkw und eine Instanz von Lkw aufbauen erstmal die Datenelemente der Pkw soll
- die Zahl der Sitzplätze haben eine ganze Zahl sinnvollerweise Zahl Sitzplätze ich schreib es mal so
- 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
- 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
- das zu programmieren bei der maximalen l Nutzlast sind das jetzt Gramm oder Kilogramm oder Tonnen oder
- 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
- wenn er jetzt einer Kilogramm statt Tonnen einträgt weiß man es nicht oder falsche Einheit stellen sich vorrechter unsen ein das
- 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
- 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
- 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
- Tonnen jetzt der konstraktor er soll wieder öffentlich sein er soll wieder öffentlich sein er muss heißen wie die Klasse also PKW
- nicht KFZ muss heißen wie die Klasse die Klasse heißt PKW diesem konstraktor werde ich jetzt sinnvollerweise alles
- 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
- mehr in sitzplät und natürlich die schweifklammern
- so jetzt kommt hier schon die interessante Fehlermeldung fuhpark KFZ enthält keinen konstraktor der Null Argumente
- akzeptiert um ein PKW zu bauen muss er innen drin erstmal ein KFZ bauen BKW ist wie so eine Zwiebelschale drum rumgelegt um
- KFZ ich kann das den BKW nur bauen wenn ich erst stillschweigend ein KFZ gebaut habe damit dieser konstraktor laufen kann muss stillschweigend der
- 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
- laufen lassen weil er keinen konstraktor hat der einfach so funktioniert Null Argumente kein Standard er kan nicht einfach den standardkonstraktor aufrufen
- weil es gibt kein wir haben nämlich anderen geschrieben ich muss ausdrücklich den konstraktor von KFZ aufrufen das ist Doppelpunkt in dieser
- Sprache Doppelpunkt Base so ein ausdrücklicher Aufruf mit dem ganzen Krempel natürlich jetzt der da oben steht Kennzeichen genauso rufe ich den
- konstraktor auf von der Mutterklasse Kilometerstand Erstzulassung Erstzulassung
- 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
- Base in Java sieht das anders aus in Java ist das in der ersten Seite in den schweifklammern das ist ein bisschen sehr versteckt
- 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
- aus hier ist es eben mit dem Base stellvertreten Basis als für den konstraktor der Mutterklasse der konstraktor der Mutterklasse mit diesen
- 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
- 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
- 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
- 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
- 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
- Funktionsaufruf den konstrakt der Mutterklasse aufrufen das ist ein Funktionsaufruf sie können hier Sachen ausrechnen hauptsache sie rufen den
- konstrakt der Mutterklasse auf natürlich auf irgendeine vernünftige Weise und den Kilometerstand zu verdoppeln ist offensichtlich nicht die vernünftige
- 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
- 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
- Pkw und hier bei dem M Laster dasselbe ich gucke gerade kann ich das hier auf die Schnelle ich ma das
- hier ganz dre mit Copy und Paste das ist natürlich jetzt hier LKW und der
- kriegt die maximale Nutzlast und hier haben wir die maximale Nutzlast so alle
- glücklich mal gerade wie das jetzt aussieht im realen Programm wir können jetzt also hier wieder in die hauptfensterklasse reingehen und sagen
- okay jetzt bauen wir eben einen BKW oh kein OKW sondern ein [Musik] BKW noch ein Auto
- 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
- basteln da sagen wir der ist gerade in diesem Moment zugelassen worden was war das für ein Antrieb sein
- immer mit Tabulator nebenbei also ich tippe das Komma Komma lezeichen sehen da bietet er jetzt schon an KFZ Antrieb
- 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
- ich diesen Aufruf auch noch mal vor was jetzt passiert wenn Sie diesen konstraktor aufrufen ich jetzt hier mal ein
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- vererbt wird dann zwiebelschalenmäßig von innen nach außen aufgebaut das kommt kommt immer noch was dazu die abgeleiteten Klassen sind
- spezieller die abgeleiteten Klassen können im Zweifelsfall mehr als die mutterklassen die sitzen quasi ja die bilden quasi so eine
- Zwiebel innen drin die Mutterklasse eine Instanz der Mutterklasse und außendrum vielleicht in mehreren Schichten dann was jeweils dazuekommen
- ist jetzt zur Polymorphie jetzt nutzt man das auch dass es diese Mutterklasse gibt dieses allgemeine Ding kann in zwei
- verschiedenen Arten auftreten einmal als PKW und als LKW und es kann nicht nur verschiedene Sachen enthalten dann einmal die Zahl der
- Sitzplätze einmal die maximale lutzlast es kann auch verschieden funktionieren das ist nachher ein wesentlicher Trick das Überschreiben von
- Methoden ich kann eine Methode hier in der Mutterklasse anlegen die dann in der einen Kindklasse so funktioniert und in der anderen
- Kindklasse so funktioniert jeder kann das auf seine Art machen dann mal Ideen was könnte man haben
- inwiefern könnten PKW und LKW dieselbe Funktion haben dasselb ein Ding desselben Namens tun sozusagen eine Tätigkeit desselben Namens haben die
- aber verschieden ist für PKW und LKW no ein naives Modell von der mautzahlung ich
- möchte folgendes haben hier möchte ich in der Mutterklasse eine Methode haben die folgendes
- sagt aus den gefahrenen Autobahnkilometern möchte ich ausrechnen wie viel Euro zu zahlen
- 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
- bitte zahle keinen Schimmer wie viel man dann zahlt eigentlich von der bei der LKW Maut okay zahle 100 € oder sowas beim
- 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
- 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
- hinzukriegen das wäre dann nachher wenn man das korrekt umsetzen eine Anwendung für Polymorphie für die Vielgestaltigkeit
- der LKW und der BKW haben dieselbe Methode aber diese Methode ist verschieden bei den beiden sie arbeiten verschieden
- also ich wollte jetzt kein weiteres Datenelement von wegen Autobahnkilometer oder so sondern eine Methode die eine Zahl kriegt die Autobahnkilometer sich
- nichts merkt und die Euros dann zurückliefert diese Methode soll öffentlich sein sinnvollerweise sie soll Euros
- zurückliefern natürlich nicht nur ganz Euros man neigt dann dazu douel zu nehmen was nicht gut ist wegen der Rundung
- 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
- 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
- Befehlsform heißen Sätze legestelle Maut ist keine Befehlsform eines Verbs s mal zahle sehr schön zahle Maut oder berechne
- 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
- 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
- alles viel harmloser aus mit der Groß und Kleinschreibung der Großschreibung mitten im Wort es gibt einen guten Grund
- 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
- jetzt noch generil er sagt nicht alle codefade geben einen Wert zurück ich sage ja douel soll rauskommen aber ich gebe nichts raus
- 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
- Kraftfahrzeug hat jetzt diese Methode hier drin berechne Maut und sie gibt immer null aus schön und das wäre die Grundversion
- erstmal jetzt kommt der spannende Schritt bei der Polymorphie ich möchte dass die kindklassen ihre eigene Version dieser
- 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
- public virtual berechne Maut eine virtuelle Methode ist das jetzt diese Methode wird virtuell das heißt die kindklassen können Sie
- ä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
- auch virtual eine virtuelle Methode die kindklassen können was anderes machen unter demselben
- Namen die ein Kommentar Kannen wir schon mal schenken die pkw-klasse die macht das genau wie die
- Mutterklasse die muss gar nichts machen das bleibt so in der pkw-klasse aber in der lkw-klasse muss ich das jetzt anders
- machen und um zu sagen das soll anders sein sage ich override überschreiben wdich ja überreiten nicht override überreiten im englischen aber
- im deutschen eben überschreiben genannt Hal sie das schön auseinander overload heißt es gibt mehrere Varianten einer Funktion mit selben Namen aber
- verschiedenen Parametern overright heißt diese Geschichte hier in der Polymorphie eine Kindklasse macht es anders als die Mutterklasse das ist override
- überschreiben Sie tippen OV Tabulator overriite derzeichen und dann sehen Sie was sie überschreiben können aha gibt noch ein
- paar andere aber berechne Maut möchte ich überschreiben Tabulator unglaublich was da alles sch so schon steht er kopiert den ganzen Kram
- 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
- 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
- mal Tabulator die Variante die jetzt vollautomatisch baut in der Klasse LKW jetzt die Variante der V vollautomatisch
- 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
- 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
- der Mutterklasse auf aber jetzt das Doppelte bitte aber hier brauch natürlich ganz was anders die Mutterklasse gibt ja null
- zurück hier brauchen was die jeder Kilometer Kost was auch immer 0,2 € 0,2 x Autobahnkilometer das sollte Laster
- 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
- 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
- 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
- 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
- der Kindklasse überschreibe ich eine Methode der Mutterklasse das gucken wir uns gerade noch mal an wie das dann tatsächlich aussieht im wen
- Leben an dieser Stelle hier ich habe ein PKW jetzt baue ich noch ein Laster jetzt baue ich noch einen Laster LKW
- LKW Laster Laster LKW
- 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
- dra so keine große Überraschung wenn ich jetzt die Funktion aufrufe ist gleich noch ein Auto Punkt berechne Maut
- 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
- hoffentlich 20 € rauskommen das ist jetzt noch nicht wirklich Polymorphie sichalber gesagt kommt gleich noch noch eine Minute aber erstmal das gerade
- vorgeführt dass zumindest diee Funktionsaufrufe funktionieren ähm diese Zeile so Maut ist jetzt hier un auf
- 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
- 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
- Polymorphie Polymorphie wird es wenn ich sage oh ich habe ein [Musik] KFZ K ein KFZ K und das ist mein Laster
- von eben gucken sich an was ich jetzt zuweise ein Laster ist ein LKW ich weise
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- geht anders hinter den Kulissen wird dann eben Unterschieden das gucken wir uns nachher
- noch mal im Detail an glaube ich das war noch ein bisschen heftig
Zum Nachlesen
Klasse (Objektorientierung)Die Klasse dient als Bauplan für die Abbildung von realen Objekten in Softwareobjekte und beschreibt Attribute (Eigenschaften) und Methoden (Verhaltensweisen) …
Vererbung (Programmierung)Die Vererbung dient dazu, aufbauend auf existierenden Klassen neue zu schaffen, wobei die Beziehung zwischen ursprünglicher und neuer Klasse dauerhaft ist. Eine …
ObjektorientierungUnter Objektorientierung (kurz OO) versteht man in der Softwaretechnik eine Sichtweise auf komplexe Systeme, bei der ein System durch das Zusammenspiel …
Objektorientierte ProgrammierungDie objektorientierte Programmierung (kurz OOP) ist ein auf dem Konzept der Objektorientierung basierendes Programmierparadigma. Die Grundidee besteht darin …