Nachdem wir nun über verschiedene Aspekte dieser Subtyp-Herarchien gesprochen haben,
wollen wir jetzt zur Vererbung kommen.
Wir hatten hier schon gesehen, Typ-Hierarchien zwischen Inter-Interfaces mit der Generalisierungsbeziehung,
die Implementierungsbeziehung und lassen Sie uns nun zur Code-Wiederverwendung kommen.
Das geht weiter auf der Folie 24. Ja,
das ist eine weitere Form dieser Beziehung in Hierarchien.
Und das ist jetzt das, was wir mit Implementationsvererbung bezeichnen.
Bei Implementationsvererbung Erbt die Unterklasse tatsächlich wirklich die Implementierung,
übernimmt die Implementierung der Oberklasse. Und zwar diese Implementierung bezüglich der Felder,
also der Attribute der Variablen und der Methoden der Operationen der Oberklasse,
der Implementierung der Operationen.
Man kann diesen Code hier unten anpassen oder man kann ihn einfach so übernehmen.
Anpassen, indem man ihn überhaupt neu definiert,
überschreiben oder gar erweitern.
Das wäre,
das wäre möglich
Und das wird für später, wir werden das noch weiter eingehen drauf,
aber das ist das, wo der Wiederverwendungsaspekt,
der Aspekt der Einsparung von Arbeit auch eine Rolle spielt.
Wie gesagt, für uns ist die Typ-Wiederverwendung die Typvererbung das Wichtigere,
die Implementationsvererbung hat, eine Reihe von Gefahren.
In diesem Zusammenhang müssen wir einfach noch ein paar weitere Begriffe nennen.
Wir hatten Oper- und Unterklasse genannt, also A,
wer die Oberklasse, B, die Unterklasse,
und das geht einher mit super Typ,
super im Sinne von Oper überlagert oder sowas
Subtyp, das Untergeordnete, also Subtyp ist hier B von
A. A, ist der super Typ von B und C.
Und das steht hier nochmal weiter. Das Lager ergibt sich,
das kann man entsprechend weiterreichen, transitiv,
den Begriff müssen wir jetzt nicht wissen,
aber die Begriffe müssen sie wissen,
Subtyp und super Typ,
weil wir das häufig in der Zuweisung brauchen,
Opa und Unterklasse
müssen sie wissen
Es gibt auch noch den Begriff der Mehrfachvererbung. Einfach Vererbung,
das ist dieser Begriff Hierarchie, Hierarchie obendrüber gibt es einen,
soviel ich weiß, kommt dieser Begriff aus der katholischen Kirche,
obendrüber der Papst, der hat immer recht.
Und hier ist immer oben einer, das ist die Einfachvererbung.
Es gibt eine Baumform, eine Hierarchie und immer nur
eine Oberklasse vor Unterklasse. Java erlaubt nur diese Einfachvererbung.
In Ceblus Plus hat man mehrfach Vererbung erlaubt,
aber es wird sehr stark davon abgereiten,
weil da viele Probleme daraus was sortieren,
es ist unverständlich und so weiter
Man kann gemeinsame Eigenschaften von mehreren Oberklassenerben,
aber was passiert da, wenn da Namenskonflikte gibt?
Das ist in Java, in dieser Form nicht erlaubt.
Sie können es jedoch machen, wenn sie Typvererbung dafür machen.
Diese Mehrfachvererbung wurde da sehr viel diskutiert. Es gibt das,
ja, man möchte, das machen aber nur für Subtyping, für Typvererbung.
Ja, nicht für Implementationsvererbung. Diese Namenskollision hätte ich schon gerade erwähnt,
wenn wir dort Konflikte haben, in beiden,
wir schauen so vorgehenden Folie,
wenn in der Klasse ein Ad gibt und in der Klasse
gibt es ein Ad,
welches Ad sollen die untergeordneten Klassen dann implementieren
Das wäre ganz schwierig. Wir wollen auf jeden Fall,
dass weiterhin, was das Bleibende ist,
was sie sich bitte unbedingt merken sollen, wir setzen Vererbung ein,
um gemeinsame Eigenschaften auf der Oberklasse zusammenzuführen.
Und dieses Zusammenführen geht eben ganz gut. Eigenschaften beschreiben über Typvererbung
. So, jetzt lassen Sie uns mal diese Teams,
diese Namenskollision mal diskutieren, was könnte da passieren?
Ja, also wenn hier beide dieses Ed haben, in dem Fall,
was passiert hier unten? Das wäre eine Namenskollision und das ist das, was wir nicht wollen. Damit erst mal kurz zu Zusammenfassung dieser Vererbung,
ja, wir brauchen das als wichtige Eigenschaft zur Zusammenfassung,
aber es wird eben auch manchmal ein Missverbrauch missbraucht und missverstanden,
ja, und wir haben, müssen uns klar sein,
dass wir, wenn ihr den Begriff Vererbung direkt verwenden,
dass wir da verschiedene, dass die Leute verschiedene Sachen darunter verstehen,
ja, wir haben einerseits diese Polymorphie, wo wir,
wo das gleiche Name, gleiche Bezeichnung für verschiedene Operationen gibt,
also das Ad gibt es für die Arelist und für LinkedIn.
Das Plus gibt es für Float und für Inditscher
Dann haben wir diese Typ-Abstraktion, dass wir also allgemeinere Typen zusammenfassen.
Und eben, weil wir haben auch noch die Implementationsvererbung,
die wir eben gesehen haben. Wir müssen die klar voneinander trennen,
weil wir die verschiedenen Konzepte unterschiedliche Einsatzbereiche haben. So,
lassen Sie uns dazu kommen, was wir für Regeln aufstellen können dafür.
Regeln für fachliche Hierarchien, Regeln für technische Sache.
Und wieder kennt das Ganze mit dem Vertragsmodell zusammen,
machen wir in einem separaten Abschnitt.
Zunächst erst mal Wir haben dieses Sub-Typing. Wir haben
eine Hierarchie, Hierarchie immer nur ein Element rum drüber.
Und das ist eine Ist-Ein-Ein-Beziehung. Das ist diese Generalisierungsbeziehung.
Ja, Generalisierung ist ein, das ist das Gleiche.
Und dieses Symbol, was wir schon kennen, ich glaube,
auf dem nächsten, auf der nächsten Folge kommt das dann.
So. Und gleichzeitig müssen wir wissen, wie das technisch funktioniert,
damit wir die Nachteile, die Vorteile verwenden können.
Ja, es geht hier immer bei diesem Sub-Typing,
bei der Typhierarchie, bei der Typvererbung geht es immer um Ersetzbarkeit.
Das heißt, die oberen, dass die obere Element,
also zum Beispiel unsere Liste, soll die allgemeine Liste,
soll ersetzbar sein durch eine konkretere Liste.
Entweder durch die oder durch die. Das wäre das,
was wir im Dynamischen binden haben. So,
wenn wir Hierarchien entwerfen, das heißt, sie als Programmierer,
als Programmiererin denken sich aus, was ist denn das Gemeinsame,
was ich zusammenfasse?
Das erfordert einiges an Gehirnschmalz, sage ich mal,
ja, und versuchen sie,
Sachen zusammenzufassen
Zum Beispiel, wir haben etwas Fachliches hier,
wir haben einen Stapel, wir haben Ordner,
wir haben eine Box, wir haben eine Ablage.
Ablage, als Ablage bezeichnet man etwas in dem Büro,
wo man einfach nur zum Beispiel Rechnungen sammelt, Schriftverkehr mit dem Finanzamt sammelt.
Das wird unter Schriftverkehr mit der Telekom. Ja,
das wird nach Datum abgelegt, man hebt es nur auf.
Ja, man möchte da ein Dokument auswählen, man möchte ein Dokument entnehmen.
So ein Ordner ist etwas, wo Sachen in einem Zusammenhang gestellt werden.
Sie werden noch zusätzlich noch beschriftet,
man hat ein Inhaltsverzeichnis und vielleicht macht man noch Zwischenblätter,
dass man sagt, okay,
das ist jetzt Das hat alles mit dem Finanzamt zu tun,
aber das hat mit dem Jahr sowieso zu tun,
ja, 2019, 2018,
2017. Ja, das wäre die Zwischenblättern. Sie können ein Inhaltsverzeichnis machen,
Sachen, die sie abgegeben haben, Sachen,
die sie zurückbekommen haben, ihren Einspruch, was auch immer.
Ja, so, eine Box ist einfach nur eine Sammlung,
muss sie vielleicht auch ihre Fotos reintun und da gleich noch
die Reisebeschreibung mit dazu und die Landkarte von ihrem letzten,
sagen wir mal, Mallorca-Urlaub oder wie auch immer.
Und die Kneipenrechnung natürlich auch nicht vergessen. So,
und Stapel ist wieder was anderes, auch nur eine Sammlung,
ja, beim Stapel kommt es auf die Reihenfolge an
Und last in first out, also das,
was wir obendrauf zuletzt gelegt haben, wird zuerst wieder gemacht.
Das hat man zum Beispiel bei der Bearbeitung, wenn ich unterbrochen werde.
Ja, sie machen irgendwas und da kommt was ganz Wichtiges rein.
Und das, was sie machen, legen sie zur Seite,
oben auf den Stapel drauf und machen das Wichtigere zuerst.
Und wenn da etwas noch Wichtigeres kommt, würden sie das
auch auf den Stapel legen und das Nächste weitermachen.
Also dieses Last Infos, ich lege was auf den Stapel
auf oder manchmal löse ich das auf oder manchmal
würde ich Fläche nach ausbreiten.
So, jetzt was hat das gemeinsam?
Das haben wir hier schon kursiv. Einfügen aus,
weil wählen entnehmen
Das ist das Gemeinsame für die Sachen. Und dann könnten wir es ja durchaus so machen,
wenn wir das Gemeinsame gefunden haben. Und das,
was ich jetzt länglich diskutiert habe zur letzten Folie,
das ist das, wo sie überlegen müssen,
wo sie Gehirnschmalz brauchen, wo es auch gut ist,
das mit jemandem zu diskutieren.
Weil andere Leute andere Sichten haben.
Jemand weiß sie vielleicht noch hin, dass sie sagen,
ja, da gibt es noch Originale und Kopien.
Und jemand weiß sie hinten, der muss das Datum drauf
bei manchen Sachen und bei manchen nicht. Das wäre noch ein Unterschied,
vielleicht bei dem Ordner und bei der Ablage mit dem Datum,
was bei Stapel und Box vielleicht nicht der Fall ist.
Ja, also solche Sachen, jeder hat andere Aspekte,
insbesondere der Anwender.
Der Auftraggeber hat noch andere Aspekte
So, nachdem wir diesen Gehirnschmalzteil gemacht haben,
die wirkliche fachliche, einen guten Entwurf gemacht haben,
den alle verstehen, der klar ist,
dann ist es auch leichter, diese Zuordnung zu machen.
Ja, das erste, also dieser Teil hier,
ist die Verhausung dafür, einen guten Entwurf zu machen.
Wenn jemand, der sich nur hinsetzt und bob och,
Klasse A, Klasse B und dann zack, zack,
zack, der macht typischerweise keine gute Lösung.
Ja, also erst das diskutieren, erst das überlegen und
das durchaus eben diese Diskotieraspekt, gute Lösungen finden.
So, nachdem wir das klar haben, was ist das Gemeinsame,
nämlich das Kursive, machen wir hier den fachlichen Oberbegriff.
Wir sind hier, hier steht nicht Oberklasse, bitte.
Wir sind weiterhin im Fachlichen und hier sind UML-Symbol,
was wir hier haben, ist eine UML-Klassendiagramm.
Also die Kästen der Box, die Box ist eine Klasse.
Dieser Pfeil ist der Generalisierungsfeil. Wir hatten eben auch die Bezeichnung,
ist ein, also die Box ist eine Ablage,
der Ordner ist eine Ablage, der Stapel ist eine Ablage.
Ja, in diese Richtung ist ein und in diese Richtung
auch Generalisierung. Das ist letztlich das Gleiche. So,
und jetzt wollen wir versuchen, daraus eine Typhierarchie zu bilden,
indem wir hier das als super Typ bezeichnen und aufbauen und die Sachen,
die andere auch haben, sind hier zusammengefasst.
Und damit aber immer diesen Reich, Effekte erreicht des Strukturierens.
Ja, ich merke, okay, dieser Ordner,
der Gehirn ist eine Art Ablage.
Die Ameise ist eine Art Insekt. Da kann ich
gemeinsame Eigenschaften schon daraus ablesen, dass ich weiß,
das ist, dieser Ordner ist hier drin.
Ja, ist hier in dieser Hierarchie dort eingeordnet.
So, jetzt gleich eine Warnung davor
Was man nicht machen sollte. Technisch wäre das machbar,
was wir hier haben, ja, aber bitte hinweisen,
es ist schlecht, ja, wir könnten jetzt durchaus sagen,
okay, Ablagestapel und so weiter und bei Box sagt man,
hm, irgendwas drin, aber noch ein Inhaltsverzeichnis und inzwischen wird auch,
wir machen das hier drunter,
ja.
Es wäre schwer zu verstehen, zu vermitteln,
dass Ordner eine spezielle Box ist.
Jemand anderes könnte ankommen und sagen, Box ist eine spezielle Ordnung.
Das ist nicht für jeden verständlich. Das ist nicht für
Programmierer verständlich, das ist nicht für Anwender verständlich.
Und insbesondere, wenn es für Antwortprogrammierer nicht verständlich ist,
dann machen die vielleicht
was anderes damit
Sie werden ihre Kollegen und großen Projekten nicht treffen,
die mit ihren Klassen was machen. Und hinterher stellen sie irgendwo fest,
wenn sie eine Fehlermeldung kriegen, jemand,
die schwert sich und sie ist sie auf easy zurückgegangen,
weil sie vielleicht noch am meisten darüber wissen, nach Jahren,
bestellen sie fest, was machen die mit meiner Klasse?
Habe ich nie so gedacht. Und damit das nicht passiert,
versuchen wir hier eine klare Struktur zu schaffen.
Und das fängt eben an, dass wir das erkennen,
das wirklich herausarbeiten, was ist das gemeinsam.
So, das war das schlechte Beispiel. Und jetzt dieses ist,
als versteht man als, dass man jetzt hier noch etwas einführt.
Zum Beispiel könnten wir sagen, für Archivierungszweige haben sowohl den
Boxer für das Ungeordnete als auch den Ordner für das Geordnete.
Das können wir hier zusammen führen und hier nochmal eine Ähnlichkeit machen.
Beides hat eine Beschriftung und die Beschriftung nochmal hier zusammengefasst.
Also hier ist zusammengefasst, was ich mit Dokumenten machen kann.
Hier ist zusammengefasst, dass beides eine Beschriftung hat und die
Box hat damit schon alles und der Ordner hat zusätzlich noch Inhaltsverzeichnis im Fitnessbett.
Also das wäre auch noch möglich, jetzt daraus eine Struktur zu beten.
Diese Struktur haben wir ganz häufig in fachlichen Bereichen.
Also das könnte so sein, dass wir Fachwerte haben,
fachliche Werte haben wir für
Ein Bankkonto. Ja, dass das hier für eine Ablage hatten, war schon so.
Ja, also hier für Werte. Oder eben,
wenn wir solche Schriftgutsachen, wir hatten ja gerade zum Beispiel
mit Ablagen, ja, was gibt es da alles?
Da gibt es verschiedenes Schriftgut und der Formulare und so weiter.
Ob das jetzt so sinnvoll ist oder nicht, das entscheidet am Ende die fachliche Sicht.
Ja, diskutieren Sie so etwas immer mit anderen Leuten,
weil die Leute unterschiedliches Verständnis haben.
Am Ende kann man in einer Diskussion eine gute Struktur herausarbeiten. Gut,
nicht nur, weil sie gut verständlich ist, was ich schon sagte,
sondern auch, weil sie über längere Zeit Bestand hat,
weil sie so als für alle, für alle Zwecke gilt.
Ja, und natürlich kann keiner die Zukunft vorhersehen,
aber wenn es ihnen gelingt, etwas zu erfassen,
aufzuschweiben, zu strukturieren, zu ordnen,
was so von allen akzeptiert wird,
dann ist die Änderungswahrscheinlichkeit viel geringer.
So, damit sind wir am Ende dieses Abschnitts Vererbung und
Typ Hierarchie, weiter geht es mit Politophomophie und Vererbung
im nächsten Abschnitt