Cours BUT Info

TP 2 — Observable, observateurs et stratégie

Une roulette de casino : faire réagir des joueurs aux tirages avec Observable-Observateurs, puis varier les paris avec Stratégie — corrigé pas à pas depuis le fork du dépôt.

Objectifs et mise en place

Deux patrons à mettre en œuvre dans ce TP :

  1. Observable – Observateurs ;
  2. Stratégie.

L'objectif est de comprendre et retenir le principe de ces patrons et de savoir les appliquer de manière autonome.

Fork — créez une bifurcation du dépôt : une copie sur un dépôt distant qui vous appartient, sur laquelle vous pouvez modifier sans altérer l'original.

Clone — depuis IntelliJ : menu projet > Get from Version Control…, collez l'URL du dépôt, Clone — le projet s'ouvre directement dans l'IDE (Maven est déjà configuré).

Complétez — le dépôt fournit l'organisation en paquetages et une première base des classes : fr.univlille.iut.r304.roulette avec Roulette, Annonceur, Joueur, ObservateurDeRoulette et Main.

Le patron Observable-Observateurs, pour rappel

Un ou plusieurs observateurs s'inscrivent auprès d'un observable et sont avertis des événements qui se produisent sur lui : la méthode update() des observateurs est déclenchée par notifyObservers(). Le cours 2 détaille le patron dans son intégralité.

Une roulette de casino

On simule une table de roulette sans s'occuper des mises ni des gains :

  • 1 observable : une roulette qui sort un numéro au hasard entre 0 et 49 à chaque tour ;
  • 2 observateurs :
    • un annonceur qui affiche le numéro sorti sous la forme Annonceur : <numéro> ;
    • un joueur nommé Hal qui parie toujours sur le 42 et affiche Gagné ! ou Zut, perdu !.
---La roulette s'arrête---
Annonceur : 17
Hal : Zut, perdu !
---La roulette s'arrête---
Annonceur : 42
Hal : Gagné !
...

Deux réactions dans n'importe quel ordre

Une exécution où Hal réagirait avant que l'annonceur dise le numéro est tout aussi valable : les acteurs réagissent au numéro gagnant, l'ordre de parcours de la liste d'observateurs n'est pas imposé.

Pour appliquer le patron :

  • dans Roulette : encapsuler une liste d'observateurs et les notifier après chaque lancer (avec la méthode qui change l'état de l'observable) ;
  • dans l'interface ObservateurDeRoulette : la signature de méthode adéquate ;
  • dans les classes des observateurs : implémenter l'interface et écrire le code du scénario ;
  • dans Main : un scénario de 10 lancers — il ne devrait y avoir qu'une instruction dans la boucle !

Nouveaux joueurs, nouvelles stratégies

On ajoute d'autres joueurs : tous réagissent comme Hal (gagné/perdu), mais chacun a sa propre stratégie pour choisir son numéro :

  • Alice parie sur le 0 au 1ᵉʳ tour, le 1 au 2ᵉ tour, et ainsi de suite ;
  • Moussa alterne entre deux numéros : 20 et 10.

C'est le patron Stratégie : revoyez la conception, montrez l'UML pour validation, puis implémentez.

Le patron Stratégie appliqué à la roulette : chaque joueur détient sa propre stratégie de pari, interchangeable à l'exécution. Ajouter un joueur ou une stratégie n'en modifie aucune autre.

Martingale

Nouvelle stratégie : parier sur le même numéro que le dernier qui a été tiré (au 1ᵉʳ tour, on pariera sur 0). Proposez une conception, faites-la valider, implémentez-la.

Y a plus de saisons !

On simule cette fois le comportement d'animaux (et d'une enfant, et d'une vacancière) qui réagissent à la météo, celle-ci changeant aléatoirement :

MétéoSoleilPluieNuage
Enfantjoue dehorsjoue dans la boueobserve les nuages
Chatse prélasseregarde à l'intérieurse balade dans le jardin
Vacancièrebronzesort son parapluiejoue au molkky
Oiseauchantese réfugie dans l'arbremange dans l'herbe
---Météo : Pluie---
Un enfant joue dans la boue
Un chat regarde à la fenêtre
Une vacancière sort son parapluie
Un oiseau se réfugie dans l'arbre
...

À quel patron recourir ? Proposez l'UML, faites-le valider, implémentez.

Dernière mise à jour le

Sur cette page