Nehmen Sie die load()- und store()-Methode aus der Konto-Klasse
heraus und lagern ihn in einen PersistenceAspect aus.
Anforderungen an die Spieler-Klasse sind, dass sie einen Einsatz
abgeben kann ("getEinsatz()") und dafür eventuell einen Gewinn
erhält ("setGewinn()"). Formulieren Sie diese Forderungen in Form
eines Interfaces "RoulettePlayer" und liefern eine
Default-Implementierung dafür mit. Lassen Sie die Klasse "Player"
dieses Interface implementieren..
Legen Sie eine Klasse "GenericPlayer" an, die ebenfalls das
RoulettePlayer-Interface implentiert und die nötigen Konstruktoren
bereitstellt. Machen Sie diese Klasse über "declare parents" zur
Oberklasse von "Player". Rufen Sie in Player die Konstruktoren der
Oberklasse auf.
Führen Sie einen "SimplePlayerAspect" ein, der die
Implementierung von getEinsatz() austauscht - es sollen immer 20 Chips
auf "Impair" (ungerade Zahlen) gesetzt werden.
Ein weiterer Aspekt "RiskyPlayerAspect" tauscht ebenfalls die
getEinsatz()-Methode aus und setzt immer 10 Chips auf die Nummer 13.
Was müssen Sie tun, damit dieser Aspekt den "SimplePlayerAspect"
verdrängt.
Manche Spieler verdoppeln Ihren Einsatz, wenn Sie verloren haben,
solange, bis Sie gewinnen. Dann fangen Sie wieder von vorne an. Testen
Sie auch diese Strategie. Beachten Sie dabei, dass der
Höchsteinsatz 500 Cips beträgt.
Haben Sie noch die load()- und store()-Methode des
PersistenceAspects im Einsatz? Entfernen Sie die Exception, die diese
Methoden auslösen können. Fangen Sie sie jetzt über eine
"declare soft"-Anweisung ab.