homeSoftwaredesign Softwaredesign: Beispiel: Funktionen Prof. Dr. Uwe Schmidt FH Wedel

Beispiel: Funktionen

weiter

weiter

Die Schnittstelle für einstellige Funktionen: Function

interface Function {
  int at(int x);
}
weiter

weiter

Die Klasse für die Fakultätsfunktion: Factorial

public
class Factorial implements Function {
 
  public
  int at(int x) {
    int res = 1;
    
    while ( x > 0 ) {
      res *= x;
      --x;
    }
    
    return
      res;
  }
}
 
weiter

weiter

Die Cache-Klasse: FunctionCache

public
class FunctionCache implements Function {
 
  protected
  Function f;
 
  protected
  Map values;
  
  public
  FunctionCache(Function f) {
    this.f = f;
    values = new Map();
  }
 
  public
  int at(int x) {
    if ( values.isIn(x) ) {
      return
        values.at(x);     // use cached result
    } else {
      int y = f.at(x);    // compute result
 
      values.insert(x,y)// insert result into cache
 
      return y;
    }
  }
}
weiter

weiter

Ein Test

class Test {
  void foo() {
 
    // cached version of factorial
    Function  fac =
      new FunctionCache(new Factorial());
 
    fac.at(42);
    fac.at(42);
    fac.at(43);
  }
}
weiter

weiter

2. Beispiel: Die Klasse für die Fibonacci-Zahlen

public
class Fibonacci implements Function {
 
  public
  int at(int x) {
    return
      (x <= 1) ? x : at(x-1) + at(x-2);
  }
}
 
weiter

weiter

Ein 2. Test

class Test2 {
  void foo() {
 
    Function  fib =
      new FunctionCache(new Fibonacci());
 
    fib.at(42);
    fib.at(41);
    fib.at(43);
  }
}
weiter

weiter

2. Beispiel: Die Klasse für die Fibonacci-Zahlen mit Cache

public
class FibonacciCache implements Function {
  Function cache;
 
  public FibonacciCache() {
    cache = new FunctionCache(this);
  }
 
  public
  int at(int x) {
    return
      (x <= 1) ? x : cache.at(x-1) + cache.at(x-2);
  }
}
 
weiter

weiter

Ein 3. Test

class Test3 {
  void foo() {
 
    Function fib =
      new FibonacciCache();
 
    fib.at(42);
    fib.at(41);
    fib.at(43);
  }
}
weiter

weiter

3. Beispiel: Die Klasse für die Fibonacci-Zahlen mit vollständigem Cache

public
class FibonacciCache2 implements Function {
  Function cache;
 
  public FibonacciCache2() {
    cache = new FunctionCache(new Fibo());
  }
 
  public
  int at(int x) {
    return
      cache.at(x);
  }
  
  private
  class Fibo implements Function {
    public
    int at(int x) {
      return
        (x <= 1) ? x : cache.at(x-1) + cache.at(x-2);
    }
  }
}
 
weiter

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