TD-01, Zéro-Un




Ce document est disponible à l'URL http://www.enseignement.polytechnique.fr/profs/informatique/Luc.Maranget/TC/TD-01/index.html

1 Argument
Le but de cette séance est de découvrir la boucle de développement d'un programme Java. À savoir, édition (par Emacs), compilation (par la commande javac) et exécution (par la commande java). Les programmes étant rarement exempts d'erreurs, cette boucle est itérée de nombreuses fois dans une séance. Dès lors, savoir utiliser les outils accélère les choses.

En cas de problème Unix, se référer aux chargés de TP, aux premières sections du TP précedent, ou au document Unix de base Pour pouvoir faire ce TD, il y a juste quelques notions à connaître.

Ceux qui se sentent à l'aise avec Unix et Emacs peuvent aller rapidement à la section 3 et commencer les exercices proprement programmatoires.

2 Compilation et exécution de programmes Java
Il s'agit de se raffraichir un peu la mémoire.

Les programmes Java sont contenus dans un fichier d'extension .java, comme par exemple Hello.java.

On compile Hello.java par la commande javac Hello.java. La compilation produit un fichier Hello.class. On exécute ensuite le programme par la commande java Hello. En termes informatiques Hello.java est le source du programme, tandis que Hello.class en est le code objet.

Petit exercice 1 : Récupérer (Bouton de droite !), compiler et exécuter le programme Hello.java (inutile de chercher à le comprendre à ce stade). N'oubliez pas de vous faciliter la vie en utilisant Control-p (commande précédente), Control-n (commande suivante), Tab (complétion automatique) etc. (édition de la ligne de commande) dans la fenêtre de commande, au lieu de tout retaper.

Pas de solution, pour cet exercice facile.

3 Édition de fichiers
Pour créer, puis modifier un fichier on utilise l'éditeur de texte Emacs, décrit lors du TP-précedent, et documenté par le mode d'emploi raisonné d'Emacs.

Outre qu'il est indispensable d'éditer les programmes, l'utilisation d'Emacs offre l'avantage de permettre de bien présenter ses programmes, à condition que le fichier aie l'extension .java.

Un bon entraînement est encore de vous fournir un programme qui ne compile pas : Bug.java. Une tentative de compiler Bug.java échoue :
maranget@manche ~/TD/TD-01 > javac Bug.java
Bug.java:4: ';' expected.
    System.out.println("je suis buggé !")
                                          ^
1 error
Le compilateur Java signale une erreur à la quatrième ligne du programme et refuse de produire Bug.class :
maranget@manche ~/TD/TD-01 > ls
Bug.java     Hello.class  Hello.java
Pour corriger Bug.java, il est à peine utile de connaître Java, car le message du compilateur est assez explicite. Disons tout de même que les programmes simples que vous écrirez auront la même structure. Ils se composeront d'une classe unique (ici Bug) qui contiendra des fonctions (des méthodes statiques de la classe en terminologie Java, introduites par le mot-clé static). La fonction main devra toujours être présente et visible de tous (mot-clé public). Elle ne renvoie aucun résultat (mot-clé void) et prend un argument (ici appelé args), de type tableau de chaîne (type String []), ouf.

Petit exercice 2 : Corriger Bug.java à partir du message d'erreur du compilateur et avec Emacs, jusqu'à réussir à le compiler. Ensuite tenter de l'exécuter, il y a une deuxième erreur ! La corriger, compiler, exécuter. Bon, voici une solution.

3.1 Utilisation vraiment avancée
Il est facile de trouver la quatrième ligne du fichier Bug.java qui compte six lignes. Dans des programmes qui comptent plus de lignes cette opération est malcommode. Heureusement on peut faire faire ce travail par Emacs. Il faut toutefois au préalable (et je le regrette, croyez moi), configurer un peu emacs. Il suffit de mettre ce fichier .emacs dans votre répertoire personnel et pas ailleurs.

Si vous avez déjà un fichier .emacs et que vous savez vous débrouiller avec, c'est la ligne
(global-set-key "\C-x\C-x" 'compile)
Qui est à mettre à la fin de votre .emacs. Sinon, remplacer votre .emacs par le nôtre.

Ensuite lancez Emacs sur le source de Bug.java :
maranget@manche ~/TD/TD-01 > emacs Bug.java &
Une fenêtre apparaît.

Dans cette fenêtre, tapez Control-x Control-x. vous obtenez quelque chose de ce genre :



Éditez la commande de compilation pour mettre la vôtre à la place :



Puis tapez la touche Return. La compilation se lance, et échoue :



Vous pouvez maintenant toucher le bénéfice de toutes ces opérations en tapant Control-x ` (accent grave). Le curseur se positionne tout seul à l'endroit de l'erreur :


Vous pouvez ensuite corriger l'erreur directement. Si il y a d'autres erreurs, Control-x ` vous positionnera ensuite sur l'erreur suivante.

Petit exercice 3 : Compiler l'autre programme buggé Tri.java. Ce programme est le tri sélection d'un tableau d'entiers pris au hasard. Solution.

Petit exercice 4 : Le programme Tri.java est vraiment buggé. En fait, il plante, par un accès hors-limite dans un tableau. Tenter de comprendre le programme et de le corriger pour qu'il trie bien. Attention, il y a en fait deux erreurs qui sont toutes deux dans la méthode trier. Pour comprendre un peu ce qui se passe, outre votre intuition, vous disposez de quelques informations sur les boucles et les tableaux en Java. Solution.

4 Graphique en Java
La MacLib de Philippe Chassignet fournit une interface graphique du style de celle que l'on trouvait sur les macintosh de l'époque héroïque. Bizarrement, ce style d'interface est réputé plus facile d'emploi pour un débutant que celui fourni directement par Java. La MacLib est documentée par le poly et par une documentation complète dans le plus pur style Java.

Petit exercice 5 : Le programme Rectangle.java, permet de dessiner des rectangles. À l'aide de la petite description de la MacLib du poly ou des morceaux de Java, vous pouvez facilement changer ce programme pour qu'il dessine des ovales, sans même comprendre le programme. La solution est un programme Ovale.java.

(Notez que le programme Rectangle.java est une boucle infinie, pour en sortir il faut tuer le l'invocation java Rectange par Control-c.)

Petit exercice 6 : Changer le programme Rectangle.java pour cette fois dessiner des carrés. Là, il faut sans doute comprendre un peu ce qui se passe à l'aide de la documentation complète et c'est plus dur. La solution est un programme Carre.java.

5 Le courrier éléctronique
Si vous ne le savez pas déjà, voici comment envoyer un courrier. Il y a (au moins) deux façons de procéder : Je pense que la première solution est la meilleure, mais vous êtes libres. Avant de procéder, lisez la documentation sur le courrier.

6 Ce TP est vraiment trop facile
Pas grave, tous les TP des années  99 et 98 sont disponibles, je recommande particulièrement l'affichage en base deux et l'énumération des sous-ensembles de taille p.
Dernière modification : 2002-11-27

Ce document a été traduit de LATEX par HEVEA.