Labo 3 • BugBattle version 0.1

GEF320 Hiver 2016

Objectif

L'objectif de ce laboratoire est de pratiquer la compréhension des diagrammes de classe et diagrammes de séquence en UML, et leurs traductions en Java. Pour achever cet objectif, vous implémenterez une version initiale du logiciel BugBattle selon le design documenté dans la Spécification de Design pour BugBattle v0.1.

Remise et date d’échéance

Vous devez remettre votre rapport de laboratoire et le code source par courriel avant le début du prochain laboratoire. Veuillez remettre:

  • un fichier .zip contenant votre code source avec commentaires, exporté selon les instructions dans le guide de survie d'Eclipse; et
  • un rapport de laboratoire concis, dans le format du laboratoire, comme fichier PDF, qui contient:
    • une introduction;
    • vos réponses aux questions ci-dessous; et
    • une brève discussion sur ce que vous avez appris, les découvertes que vous avez faites, ce qui a été difficile dans le laboratoire. Soyez concis!

Tâches

Lisez attentivement le Spécification de BugBattle v0.1. Implémentez BugBattle v0.1 en suivant les diagrammes de paquet, classe et séquence et les descriptions des méthodes données.

Questions

Répondez aux questions suivantes dans votre rapport de laboratoire:

  1. Le modèle de la structure dans le diagramme de classe montre la classe SimulationTurn comme classe intérieure («inner class») de la classe BugBattle. Expliquez exactement ce qu’est une classe intérieure et pourquoi elle est utile dans le cas présent.

  2. Quand vous créez la classe BugBattle et ajoutez le bouton «Start» et l'ActionListener associé tel que décrit dans la spécification, WindowBuilder génère du code semblable à celui-ci:

    btnStart = new JButton("Start");
    btnStart.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent arg0) {
     }
    });
    btnStart.setBounds(230, 6, 75, 29);
    frmBugBattle.getContentPane().add(btnStart);

    Sur la deuxième ligne, vous voyez new ActionListener()... malgré le fait que ActionListener soit une interface et qu'il ne soit pas possible d'instancier les interfaces. Que ce passe-t'il donc exactement ici? Indice: regardez la page General Information about Writing Event Listeners dans les tutoriels Java, surtout la section sur les classes internes et classes internes anonymes (Classes and Anonymous Inner Classes).

  3. Quand vous créez la classe BugBattle selon les instructions de la spécification, WindowBuilder génère la méthode main suivante:

    public static void main(String[] args) {
     EventQueue.invokeLater(new Runnable() {
       public void run() {
         try {
           BugBattle window = new BugBattle();
           window.frmBugBattle.setVisible(true);
         } catch (Exception e) {
           e.printStackTrace();
         }
       }
     } 
    });

    Expliquez de façon précise le fonctionnement de la méthode EventQueue.invokeLater(). Dans votre explication, vous devez inclure les rôles de l'EventQueue de l'AWT et de l'interface Runnable utilisé dans la méthode invokeLater. Indice: regardez la page au sujet de la concurrence en Swing et les pages suivantes dans les tutoriels Java. Regardez aussi la documentation pour java.awt.EventQueue et java.lang.Runnable dans la documentation de l' API standard Java.