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 (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: 23.05.2011
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel