Lernpfad:Objektorientierte Programmierung mit Java/Vererbung: Unterschied zwischen den Versionen

Zur Navigation springen Zur Suche springen
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:
== Ober- und Unterklassen ==
== Ober- und Unterklassen ==
Am besten verdeutlicht dies ein Beispiel: Nehmen wir an, es soll ein geometrisches Zeichenprogramm nach folgender Beschreibung umgesetzt werden.
Am besten verdeutlicht dies ein Beispiel: Nehmen wir an, es soll ein geometrisches Zeichenprogramm nach folgender Beschreibung umgesetzt werden.
{{Schublade|Es gibt verschiedene Formen wie Rechteck, Dreieck und Quadrat. Jede Form besitzt eine x- und y-Koordinate, eine Richtung und eine Farbe. Formen können versetzt und gedreht werden. Rechtecke besitzen zwei Seitenlängen. Bei Quadraten sind beide Seitenlängen gleich. Dreiecke werden über zwei Punkte festgelegt, die auch eine x- und y-Koordinate besitzen. Die dritte Ecke wird durch die Position des Dreiecks festgelegt.}}
{{Schublade|Es gibt verschiedene Formen wie Rechteck, Dreieck und Quadrat. Jede Form besitzt eine x- und y-Koordinate und eine Richtung. Formen können versetzt und gedreht werden. Rechtecke besitzen zwei Seitenlängen. Bei Quadraten sind beide Seitenlängen gleich. Dreiecke werden über zwei Punkte festgelegt, die auch eine x- und y-Koordinate besitzen. Die dritte Ecke wird durch die Position des Dreiecks festgelegt.}}


Ein erstes Implementierungsdiagramm ohne Vererbung könnte so aussehen:
Ein erstes Implementierungsdiagramm ohne Vererbung könnte so aussehen:
Zeile 27: Zeile 27:
</graphviz>
</graphviz>


Es ergeben sich einige Dopplungen bei Eigenschaften und Methoden. Jede Klasse besitzt x- und y-Koordinaten und eine Farbe als Attribut, sowie die Methoden ''versetzen'' und ''drehen''.
Es ergeben sich einige Dopplungen bei Eigenschaften und Methoden. Jede Klasse besitzt x- und y-Koordinaten und eine Richtung als Attribut, sowie die Methoden ''versetzen'' und ''drehen''. Diese müssten bei der Implementierung jeweils exakt gleich umgesetzt werden, was neben viel Aufwand sehr fehleranfällig ist.
 
Statt dessen können im Problembereich logische Zusammenhänge zwischen den Klassen identifiziert werden. Jede Klasse ''ist eine'' "Form". Ein "Quadrat" ''ist ein'' "Rechteck". Die konkreten Form-Klassen haben alle bestimmte Attribute und Methoden gemeinsam.
 
Form ist also eine '''Oberklasse''' von Dreieck und Rechteck. Quadrat ist eine '''Unterklasse''' von Rechteck. (Also ist Rechteck wiederum ''Oberklasse'' von Quadrat.) Die Methoden müssen so nur einmal in Form implementiert werden, sind aber durch die Vererbung in allen Objektinstanzen verfügbar.
 
Das neue Implementierungsdiagramm sieht so aus:
 
<graphviz>
<graphviz>
digraph G2 {
digraph G2 {

Navigationsmenü