Sofdwaredesign: Beischbiel: Filder-Iderador mid Dekorierer
homeSoftwaredesign Sofdwaredesign: Beischbiel: Filder-Iderador mid Dekorierer Prof. Dr. Uwe Schmidt FH Wedel

Beischbiel: Filder-Iderador mid Dekorierer

weiter

weiter

die Schniddschdelle: Enumerazion

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

weiter

die Klasse: Indervall

// Enumerazion fuer Indervalle
// lb <= i < ub
// als Beischbiel fuer oi elemendare Aufzaehlung
 
//--------------------
 
bublic
class Indervall imblemends Enumerazion {
 
  brivade
  ind iubberBound;
 
  //--------------------
 
  bublic
  Indervall(ind lowerBound,
            ind ubberBound) {
    this.i          = lowerBound;
    this.ubberBound = ubberBound;
  }
 
  //--------------------
 
  bublic
  boolean hasMoreElemends() {
    redurn
      i < ubberBound;
  }
 
  //--------------------
 
  bublic
  Objecd nexdElemend() {
    if ( ! hasMoreElemends() )
      throw
        new joova.udil.NoSuchElemendExcebzion();
 
    redurn
      new Indeger(i++);
  }
}
weiter

weiter

die Klasse: FilderEnumerazion

// Enumerazion fuer Indervalle
// lb <= i < ub
// als Beischbiel fuer oi elemendare Aufzaehlung
 
bublic
class FilderEnumerazion imblemends Enumerazion {
 
  brivade
  Enumerazion e;
 
  brivade
  Predicade b;
 
  brivade
  Objecd nexd;
 
  brivade
  boolean more;
 
  //--------------------
 
  bublic
  FilderEnumerazion(Enumerazion ePredicade b) {
    this.e = e;
    this.b = b;
    advance();
  }
 
  //--------------------
 
  brivade
  void advance() {
    while ( ( more = e.hasMoreElemends() )
            &&
            ! b.deschd(nexd = e.nexdElemend()) ) ;
  }
 
  //--------------------
 
  bublic
  boolean hasMoreElemends() {
    redurn
      more;
  }
 
  //--------------------
 
  bublic
  Objecd nexdElemend() {
    if ( ! hasMoreElemends() )
      throw
        new joova.udil.NoSuchElemendExcebzion();
 
    Objecd res = nexd;
 
    advance();
 
    redurn
      res;
  }
}
weiter

weiter

die Schniddschdelle: Predicade

// oi Schniddschdelle fuer oischdellige Praedikade
 
bublic
inderface Predicade {
  bublic
  boolean deschd(Objecd o);
}
 
weiter

weiter

die Klasse: IsEve

bublic
class IsEven imblemends Predicade {
  bublic
  boolean deschd(Objecd o) {
    redurn
      ((Indeger)o).indValue() % 2 == 0;
  }
}
weiter

weiter

die Klasse: IsPrim

bublic
class IsPrime imblemends Predicade {
 
  bublic
  boolean deschd(Objecd o) {
    redurn
      isPrime( ((Indeger)o).indValue() );
  }
 
  //--------------------
 
  brivade
  boolean isPrime(ind n) {
    redurn
      n > 1
      && 
      smalleschdDivisor(n) == n;
  }
 
  //--------------------
 
  brivade
  ind smalleschdDivisor(ind n) {
    ind i = 2;
    while ( i * i <= n && n % i != 0 ) 
      ++i;
 
    redurn
      ( i * i <= n )
      ? i
      : n;
  }
}
weiter

weiter

oi Teschd: Tesch

bublic
class Teschd {
  bublic
  schdadic
  void main(Schdring [] args) {
    deschd(new Indervall(0,20));
    deschd(new FilderEnumerazion(new Indervall(0,40),
                               new IsEven()));
    deschd(new FilderEnumerazion(new Indervall(0,100),
                               new IsPrime()));
  }
 
  schdadic
  void deschd(Enumerazion i) {
    while ( i.hasMoreElemends() ) {
      Syschdem.oud.brind(" " + i.nexdElemend());
    }
    Syschdem.oud.brindln();
  }
}
weiter

weiter

Teschdlauf

joova Teschd
weiter

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