homedukeOOP mit Java: Summendatentypen und Ist-ein-Beziehungen Prof. Dr. Uwe Schmidt FH Wedel

Summendatentypen und Ist-ein-Beziehungen

weiter

weiter

Summendatentypen

Mit Hilfe von Vererbung kann aus zwei oder mehreren Datentypen (Klassen) ein Summendatentyp, repräsentiert durch eine Klassenhierarchie, konstruiert werden.


weiter

Klassenhierarchien

zur Modellierung von ist-ein-Beziehungen

weiter
merke
gemeinsame Eigenschaften einer Menge von Objekten werden in einer abstrakten Basisklasse zusammengefasst
merke
alle objektspezifischen Daten und Methoden kommen in konkrete Unterklassen
weiter

weiter

Beispiel

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;
  }
}
weiter

weiter

Verarbeitung

unabhängig von der konkreten Ausprägung der Objekte

Shape [] sl;
 
...
 
{
  double covered = 0.0;
  for (Shape a : sl) {
    covered += a.area();
  }
  ... ;
}
weiter
merke
Dieses Art der Verarbeitung basiert auf dem dynamischen Binden.
merke
Verarbeitung von Exemplaren aus unterschiedlichen Klassen mit den gleichen Methoden.
Häufig angewendet in Container-Klassen.
merke
Grund:
Einheitliche, in der Basisklasse festgelegte, Schnittstelle.
merke
Einfachstes interessantes Beispiel: Verkettete Listen
weiter

weiter

Diskriminanten

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 ...
}
merke
keine (Mehrweg-) Verzweigungen über instanceof Typabfragen,
dieses widerspricht dem OO-Ansatz.
merke
Modulare Erweiterbarkeit würde dadurch verhindert werden.
weiter

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel