Herzlich willkommen zur heutigen Vorlesung über Polymophie, über Typen, über Vererbung eigentlich.
Wir teilen das wieder in verschiedene Häppchen ein und das Ganze orientiert sich nach dieser Gliederung,
dass wir zunächst die Begriffe besprechen, was Vererbung überhaupt ist,
die Hierarchien haben sie schon zum Teil kennengelernt,
Sab Typing und dann kommen diese beiden Begriffe,
dynamisches Binden, Polymorphie,
das ist wieder ein separater Abschnitt,
dann werden wir darüber sprechen,
wie sich das in Vererbung niederschlägt und zum Schluss noch
ein Schwenk auf das Vertragsmodell machen,
was sie ja beim letzten Mal kennengelernt haben
So, erwischt lassen Sie uns starten mit, ach so,
wir haben ja immer wie immer Fragen dazu, dazu werden wir kommen,
noch zunächst erstmal darum, wozu brauchen wir Vererbung.
Vererbung brauchen wir zunächst erstmal dazu, um unsere Systeme besser zu organisieren.
Organisieren im Sinne von, dass wir Sachen nicht mehrfach machen.
Mehrfach machen heißt, dass man oder zusammenfassend heißt,
besser gesagt, dass mehrfach vermeiden,
dass wir Sachen, die gleich sind,
die ähnlich sind,
in irgendeiner Form zusammenfassen
Ja, und das kennen sie eigentlich schon,
dass man zum Beispiel in einer Klasse etwas zusammenfasst,
eine private Methode macht,
die dann innerhalb der Klasse andere Methoden unterstützt.
Dass man klassenübergreifend eine öffentliche Methode von einer Klasse bereitstellt,
die dann andere Klassen benutzen können.
Wir machen das jetzt so,
dass mehrere Klassen gemeinsam ein überordnetes Konzept zusammenfassen oder sich gemeinsam
nutzen und dass man auf diese Weise das übergeordnete Konzept,
das verallgemeinerte Konzept auslagern kann
Ja, und wir machen hier als ein kleines Beispiel,
ja, sie haben ein Auto und dieses Auto hat bestimmt in bestimmten Motor,
ich nehme mal hier an,
da gibt es einen 1,8 Liter TDI,
also irgendwas mit Direkteinspritzung und 1,6 Liter, die TDI, mit Direkteinspritzung.
Ja, und beide haben gemeinsam, sie haben eine Motorsteuerung.
Und diese Motorsteuerung ist in weiten Teilen ähnlich oder identisch,
aber die pure Parameter unterscheiden sich. Ja, zum Beispiel,
dass das gemischt, Gas, Luftgemisch durch Messparameter beeinflusst wird Und
wie die Parameter genau aussehen, ist unterschiedlich.
Das heißt, wir können von dieser Motorsteuerung 1,6 Liter und 1,8 Liter Motor,
könnten wir jetzt die gemeinsamen Konzepte nur einmal entwickeln.
Hat ja für uns den Vorteil,
wenn es irgendwie eine neue Idee gibt, wie sich der Motor weiterentwickeln kann,
dann könnte man das gemeinsam für die Motorstrom machen oder zum Beispiel,
wir wechseln die Hardware, dieser Motorstrom, weil es einen Lieferanten gibt,
der das störsicherer kann oder kleiner kann oder irgendwas anderes.
Ja, dann könnten wir die Motorstörung für beide Motoren
mit einem Mal auf eine neue Plattform übersetzen,
Wird nur die Parametersätze, die separat sind, hier ausgelagert.
Das heißt, nur das Speziellere ist hier einfach,
alles andere ist zusammengefasst. Wir müssen diese Arbeit des Migrierens auf
eine neue Plattform nicht für den und für den getrennt machen.
Das ist so die Idee, dieses Vererbens und wir fassen
das Vererben zusammen. Wir möchten dabei darauf hinweisen,
dass es Vererbung letztlich zweimal gibt. Zwei verschiedene Dinge,
die sich unter dem Begriff Vererbung verstecken oder damit bezeichnet werden.
Manchmal sagen die Informatik auch dazu überladen, der Begriff ist mit mehreren Bedeutungen bestückt.
Der erste Begriff Die erste Bedeutung ist die Typvererbung.
Das kennen Sie schon, das haben Sie in SE1 schon behandelt.
Wir haben die Interfaces, die Interfaces verallgemeinern und fassen zusammen,
ja, und damit kann ich die Schnittstelle weitergeben.
Beim Interface in Java ist es mehr die Verpflichtung,
an den Programmierer, diese Schnittstelle auch zu implementieren.
Und damit gebe ich aber auch die Eigenschaften der Schnittstelle weiter.
Und wir können auch die Operationen ebenfalls aufrufen,
weil sie gleich sind, ja,
Variablen können mit Referenzen belegt werden,
weil sie in gleicher Weise durch den gleichen Typen definiert sind
Was wir jetzt neu machen, ist,
was wir jetzt in dieser Vorlesung einführen wollen, ist,
dass wir die Implementation weitergeben. Implementation ist ein Begriff,
den die Informatiker so im Slang für alles Mögliche gebrauchen.
Eigentlich heißt dieser Begriff Verwirklichung. Implementation, Verwirklichung,
nehmen Sie das als Fremdwort des Tages.
Bitte merken Sie sich das, Verwirklichung. Ja,
also wir wollen das verwirklichen, das ist in Programmieren,
ist das immer der Quellcode, aber es gibt woanders auch Konzepte.
Ja, Sie haben sich einen neuen Arbeitsablauf überlegt,
Steuerformulare von Bearbeiter zu Bearbeiter gehen, im Finanzamt.
Und dann wird es eine Schulung geben und Ablagekästen und einen Formularplan,
einen Aktenplan und dann wird das auch verwirklicht, indem die Leute das lernen.
Das wäre auch eine Form der Implementation. Also wir machen Implementation,
wir vererben die Implementation und die Implementation ist bei uns Quellcode. Ja,
die Unterklassen erhalten tatsächlich und jetzt Implementation ließ als Quellcode,
erhalten den Quellcode der Elternklassen und damit,
da das Ganze spezieller wird, von oben nach unten,
Spezialisierung, sind die Unterklassenspezialisierungen der Elternklassen.
Ja, hier hatten wir super Typ und Subtyp und ja,
können Sie genauso gut den Begriff Subklasse und Superklasse einführen.
Wir haben die dann auch gleich nochmal auf einer Folie.
Und dadurch, dass das verallgemeinert ist, generalisiert ist,
können wir auch sagen, die Elternklassen,
die Superklassen abstrahieren hier, die Unterschiede spielen keine Rolle mehr.
Das, was wir hier vorher haben, ja,
also die allgemeine Motorsteuerung, fast die Unterschiede hier,
blendet die Unterschiede aus, die sind hier nicht dabei,
Abstraktion bedeutet,
wir lassen die Details weg
Also das ist hier der Punkt. Ich möchte darauf hinweisen,
dass der Begriff Vererbung, so wie wir ihn jetzt hier erst einführen,
in vielen Lehrbüchern ganz zu Anfang eingeführt wurde,
als etwas typisches der Objektorientierung.
Und wir kommen jetzt erst damit, zwar deswegen, weil Vererbung insbesondere,
weil diese Implementationsvererbung eine Reihe von Gefahren mit sich bringt.
Doch lassen Sie uns erst mal zu den Fragen springen.
Wir hatten gerade hier den Mehrwert der Vererbung und wann
ist es sinnvoll, die anzuwenden?
Das hatten wir gerade schon auf dieser Folie
Ja, also die Vererbung können wir hier nutzen,
um Implementation weiterzugeben, um die Operationen aufrufen zu können,
um die gleichen Referenzen zu haben.
Und hier steht die Motivation dafür, ja,
wir wollen etwas nicht mehrfach machen. Wir wollen es zusammenfassen,
wir wollen gemeinsame Sachen auch nur einmal schreiben, ja,
und mein Beispiel war hier, wenn wir eine Migration dieser Motorsteuerung haben,
brauchen wir sie ja nur einmal machen.
Das Gleiche kennen sie von anderen Systemen, man hört,
oh, die müssen schnell in Software-Update machen,
weil da irgendein Sicherheitsloch gefunden worden ist. Ja,
wenn sie das dann 13 Mal machen müssen für 13 verschiedene Versionen,
wäre das schon viel aufwendiger, als wenn sie sagen,
wir haben das zusammengefasst und wir machen das nur einmal für diese Oberversion und alle anderen profitieren davon.
Solange es sich nur gemeinsam genutzte Konzepte betroffen sind,
wenn die speziellen Konzepte betroffen sind,
dann müssen wir es natürlich mehrfach machen.
Also das wäre gleich die Antwort auf die erste und die
zweite Frage. Ja, also wann ist das sinnvoll
und wann ist das anzuwenden
Frage, die ein Wirt auf Frage 3,
die hatten wir auch schon, das war auf die Sonnenscheinfolie 7,
die Gegenüberstellung dieser beiden Typen von Vererbung.
Damit sind wir schon mit dem ersten Abschnitt
so weit durch und das nächste kommt im nächsten