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

keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
{{Navigation}}
{{Navigation}}
''Vererbung'' ist eines der wichtigsten Konzepte der Objektorientierten Programmierung. Mit ihr ist es möglich komplexe Problembereiche in sinnvolle Klassenhierarchien zu unterteilen. Dabei werden Eigenschaften und Fähigkeiten, die mehrere Klassen besitzen, nur einmal in einer ''Oberklasse'' implementiert und an eine oder mehrere ''Unterklassen'' weiter''vererbt''.
''Vererbung'' ist eines der wichtigsten Konzepte der Objektorientierten Programmierung. Mit ihr ist es möglich komplexe Problembereiche in sinnvolle Klassenhierarchien zu unterteilen. Dabei werden Eigenschaften und Fähigkeiten, die mehrere Klassen besitzen, nur einmal in einer '''Oberklasse''' implementiert und an eine oder mehrere '''Unterklassen''' weiter ''vererbt''.


== Vererbung im Überblick ==
== Vererbung im Überblick ==
Zeile 12: Zeile 12:
[[Datei:UML Vererbung 1.jpg|center]]
[[Datei:UML Vererbung 1.jpg|center]]


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.
Es ergeben sich einige Dopplungen bei Eigenschaften und Methoden. Jede Klasse besitzt x- und y-Koordinaten und eine Richtung als Attribut, sowie die Methoden <code>versetzen</code> und <code>drehen</code>. 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.
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.
<code>Form</code> ist also eine '''Oberklasse'' von <code>Dreieck</code> und <code>Rechteck</code>. <code>Quadrat</code> ist eine '''Unterklasse''' von <code>Rechteck</code>. (Also ist <code>Rechteck</code> wiederum '''Oberklasse''' von <code>Quadrat</code>.) Die Methoden müssen so nur einmal in <code>Form</code> implementiert werden, sind aber durch die Vererbung in allen Objektinstanzen verfügbar.


Das neue Implementierungsdiagramm sieht so aus:
Das neue Implementierungsdiagramm sieht so aus:
Zeile 26: Zeile 26:


== Methoden überschreiben ==
== Methoden überschreiben ==
Beim Überschreiben bekommen abgeleitete Klassen eine eigene Version mindestens einer Methode der Basisklasse.
Beim Überschreiben bekommen abgeleitete Klassen eine eigeneTitle:
Tags:
Format: standard
Image:  Version mindestens einer Methode der Basisklasse.


Betrachte das folgende Klassendiagramm mit einer Ober- und drei erbenden Unterklassen und die dazugehörige Implementierung.
Betrachte das folgende Klassendiagramm mit einer Ober- und drei erbenden Unterklassen und die dazugehörige Implementierung.