Advice

Übungen zu Kapitel 5

  1. Legen Sie einen KontoAspect an. Falls das Konto überzogen wird, soll automatisch eine Exception ausgelöst werden.
  2. Protokollieren Sie alle aufgetretenen RuntimeException (inkl. davon abgeleiteter Exceptions) mit. Ermitteln Sie auch die Stelle, an der sie aufgetreten ist.
    Kleiner Tipp:
    Falls eine RuntimeException nicht abgefangen wird, bekommen Sie diese Exception nicht über den handler()-Pointcut mit (er wird ja nicht aufgerufen!). Probieren Sie es über den Konstruktor der RuntimeException-Klasse.
  3. Jedesmal, wenn der Kontostand geändert wird, soll er automatisch mit Hilfe der store()-Methode abgespeichert werden.
  4. Der Croupier darf jetzt zusätzlich neben dem Konto des Spielers die Hausbank verwalten, deren Grundkapital ebenfalls 5000 Chips beträgt. Lassen Sie den Computer die Rolle des Spielers übernehmen und 100 Runden Roulette spielen. Dabei soll der simulierte Spieler in jeder Runde 200 Chips auf "Pair" (gerade Zahl) setzen (bitte beachten: bei "0" gewinnt die Bank). Vergleichen Sie am Ende den Kontostand des Spielers mit dem der Hausbank. Was vermuten Sie, wer am Ende mehr in der Tasche hat?
  5. Wiederholen Sie den Simulationslauf aus der vorigen Aufgabe mehrere Male. Erhalten Sie jedesmal das gleiche Ergebnis?
  6. Wie oft müsste bei 100 Würfen "Pair" erscheinen? Schreiben Sie eine Testmethode dafür und überprüfen Sie damit Ihre Vermutung.
  7. Machen Sie den Zufall vorhersagbar: tauschen Sie die Implementierung der Random-Klasse mit Hilfe des around-Advices aus, so dass werfeKugel() nacheinander die Zahlen 0, 1, 2, ..., 36 zurückliefert.
  8. Starten Sie wieder Ihren Simulationslauf. Erhöhen Sie die Anzahl der Simulationen so weit, dass eine Überziehung des Kontos zu erwarten ist. Wird tatsächlich eine RuntimeExcpeption ausgelöst? Wie reagiert Ihre Anwendung auf diese Exception? Wird sie richtig behandelt?
  9. Verwenden Sie einen eigenen Sourcepfad "test" für die Testfälle und den TestAspect. Nehmen Sie "test" von der Compilierung aus (der Sourcepfad kann in Eclipse über "Project -> Properties" eingestellt werden) und starten Sie die Simulation erneut.
  10. Binden Sie den vorigen Test-Sourcepfad wieder mit in die Compilierung ein. Steuern Sie dieses Mal den Algorithmus für die Zufallszahlen über einen if-Pointcut. Führen Sie dazu eine Testing-Klasse mit der Methode isEnabled() ein, die true zurückliefert, wenn ein "testing"-Property gesetzt ist und den Wert "true" enthält.

    hier geht es zu den Lösungen...


letzte Änderung: 18. Januar 2005 von Oli B.