Advice

Lösungen zu Kapitel 5

  1. siehe src/casino/KontoAspect.aj
  2. siehe src/casino/LogAspect.aj:
    pointcut handleExceptions() :
    handler(Exception+);

    before() : handleExceptions() {
    Signature sig = thisJoinPoint.getSignature();
    log.warn(sig + " in " + thisJoinPoint.getThis());
    }

    after() : call(public RuntimeException+.new(..)) {
    Signature sig = thisJoinPoint.getSignature();
    log.error(sig.getDeclaringTypeName() + " aufgetreten in "
    + thisJoinPoint.getSourceLocation());
    }
  3. siehe src/casino/KontoAspect.aj:
    after(Konto kto) :
    set(private int Konto.kontostand)
    && this(kto) {
    try {
    kto.store();
    } catch (IOException e) {
    System.err.println("kann Konto " + kto + " nicht abspeichern");
    }
    }
  4. siehe src/casino/Croupier.java und Player.java; für den Einsatz gibt es eine eigene Klasse in src/casino/Einsatz.java, die den Einsatz für "Pair" (und andere Felder) entgegennimmt. Zum Testen einfach die Croupier-Klasse starten.
  5. Die Ergebnisse sind dabei recht unterschiedlich (klar, es ist ein Glücksspiel). Rein statistisch gesehen liegen die Chancen für Pair bei 48,6%, d.h. die Bank gewinnt öfters.
  6. Wenn die Chancen für Pair bei 48,6% liegen, müsste bei 100 Würfen 49 mal Pair erscheinen (siehe Testmethode "testStatisticOfPair()" in test/casino/RouletteTest.java)
  7. siehe test/casino/test/TestAspect.aj:
    static int zufall = 0;
    int around(int n) :
    call(public int java.util.Random.nextInt(int))
    && args(n)
    && within(casino.Roulette) {
    return zufall++ % n;
    }
  8. nach 854 Spielen ist der Spieler pleite, siehe testBankrott()-Methode in test/casino/PlayerTest.java
  9. Jetzt können Sie zwar keine Test-Klassen mehr starten, dafür ist aber beim Start von Croupier.main() wieder alles dem Zufall überlassen.
  10. siehe test/casino/test/Testing.java; zum Testen die Anwendung mit der Option "-Dtesting=true" aufrufen oder in Eclipse in der Run-Konfiguration (erreichbar über "Run -> Run...") diese Option als "VM arguements" (zu finden unter dem Reiter "Arguments") angeben.

letzte Änderung: 17. Jan. 2005