Table of Contents

Etape 2 : "Reverse Engineering" & Intégration

L'objectif de cette séance est de savoir lire des diagrammes fournis et de savoir par analyse des modèles repérer les éléments importants des codes, pour les intégrer.

A l'issue de cette séance, un étudiant doit savoir se connecter à des codes existants en implémentant les interfaces données, et en utilisant judicieusement les classes “frontières” données.

Ces aspects, peut être pas en terme de code, seront abordés en examen.

Cette séance doit être réalisée en entier, sinon vous n'aurez pas les acquis attendus.

Des codes fonctionnels

Les codes simulant une machine vous sont donnés. Les seules parties qui vous interessent sont la classe FencingPiste qui définit une “machine” et l'interface MatchInterface que vous devrez implémenter pour gérer les matchs.

Voici le modèle qui décrit les classes FencingPiste et MatchInterface.

Voici les javadoc (tronqués pour cause de problèmes de chargement de fichier html dans cet environnement).

A Faire :

  • Comprenez brièvement ces modèles et les interfaces
  • Pour exécuter les codes :
    • Soit sous JCreator en récupérant l'archive puis constuire un projet JCreator
    • Soit “à la main”
      1. Sauvegarder le .jar dans un répertoire.
      2. Sauvegarder le .zip (exemple simple d'utilisation) dans le même répertoire.
      3. De-ziper le fichier d'exemple : unzip testPK.zip si besoin mais un double clique devrait suffire.
      4. Compilation de l'implémentation de l'interface :
        • javac -cp pistePK.jar pistePK/testPK/Match1.java 1)
      5. Compilation de la classe principale de test :
        • javac -cp .:pistePK.jar pistePK/testPK/TestPist.java
      6. Exécution de la classe principale de test :
        • java -cp .:pistePK.jar pistePK.testPK.TestPist
  • Chaque interface représente une machine. Dès qu'il y a une différence de 5 points entre 2 joueurs dans les 3 minutes, le joueur qui a le plus marqué a gagné. Puis pendant 2mn c'est le premier qui touche qui gagne. Enfin s'il y a toujours égalité, au validate, on tire au sort. … Pour modifier le nombre de points, comme nous n'avons pas la machine réelle, c'est vous qui cliquez sur addPoint.
    • Quand l'arbitre pense que c'est ok, il clique sur Validate. (Ne pas oublier de relancer le chrono si besoin).
    • Quand le round est terminé, par next, l'arbitre passe au round suivant. Chaque match se compose de 3 rounds.
    • Quand il n'y a plus de matchs, la “table” se met en attente.
  • puis passez aux exercices suivants.

Archive des codes livrés

Certains étudiants travaillent à présent avec eclipse, alors voici les codes sous forme d’archive de projet Eclipse en 1.6.

Retour sur l'interface de Match

Comme vous avez dû le constater la “FencingPiste” est fournie avec une interface MatchInterface, qui vous permet d'utiliser votre propre classe Match, il suffit pour cela qu'elle “implemente” l'interface.

Voici l'interface MatchInterface qui vous est fournie.

package pistePK;
 
/**
 * Cette interface est utilisée par les machines pour visualiser le nom des joueurs
 * et enregistrer le nom des gagnants
 * Bien sur, chaque système peut implémenter cette interface comme il le veut
 * En particulier pour retrouver le gagnant, et pas forcement avec seulement son nom.
 * @author blay
 */
public interface MatchInterface {
 
	/**
	 * Retourne le nom du joueur de gauche
	 * @return String
	 */
	public String getLeftPlayer();
 
 
	/**
	 * Retourne le nom du joueur de droite
	 * @return String
	 */
	String getRightPlayer();
 
 
	/**
	 * Enregistre le nom du joueur gagnant
	 * 
	 */
	void setWinner(String matchWinner);
 
}

Votre code ne correspond probablement pas exactement à l'interface de MatchInterface.Vous manipulez par exemple probablement des joueurs alors qu'ici seul le nom du joueur est demandé et utilisé! Cela ne signifie pas que vous devez changer le principe de votre classe mais que vous devez ajouter et implémenter les méthodes exigées par l'interface.

Vous devez donc adapter VOTRE CODE (et pas l'inverse, en général, on n'a pas le droit de modifier les codes fournis) pour qu'il implémente l'interface MatchInterface.

Rappel : Pour dire qu'une classe implémente une interface

public class Match implements MatchInterface {

Rappel : une classe qui implémente une interface doit implémenter toutes les méthodes définies par l'interface.

A Faire :

  • Modifier au niveau du code et du modèle (dans l'ordre qui vous convient) votre classe Match construite la semaine dernière pour qu'elle implémente l'interface.
  • Tester là.

Approche incrémentale

Votre objectif est de faire en sorte que que le code écrit à la dernière séance fasse maintenant référence aux machines qui vous ont été fournis.

A Faire :

  1. Commencez par créer une piste et tester pour être sûr que vous allez savoir l'intégrer dans votre propre algorithme.
  2. Par exemple, vous pouvez reprendre les codes de tests fournis à l'étape 1 du TD, Test..

Intégration : Lancement d'une compétition

A Faire :

Vous avez modélisé la semaine dernière une compétition. Vous devez à présent connecter une compétition aux pistes. Pour cela vous reprenez votre classe compétition…

Amusez vous !

1)
On pourrait faire mieux en sauvegardant les fichiers .class dans un autre répertoire, nous visons simplement à vous conduire à comprendre les codes.