| 
 abstract 
public 
class List { 
  // ein Attribut 
  abstract 
  public 
  int len(); 
  //-------------------- 
  // ein Praedikat mit default-Implementierung 
  // --> abstrakte Klasse, nicht Interface 
  public 
  boolean isEmpty() { 
    return 
      len() == 0; 
  } 
  //-------------------- 
  // Selektor auf das 1. Element 
  // mit default-Implementierung 
  public 
  Object hd() { 
    return 
      at(0); 
  } 
  //-------------------- 
  // allgemeiner Selektor 
  abstract 
  public 
  Object at(int i); 
  //-------------------- 
  // veraendernde Methoden 
  // Kopf loeschen 
  abstract 
  public 
  List tl(); 
  //-------------------- 
  // Element anhaengen 
  abstract 
  public 
  List append(Object e); 
} 
 | 
    
| 
 public 
class ListAsJavaVector extends List { 
  protected 
  java.util.Vector v;  // <-- die Referenz 
  //-------------------- 
  public 
  ListAsJavaVector() { 
    v = new java.util.Vector(); 
  } 
  //-------------------- 
  public 
  int len() { 
    return 
      v.size(); 
  } 
  //-------------------- 
  // nur zur Laufzeitoptimierung 
  public 
  boolean isEmpty() { 
    return 
      v.isEmpty(); 
  } 
  //-------------------- 
  // nur zur Laufzeitoptimierung 
  public 
  Object hd() { 
    return 
      v.firstElement(); 
  } 
  //-------------------- 
  public 
  Object at(int i) { 
    return 
      v.elementAt(i); 
  } 
  //-------------------- 
  public 
  List tl() { 
    v.removeElementAt(0); 
    return 
      this; 
  } 
  //-------------------- 
  public 
  List append(Object e) { 
    v.addElement(e); 
    return 
      this; 
  } 
} 
 | 
    
| Letzte Änderung: 13.04.2012 | © Prof. Dr. Uwe Schmidt |