OOP mit Java: Summendatentypen und Ist-ein-Beziehungen |
Mit Hilfe von Vererbung kann aus zwei oder mehreren Datentypen (Klassen) ein Summendatentyp, repräsentiert durch eine Klassenhierarchie, konstruiert werden.
|
zur Modellierung von ist-ein-Beziehungen |
gemeinsame Eigenschaften einer Menge von Objekten werden in
einer abstrakten Basisklasse zusammengefasst
|
|
alle objektspezifischen Daten und Methoden kommen in konkrete
Unterklassen
|
eine abstrakte Klasse und zwei konkrete Unterklassen abstract
public
class Shape {
abstract
public
double area();
}
die 1. konkrete Unterklasse class Square
extends Shape {
private
double size;
public
double area() {
return
size * size;
}
}
die 2. konkrete Unterklasse class Circle
extends Shape {
private
double r;
public
double area() {
return
Math.PI * r * r;
}
}
|
unabhängig von der konkreten Ausprägung der Objekte Shape [] sl;
...
{
double covered = 0.0;
for (Shape a : sl) {
covered += a.area();
}
... ;
}
|
Dieses Art der Verarbeitung basiert auf dem dynamischen Binden.
|
|
Verarbeitung von Exemplaren aus unterschiedlichen Klassen
mit den gleichen Methoden.
Häufig angewendet in Container-Klassen. |
|
Grund:
Einheitliche, in der Basisklasse festgelegte, Schnittstelle. |
|
Einfachstes interessantes Beispiel: Verkettete Listen
|
Zur Unterscheidung der Werte eines Summendatentyps gibt es die Möglichkeit, zur Laufzeit zu erfragen, von welchem Typ ein Objekt ist. Shape s = ...;
if (s instanceof Square) { ... }
if (s instanceof Circle) { ... }
Typisches Code-Muster Shape s;
if (s instanceof Square) {
Square sq = (Square)s;
// Verwendung von Square spezifischen
// Methoden und Variablen
... sq ...
}
|
keine (Mehrweg-) Verzweigungen über instanceof
Typabfragen,
dieses widerspricht dem OO-Ansatz. |
|
Modulare Erweiterbarkeit würde dadurch verhindert werden.
|
Letzte Änderung: 14.02.2012 | © Prof. Dr. Uwe Schmidt |