Durée : 1 h
Attention ! Un
exercice peut perdre tout son intérêt pédagogique si les consignes pour cet
exercice ou pour les précédents n’ont pas été scrupuleusement respectées, étape
par étape.
BlueJ
est un environnement de développement de programmes Java destiné à
l'enseignement initial de la programmation. Il a été conçu et développé par
l'équipe BlueJ de l'université Monash de Melbourne, en Australie, et les
universités de Southern Denmark, Kent, et Deakin.
Pour plus d'informations se reporter à la page web de l’unité.
Le logiciel BlueJ et sa documentation sont en libre utilisation pour des usages non commerciaux.
Une
version française du tutoriel est également accessible.
BlueJ
tourne sous Windows, Linux, et sur toute plate-forme fournissant une machine
virtuelle Java. Le JDK doit être installé (pas seulement le JRE).
1. Démarrer BlueJ soit par la commande bluej & soit par le menu « Démarrer ».
2. Grâce au menu Projet/Ouvrir non-BlueJ…, chargez le projet shapes que vous venez de sauvegarder.
3. Un diagramme s'affiche dans la fenêtre principale de BlueJ. Il se compose de 4 rectangles : Canvas, Circle, Square, Triangle. Chacun de ces rectangles représente une classe. Cette ensemble de classes, avec les liens qui les unissent, constitue le projet shapes.
1.
Pour créer un objet d'une classe donnée, il faut que
cette classe soit activable, c'est-à-dire compilée. Sous BlueJ, les classes non
compilées apparaissent hachurées. Si donc la classe considérée apparaît
hachurée, commencer par la compiler : clic droit sur cette classe puis
choisir la fonction Compiler.
2. Compiler la classe Circle : celle-ci n’est plus hachurée. Mais elle n’est pas la seule ! La classe Canvas a elle aussi été compilée bien qu’on ne l’ait pas demandé : c’est parce-que la classe Circle utilise certains services offerts par la classe Canvas (pour l’affichage graphique) que BlueJ a automatiquement déterminé qu’il fallait aussi compiler la classe Canvas ; d’autre part, le fait que la classe Circle utilise la classe Canvas est matérialisé par la flèche en pointillé qui relie ces 2 classes.
3. Maintenant, après un clic droit sur la classe Circle, choisir new Circle(). Le système propose un nom d'instance par défaut : circle1. Le valider par OK. Un rectangle rouge apparaît dans le présentoir à objets : il représente l'objet circle1 qui vient d'être créé. circle1 est une instance de la classe Circle. Le cercle n’apparaît pas encore sur le dessin.
4. Exercice 2.1.3a : Créer un carré, puis un deuxième cercle.
Pour visualiser l'état d'un objet, activer le clic droit sur cet objet et choisir la fonction Inspecter. Si une valeur apparaît comme une flèche, elle indique une référence vers un autre objet ; la sélectionner puis cliquer sur Inspecter pour en voir le contenu. L’inspecteur d’objets ne permet aucune modification.
1. Après un clic droit sur l'objet circle1, choisir la méthode makeVisible. Le cercle (ou plutôt le disque) s'affiche dans une fenêtre séparée (regardez éventuellement dans la barre de tâches). A partir de maintenant, les 2 fenêtres doivent être visibles simultanément.
2. Faire
de même avec les 2 autres objets créés au 2.1.3.4. Pourquoi ne
voit-on pas les 3 formes dessinées ?
3. Exercice 2.1.5a : Invoquer (appeler) les méthodes moveRight et moveLeft un certain nombre de fois pour déplacer circle1 vers le centre de la fenêtre graphique (ces méthodes n’ayant aucun paramètre, on ne peut pas choisir la longueur du déplacement souhaité).
4. Invoquer la méthode moveHorizontal, spécifier comme paramètre la valeur 50, et valider par OK. Le cercle se déplace de 50 pixels vers la droite.
5. Exercice 2.1.5b : Utiliser la méthode moveHorizontal pour déplacer le cercle de 70 pixels vers la gauche.
6. La méthode moveHorizontal a un paramètre de type int, c'est-à-dire de type nombre entier relatif. D'autres méthodes peuvent avoir des paramètres d'autres types. Par exemple, la méthode changeColor a un paramètre de type String, c'est-à-dire de type chaîne de caractères (c-à-d mot ou phrase).
7. Exercice 2.1.5c : Invoquer la méthode changeColor avec le paramère "red" (guillemets compris!!). Que se passe-t-il ? Que se passe-t-il si le paramètre est fourni sans ses guillemets ? Que se passe-t-il si on spécifie une couleur inconnue, par exemple "rouge" ?
1. Lors du clic droit sur un objet, beaucoup de méthodes peuvent être disponibles. Pour savoir exactement ce que fait telle ou telle méthode, ou bien quel est le rôle de tel ou tel paramètre, il est possible de consulter une documentation extraite automatiquement du programme .java (si les bons commentaires y figurent, (voir cours 1.2 au VI.3). On a coutume de dire que cette documentation montre l’interface de la classe, alors que le programme .java en montre l’implémentation.
2. Exercice 2.1.6a : Double-cliquer sur la classe Circle et utiliser la liste déroulante en haut tout à fait à droite (texte rouge) pour choisir Interface plutôt que Implémentation. Lire la documentation et essayer de retrouver les correspondances avec le texte du programme .java. Poser des questions aux intervenants sur ce que vous ne comprenez pas.
3. Exercice
2.1.6b : Essayer toutes les méthodes fournies par les classes Circle, Square, et Triangle.
Attention ! Le fait de supprimer un objet n’efface pas son dessin dans
l’image.
La méthode erase() n’est
pas publique pour rester cohérent avec la méthode draw().
Pour consulter ou modifier le code source d'une classe, activer le clic droit sur cette classe (évitez la class Canvas pour le moment) et choisir la fonction Éditer (ou bien double-cliquer sur la classe).
Dès que le code source d'une classe est modifié :
o l'icône de cette classe dans la fenêtre principale BlueJ apparaît hachurée
o si une autre classe utilisait la classe modifiée, elle apparaît aussi hachurée.
o toutes les instances de cette classe sont supprimées du présentoir à objets dès la compilation
Parcourir cette classe en observant notamment
« l’indentation » (décalages vers la droite pour faire apparaître la
structure du programme), les commentaires sur les accolades fermantes (voir cours
1.2 au VI.1), et les mots private et public
pour indiquer ce qui accessible ou pas hors de la classe. On voit donc des
méthodes qui n’apparaissaient pas lorsqu’on cliquait sur le bouton droit. Notamment,
pourquoi les méthodes erase()
et draw() ne
sont-elles pas publiques ?
1. Une classe dont l'icône apparaît hachurée dans la fenêtre principale BlueJ n'est pas ou n'est plus opérationnelle. Pour le (re)devenir, il est nécessaire de (re)compiler cette classe. Pour compiler une classe, activer le clic droit sur cette classe et choisir la fonction Compiler :
o Tous les objets disparaissent du présentoir, ainsi que l’éventuelle fenêtre graphique.
o Si la compilation s'opère sans erreur, l'apparence hachurée de la classe disparaît.
o Si une erreur est détectée, l'icône de classe reste hachurée et l'éditeur s'ouvre automatiquement et indique l'emplacement et la nature de l'erreur. Pour obtenir de l'aide au sujet d'une erreur de compilation, cliquer sur le point d'interrogation situé à proximité du message d'erreur.
2. Exercice
2.1.8a : Editer le code source de la classe Circle et y changer la couleur par
défaut de "blue"
en "red", en
suivant les étapes suivantes :
o utiliser l'outil de recherche de l'éditeur [ bouton Chercher... ] pour trouver le mot blue
o dans l'instruction aColor="blue"; , remplacer "blue" par "red" ;
o sauvegarder le code source ainsi modifié [ menu Classe, choix Enregistrer ] ;
o fermer l'éditeur [ bouton Fermer ].
3. On peut remarquer que, la classe Circle ayant été modifiée, son icône dans le diagramme des classes apparaît maintenant hachurée. Recompilez cette classe et vérifiez son bon comportement.
4. Exercice
2.1.8b : Editer le code source de la classe Circle et, afin de simuler une faute de syntaxe, supprimer
un point-virgule quelque part. Recompiler et analyser le message
d'erreur. Corriger et recompiler. Faire de même en enlevant une lettre à aDiameter par exemple.
On peut remarquer dans le répertoire In101/Tp1
que chaque fichier source .java
qui a été compilé a donné lieu à un fichier binaire .class (le vérifier).
5. Exercice
2.1.8c : Editer le code source de la classe Circle pour ajouter une nouvelle procédure doubleSize() sur le modèle de changeSize(), qui double le diamètre du
cercle.
Un paramètre est-il toujours utile ?
Compiler. Tester.
Nota : le travail demandé doit être terminé, en séance ou, à défaut, hors séance.
1. Editer le code source de la classe Circle. Dans l'éditeur, passer du mode Implementation (menu rouge en haut à droite) au mode Interface. Quelles sont les informations du code source qu'on retrouve (ou pas) dans cette documentation automatiquement générée ?
2.
Si vous avez parcouru la méthode draw() de la classe Square par exemple, vous avez peut-être vu l’appel à Rectangle() ; mais à
quoi servent donc les 4 paramètres ? La réponse est dans la documentation,
mais il faut savoir dans quel paquetage (package) chercher ; ici, on voit
au début du fichier que seul le paquetage java.awt est importé. Soit vous cherchez java.awt.Rectangle
directement sur le site officiel ( http://java.sun.com/javase/6/docs/api/
), soit vous utilisez BlueJ, [menu Aide, choix Bibliothèques de classes java (en ligne)]
ou [menu Outils, choix Utiliser une classe de bibliothèque…] +
taper java.awt.Rectangle
dans la boîte puis la touche ENTRÉE. Ensuite, cliquer soit sur le [bouton Documentation
en ligne], soit sur un des constructeurs pour l’essayer !
NE PAS UTILISER google
car on tombe presqu’à chaque fois sur une ancienne version de java.
1. Sauvegarder le projet shapes [ menu Projet, choix Enregistrer ], le fermer [Projet / Fermer].
2. Regarder le répertoire In101/Tp1 et y faire éventuellement « le ménage » avant d’envoyer par mail à votre binôme tous les fichiers .java modifiés et le fichier bluej.pkg.
· Avez-vous bien fait TOUS les exercices, dans TOUTES leurs étapes ?
· Avez-vous compris TOUT ce que vous avez vu ? Sinon, demandez à un intervenant.
· Avez-vous expérimenté le « CodePad » [menu Voir, choix Voir Code Pad] ? Sinon, essayez !
· N’avez-vous pas d’idées d’autres modifications de méthodes que celles proposées ? Expérimentez-les.
· Lisez les compléments de cours (1.1 et 1.2) présents sur la page web de l’unité.
· Si vous avez fini avant l’heure, demandez aux intervenants si vous pouvez partir avant la fin du TP ou bien s’ils vous donnent un autre exercice à faire.
·
Sinon, terminez tout en travail personnel avant le
prochain tp.
Ce sujet a été
élaboré par Denis Bureau, d’après un sujet d’Albin Morelle.