homedukeOOP mit Java: Generische ADTs in Java bis Version 1.4 Prof. Dr. Uwe Schmidt FH Wedel

Generische ADTs in Java bis Version 1.4

weiter

weiter

Generische ADTs in Java mit Object

Generics bis Java 1.4 nicht vorhanden

erst ab Java 1.5 als Erweiterung

Lösung für Java < 1.5:
Eine Klasse für beliebige Objekte

public
abstract
class Stack {
 
  //--------------------
  // der Konstruktor
 
  public
  Stack() { }
 
  //--------------------
  // die Attribut-Funktionen
 
  public
  abstract
  boolean isEmpty();
 
  public
  abstract
  Object  top();                   // <-----
 
  //--------------------
  // die modifizierenden Funktionen
 
  public
  abstract
  Stack push(Object e);         // <-----
 
  public
  abstract
  Stack pop();
 
  //--------------------
  // die Vorbedingungen
 
  public
  boolean preTop() {
    return
      ! isEmpty();
  }
 
  public
  boolean prePop() {
    return
      ! isEmpty();
  }
}
 
weiter
merke
Die Deklaration von

GenStack push(Object e)

erlaubt es, mehrere Operationen zu verketten

s.push(...).push(...).push(...);

weiter

Eine Implementierung

class SimpleStack extends Stack{
 
  // die Datenfelder: nicht nach aussen sichtbar
 
  private
  Object [] a;                     // <-----
 
  private
  int i;
 
  //--------------------
  // der Konstruktor
 
  public
  SimpleStack() {
    super();                       // redundant
    a = new Object[20];            // <-----
    i = 0;
  }
 
  //--------------------
  // die Attribut-Funktionen
 
  public
  boolean isEmpty() {
    return
      i == 0;
  }
 
  public
  Object top() {                   // <-----
    return
      a[i-1];
  }
 
  //--------------------
  // die modifizierenden Funktionen
 
  public
  Stack push(Object e) {        // <-----
    a[i++] = e;
    return
      this;
  }
 
  public
  Stack pop() {
    a[--i] = null;
    return
      this;
  }
 
  // Vorbedingungen sind schon implementiert
}
weiter
merke
einfache Umsetzung: Exemplare von Object werden gespeichert
merke
keine Typüberprüfung zur Übersetzungszeit:

Es gibt nur eine Sorte Körbe, in diese passt immer alles, auch Äpfel und Birnen zusammen!!

merke
Ruby, Python und andere "dynamische" Sprachen implementieren Container (nur) auf diese Weise.
merke
Wie speichert man elementare Werte, z.B. ints?

Wrapper-Klassen:
elementare Werte werden in Klassen eingepackt, z.B. Integer.

merke
Upcasts (Aufwärts-Konversion) beim Einfügen von Elementen
Downcasts (Abwärts-Konversion) beim Auslesen von Elementen
weiter

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