Aller au contenu

Atelier 08

Dans cette séance de laboratoire, vous allez mettre en pratique l’implémentation de deux patrons de conception : le « patron composite » et le « patron commande ».

Préparation

Avant de commencer, je vous présente le contexte. Vous allez implémenter une mini-application de dessin pour illustrer des figures simples dans le terminal.

Nous voulons pouvoir définir des figures plus complexes à partir d’éléments primitifs, et pouvoir déplacer facilement ces figures tout en prenant en charge un historique de commandes.

Pour ce faire, vous utiliserez deux patrons de conception :

  • Le patron composite, pour définir une structure imbriquée de composants dessinables.
  • Le patron commande, pour assurer un déplacement fiable et successif des figures et de leurs éléments.

Récupérer le code

  • Créez un nouveau projet Java.
  • Ajoutez deux packages : model et command
  • Téléchargez les fichiers suivants et ajoutez-les aux emplacements correspondants :
fichier chemin
Board.java src/model/Board.java
Component.java src/model/Component.java
Command.java src/control/Command.java
Direction.java src/control/Direction.java
CommandPatternLauncher.java src/control/CommandPatternLauncher.java
ComponentPatternLauncher.java src/control/ComponentPatternLauncher.java

Votre projet devrait maintenant ressembler à ceci :

src
├── command
│   ├── Command.java
│   └── Direction.java
├── CommandPatternLauncher.java
├── ComponentPatternLauncher.java
└── model
    ├── Board.java
    └── Component.java

Patron composite

Dans ce premier exercice, votre tâche est de faire fonctionner ComponentPatternLauncher.

Pour résumer, cette classe fera ce qui suit :

  1. Créer un nouveau carré (constitué de 4 x).
x x
x x
  1. Déplacer le carré.
      x x
      x x
  1. Créer un nouveau triangle (constitué de 3 x).
    x    
   x x   

      x x
      x x
  1. Déplacer le carré.
       x 
      x x
      x x
  1. Grouper le carré et le triangle pour former une "maison", et déplacer la maison.
  x      
 x x     
 x x     

À vous de jouer

Créez de nouvelles classes pour compléter le patron Composite, afin que le launcher fourni fonctionne et affiche le résultat attendu. Ne modifiez pas le launcher.

Patron commande

Le code précédent fonctionnait, mais ne permettait pas d’annuler (ou de rétablir) les actions. La plupart des programmes interactifs maintiennent un historique des commandes exécutées, pour faciliter la correction des choix. CommandPatternLauncher imite ce principe en représentant toutes les actions via des objets Command, qui :

  • Garantissent le respect des règles (nous stipulons qu’une figure ne peut être déplacée qu’un champ adjacent à la fois).
  • Permettent de revenir facilement sur les actions précédemment exécutées.

Plus en détail, le code fourni fait ce qui suit, en utilisant des commandes dédiées :

  1. Créer une nouvelle figure carrée
 x x     
 x x     
  1. Déplacer le carré d’un champ adjacent vers le bas.
 x x     
 x x     
  1. Annuler la dernière commande.
 x x     
 x x     
  1. Rétablir la dernière commande.
 x x     
 x x     
  1. Ajouter un triangle en tant que composant séparé (superposition).
   x     
  x x    
  x x    
  1. Grouper le carré et le triangle pour former une maison.
  x      
 x x     
 x x     
  1. Déplacer la maison entière vers la droite.
   x     
  x x    
  x x    
  1. Annuler la dernière commande (déplacement).
  x      
 x x     
 x x     

À vous de jouer

Implémentez les commandes requises. Pour le déplacement, vous pouvez définir une commande unique qui reçoit une Direction en argument du constructeur.
Vérifiez que votre code affiche le résultat attendu. Ne modifiez pas le launcher.