OOP mit Java: Generische ADTs in Java bis Version 1.4 |
Object
Generics bis Java 1.4 nicht vorhanden erst ab Java 1.5 als Erweiterung
Lösung für Java < 1.5: 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();
}
}
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
}
|
einfache Umsetzung: Exemplare von
Object
werden gespeichert
|
|
keine Typüberprüfung zur Übersetzungszeit:
Es gibt nur eine Sorte Körbe, in diese passt immer alles, auch Äpfel und Birnen zusammen!! |
|
Ruby, Python und andere "dynamische" Sprachen implementieren
Container (nur) auf diese Weise.
|
|
Wie speichert man elementare Werte, z.B. ints?
Wrapper-Klassen: |
|
Upcasts (Aufwärts-Konversion) beim Einfügen von Elementen
Downcasts (Abwärts-Konversion) beim Auslesen von Elementen |
Letzte Änderung: 12.05.2014 | © Prof. Dr. Uwe Schmidt |