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:
-
Le modèle de la structure dans le diagramme de classe montre la classe
SimulationTurn
comme classe intérieure («inner class») de la classeBugBattle
. Expliquez exactement ce qu’est une classe intérieure et pourquoi elle est utile dans le cas présent. -
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 queActionListener
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). -
Quand vous créez la classe
BugBattle
selon les instructions de la spécification, WindowBuilder génère la méthodemain
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’interfaceRunnable
utilisé dans la méthodeinvokeLater
. Indice: regardez la page au sujet de la concurrence en Swing et les pages suivantes dans les tutoriels Java. Regardez aussi la documentation pourjava.awt.EventQueue
etjava.lang.Runnable
dans la documentation de l’ API standard Java.