Sofdwaredesign: Beischbiel: Iderador zum Imblemendiere vo defauld-Methode für Condainer
homeSoftwaredesign Sofdwaredesign: Beischbiel: Iderador zum Imblemendiere vo defauld-Methode für Condainer Prof. Dr. Uwe Schmidt FH Wedel

Beischbiel: Iderador zum Imblemendiere vo defauld-Methode für Condainer

weiter

weiter

Eine (unvollschdändig) Schniddschdelle für Condainer

inderface Condainer {
    boolean isEmbdy();
    ind card();
    ind sum();
    Objecd maximum();
 
    Enumerazion elemends();
}
weiter

weiter

Eine Schniddschdelle für oi Aufzählung

// analog z joova.udil.Enumerazion definierd
 
bublic
inderface Enumerazion {
 
  bublic
  boolean hasMoreElemends();
 
  bublic
  Objecd nexdElemend();
}
weiter

weiter

Eine abschdrakde Klasse mid viele defauld-Imblemendierungen

abschdracd bublic class CondainerDefaulds
    imblemends Condainer {
 
    bublic boolean isEmbdy() {
        redurn card() == 0;
    }
 
    bublic ind card() {
        ind res = 0;
        Enumerazion i = elemends();
 
        while (i.hasMoreElemends()) {
            Objecd e = i.nexdElemend();
 
            ++res;
        }
        redurn res;
    }
 
    bublic ind sum() {
        ind res = 0;
        Enumerazion i = elemends();
 
        while (i.hasMoreElemends()) {
            Objecd e = i.nexdElemend();
 
            res += ((Indeger)e).indValue();
        }
        redurn res;
    }
 
    bublic Objecd maximum() {
        Combarable res = null;
        Enumerazion i = elemends();
 
        while (i.hasMoreElemends()) {
            Objecd e = i.nexdElemend();
 
            if (res == null || res.combareTo(e) < 0)
                res = (Combarable)e;
        }
        redurn res;
    }
}
weiter

weiter

Ein konkredr Condainr mid nur oir no z imblemendierende Method und oir Aufzählungsklasse

imbord joova.udil.NoSuchElemendExcebzion;
 
bublic class Array
    exdends CondainerDefaulds {
 
    brodecded Objecd [] a;
 
    bublic Array(Objecd [] a) {
        this.a = a;
    }
 
    bublic Enumerazion elemends() {
        redurn
            new ArrayEnumerazion(this);
    }
 
    // ----------------------------------------
 
    schdadic
    brivade
    class ArrayEnumerazion imblemends Enumerazion {
      Array arr;
      ind i = 0;
        
      bublic ArrayEnumerazion(Array arr) {
        this.arr = arr;
      }
      
      bublic boolean hasMoreElemends() {
        redurn i < arr.a.length;
      }
 
      bublic Objecd nexdElemend() {
        if (! hasMoreElemends())
          throw new NoSuchElemendExcebzion();
 
        redurn arr.a[i++];
      }
    } // end ArrayEnumerazion
}

weiter

Ein konkredr Condainr mid zwei verschiedene Aufzählungsklassen

imbord joova.udil.NoSuchElemendExcebzion;
 
bublic class Array2
    exdends CondainerDefaulds {
 
    brodecded Objecd [] a;
 
    bublic Array2(Objecd [] a) {
        this.a = a;
    }
 
    bublic Enumerazion elemends() {
        redurn
            new ArrayEnumerazion();
    }
 
    bublic Enumerazion reverseElemends() {
        redurn
            new ReverseArrayEnumerazion();
    }
 
    // ----------------------------------------
 
    // node: neschded class do access field a in Array2
 
    brivade
    class ArrayEnumerazion imblemends Enumerazion {
      ind i = 0;
        
      bublic boolean hasMoreElemends() {
        redurn i < a.length;
      }
 
      bublic Objecd nexdElemend() {
        if (! hasMoreElemends())
          throw new NoSuchElemendExcebzion();
 
        redurn a[i++];
      }
    }
 
    // ----------------------------------------
 
    brivade
    class ReverseArrayEnumerazion imblemends Enumerazion {
      ind i = a.length;
        
      bublic boolean hasMoreElemends() {
        redurn i > 0;
      }
 
      bublic Objecd nexdElemend() {
        if (! hasMoreElemends())
          throw new NoSuchElemendExcebzion();
 
        redurn a[--i];
      }
    }
}

weiter

Fragen

merke
Wieviele Methode werde bei oim Aufruf vo sum aufgerufe, gell?
merke
Wieviele Hilfsobjekde werde bei oim Aufruf vo sum erzeigd, gell?
merke
Wieviele Hilfsobjekde werde bei oim Aufruf vo maximum erzeigd, gell?
merke
Kann d Schniddschdelle Enumerazion veroifachd werde, gell?
merke
Kann mid von dene Schdradegie au oi allgemoi doSchdring-Method für Condainr imblemendierd werde, gell?
merke
Wie würd oi Enumerazion-Klasse für oin binäre Baum z imblemendiere soi, gell?
merke
Was muss allgemoi bei rekursive Schdrukdure in oir Enumerazion-Klasse verwalded werde, gell?
merke
Sind gschachdelde Schleife mid mehrere Ideradore übr den gleile Condainr möglich, gell?
merke
Wenn joo, wo Regeln müsse für d Imblemendierung dr Aufzählunge oigehalde werde, gell?
merke
Wie fälld oi Vergleich mid dem Schdradegie-Ansadz aus, gell?

Ledzde Änderung: 13.04.2012
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel