Hallo, herzlich willkommen zur vierten Vorlesung. Heute geht es,
wie Sie aus dem Titel schon sehen, wieder um Vererbung.
Sie sollten also die Vorlesung Nummer 3 vorher gehört, verschlesst gewesen,
verstanden haben und dann geht es weiter mit Nummer 4 hier.
Wir haben zunächst Fragen zur Vorlesungsprüfungsvorbereitung wieder und wir beschäftigen zunächst erstmal mit den Zielen.
Zunächst erstmal Wiederholung, das war beim letzten Mal ja auch schon Thema,
warum brauchen wir Vererbung und diese Ziele sind darin gegeben,
dass wir zur Strukturierung etwas brauchen, wenn wir größere Systeme entwickeln.
Größere Systeme bedeutet alles, was über,
sagen wir mal, 10.000 Zeilen hinausgeht, klingt viel,
ist aber praktisch nicht viel, hat aber auch den Nachteil,
dass wir uns in den kleinen Beispielen,
wie Sie so unsere Übung haben, eigentlich noch nicht merken,
dass man etwas braucht.
Strukturierung braucht man immer,
da will man Sachen zusammenfassen, das zu Arbeitspaketen,
Zwecksübersichtlichkeit oder auch um spezielle Sachen für Spezialisten
Gleiche Sachen, also dieses Vereinfachen spielt eine wichtige Rolle,
überhaupt den Sachen eine Struktur geben, dass man sich besser zurechtfindet,
aber auch Sachen, die gleichartig sind, zusammenfassen,
damit man sie mit einem Mal bearbeiten kann und eben auch die Frage,
Spezialisten.
Wir hatten beim letzten Mal schon über Team-Hierarchien gesprochen und Hierarchien
sind auch ein solches Mittel, um Komplexität zu beherrschen.
Ursprünglich wurde mal die Wiederverwendung ganz groß geschrieben,
man wollte sich Arbeit sparen und deswegen Vererbung als Mittel im Code weiterzugeben,
mehrfach zu benutzen,
Reuse ist der englische Name dafür
Man muss sagen, das war ganz zu Anfang,
den Kindertagen von Objekt und Tierung, der große Schlager.
Ich kann Arbeitssparen. Heute sieht man eher das Gefährliche an Implementierungsvererbung.
Da hatten wir letzte Woche auch schon darüber gesprochen,
dass es auch Nachteile gibt. Also Generalisierung machen wir,
indem wir das Mittel der Vererbung einsetzen.
Und heute geht es uns um Implementationsvererbung. Also vor allen Dingen,
es gibt diese drei Ziele,
Erben zum Anpassen bei Spezialisierung spielt das eine Rolle,
dann machen wir das,
um Redundanz zu vermeiden
Zusammenfassung gleichartiger Element, das wir um den ersten Punkt haben.
Den dritten Punkt, auf den gehen wir hier in dieser Vorlesung nicht weiter ein.
Deswegen ist die Frage Nummer zwei in der vorgehenden Folie,
hier die Frage Nummer eins, es wird nur nach zwei Zielen gefragt.
Also die ersten beiden Ziele hier,
Erben zum Einpassen und Erben zum Vermeiden von Redundanz. Ja,
außerdem haben wir noch die Typvererbung,
da hatten wir letzte Woche darüber gesprochen,
darüber gehen wir heute nicht so stark,
weil der Typ vor Erbu ist es ja auch möglich,
dass man Eigenschaften von mehreren Oberklassen zusammenführt
Außerdem organisieren wir letztlich diese Software-Einheiten, Software-Elemente in Hierarchien,
dadurch wird es leichter, das Ganze zu steuern. So,
also haben wir nochmal diese Generalisierung Spezialisierung dieser Java-Pfeile,
den UML-Pfeil, so ein leeres Dreieck,
Sie sehen das hier nochmal, das hat zwei Richtungen,
also in diese Richtung von unten,
wie die Pfeilspitze das zeigt,
Generalisierung und in die andere Richtung
ist es
die Spezialisierung
Gemeinsamkeiten zusammenfassen. Mir ist es so gezeigt,
als man lagert, man bildet von zwei Klassen,
stellt man fest, oh,
die haben ja das Gleiche, man fasst sie zusammen,
bildet eine Oberklasse und packt tut alle gemeinsamen Teile in die Oberklasse herausziehen, sozusagen.
Man hat dort nicht weniger Redundanz, also ich brauche Code nicht zweimal,
das hat nicht nur so viel mit Sparen von Arbeit zu tun,
sondern vor allen Dingen mit Sparen von Änderungen.
Stellen Sie sich vor, in dieser Klasse tritt irgendwie ein Sicherheitsfehler
auf oder ein anderer Fehler und dann müsste man hier gucken,
ob ist das da auch,
wenn man das zusammengefasst hat,
muss man die Wartung
nur einmal machen
Andersrum kann man es auch top down sehen. Ich habe
eine allgemeine Klasse und möchte spezielle Sachen hinzufügen und dann mache
ich nur verfeinert oder erweitern dieser Oberklasse, nur das,
was hier unten drin ist, ist in einer anderen Klasse.
Das führt dazu, dass wir weniger Redundanz haben.
Dazu gibt es diese beiden Mittel, ja,
zum Anpassen durch Spezialisierung, wenn man kleine Motivation,
Motifikationen haben kann, dann ist das häufig So,
das war das erste von den beiden Zielen,
die in unserer Frage sind.
Ja, wir haben einen Kontext oder ein Ziel,
was wir schon erfüllen. Und jetzt haben wir aber etwas
Spezielles und wollen, dass andere noch erhalten. Ja,
und dann können wir etwas neues Ziel, eine neue Aufgabenstellung,
eine neue Spezifikation, wo wir umsetzen,
indem wir das von hier oben, eine Spezialisierung machen.
In dem Fall, ich finde der Klasse C,
für diese blinke Steuerung und dann ein leicht abgegleiten,
abgeleitete, abgewandelte Blinkersteuerung machen,
wo nur das drin ist,
was wir ändern
Das zweite Ziel, was wir hatten, war das Vermeiden für eine Redundanz.
Das war ja eben schon mal mit so einem kleinen Bildchen.
Hier zwei Beispiele. In den Yava Collections,
das hatten wir auch beim letzten Mal schon,
da haben wir ja zum Beispiel in der Oberklasse nur die gemeinsamen Eigenschaften.
Das ist auch noch eine abstrakte Klasse. Da gehen wir
gleich noch drauf ein. Und da gibt es zwei Unterklassen,
die wirklich das machen, was man speziell so macht.
Das Gleiche können wir auch sehen hier im Beispiel für irgendetwas aus der Universität.
Ja, es gibt Personen, die alle da geführt werden,
zum Beispiel in Stine oder in Lecture to Go oder in
Mudel oder wie auch immer.
Und da gibt es welche, die eher der Teilnehmer sind und welche,
die eher die Autoren von solchen Materialien sind.
Das wäre denkbar
Damit haben wir die Frage zwei schon mal beantwortet.
Die Frage eins, sorry, auf der Seite zwei,
hier diese zwei Ziele. Lassen Sie uns mal weitergehen.
Noch eins weiter waren wir hier. Wenn wir das
mal zusammenfassen, wie diese Weitergabe von Ergänzungen aussieht,
alles mal auf einer Folie. Die Eigenschaften werden,
wenn wir Vererbungen nutzen, das sprachliche Mittel Vererbung,
werden die standardmäßig weitergegeben in eine Unterklasse und sind damit in
jedem Exemplar der Unterklasse vorhanden
Fällt er und er zugute, werden normalerweise,
und das ist immer so im Java, unverändert übernommen.
Man kann aber welche hinzufügen. Also sie können ein neues Attribut hinzufügen.
Für Methoden, Operationen gibt es zwei Möglichkeiten. Hier uns
steht nun mal die Definition für denjenigen von unter ihm,
die immer sich fragen, warum ist denn,
warum benutzen wir manchmal die Begriffe Methode, manchmal den Begriff Operation,
immer wenn wir über die Implementierung reden,
sollten wir den Begriff Operation verwenden.
Wenn wir nur über die Schnittstelle reden,
ist der Begriff, sorry, Methode für Implementierung.
Und wenn wir nur über die Schnittstelle reden,
dann ist Operation der bessere Begriff
Also die Spezialisierung kann so passieren, dass wir in der Unterklasse etwas,
eine Methode hinzufügen und damit auch eine Operation hinzufügen,
indem wir diese eine vorhandene, in der Oberklasse vorhandene ersetzen,
also neu definieren, das heißt redefinieren,
überschreiben oder erweitern, erweitern, das ist der Superaufruf,
auf den wir gleich nochmal kommen.
Oder übernehmen wir überhaupt eine Methode definieren, wenn die im
Oberklasse keinen Rumpf hatte, so eine abstrakte Methode war.
Das wäre auch noch möglich. Darauf gehen wir jetzt nochmal
weiter ein
Dass dieses Erben und Hinzufügen, also wir haben eine Oberklasse,
hier sehen Sie wieder den Pfeil für Generalisierung in diese Richtung bzw. Vererbung in diese Richtung,
da wir sie um Java sprechen, im Java geht,
können wir statt Spezialisierung durchaus vererben und sagen.
Wir haben hier die Klasse Konto, die Herr habe jetzt
eine Methode Gipsaldo und dazu gehört eine Implementierung.
Wenn wir eine Unterklasse machen für ein spezielles Konto,
ein spezielles Konto Sparbuch, vielleicht nochmal,
was ist der Unterschied zwischen Konto und Sparbuch
Sparbuchlebeln sagen, ist ein bisschen aus einer Mode gekommen,
aber vielleicht hat er eine unter anderem von ihm eins.
Man sagt ja Deutschlands, lieb, beliebte Art,
gibt es eine Art von Geldanlage, ist immer noch das Sparbuch.
Für mich völlig unverständlich, aber scheint so zu sein.
Aber jetzt, wenn Sie die Frage, was ist der Unterschied?
Wenn das können Sie von der Folie sehen,
es gibt Zinsen, das stimmt heutzutage nicht wirklich.
Es schwankt. Ja, es gibt nicht Müllzinsen,
aber vergessen wir es. Aber es gibt noch was anderes.
Das Sparbuch hat typischerweise eine Kündigungsfrist. Sie können nicht ständig
in ihr Geld. Wer ständig an sein Geld will,
will Tagesgeld
Aber auch das wäre ein spezielles Konto, ein Tagesgeldkonto.
Hier ist das Sparbuch in unserem Beispiel ein spezielles Konto.
Es hat zunächst erst mal die Eigenschaften,
die die Oberklasse auch hat, nämlich kann einzahlen,
ich kann auszahlen, das ist jetzt nicht dargestellt.
Oder ich kann mit dem Kontostand geben lassen.
Das heißt, wenn du Stand hast, Salde.
So, also die Methode Gipsaldo gibt es hier auch.
Und zusätzlich gibt es eine neue Methode,
berechnet Zinsen auf dem normalen Kunde, gibt es keine Zinsen.
So, und damit können wir eine neue Methode,
diese Spezialisierung dadurch machen,
dass wir etwas hinzufügen
Wenn wir das wollen, also das können wir für beide Ziele machen,
für die Spezialisierung und für die Vermeidung von Redultanz.
Weil du ganz vermeiden wir,
indem wir das hier oben zusammenfassen, zum Beispiel,
wenn es dann eben noch das Tagesgeld gibt, ja,
und vielleicht noch ein Depotkonto oder was immer gibt es die Möglichkeit gibt,
Seido, aber hier gibt es jetzt mal ein paar Untersachen.
So, wir schauen uns das an, wie das
in Java aussieht, wenn wir in der nächsten Einheit.
Wir schauen nochmal jetzt lieber nochmal die Fragen.
Also wir haben die Frage 1 im Wesentlichen behandelt,
was für Ziele gibt es und das waren die Ziele
Bumm, wir sind sie. Ähm,
die ersten beiden hier anpassen durch Spezialisierung und Vermeiden von Redundanz.
Soweit erstmal. Zu dieser Einheit geht gleich weiter im nächsten