IN101 : Sujet du TP7
Groupe ESIEE, Denis BUREAU, janvier 2006.
Attention ! Le sujet peut être modifié jusqu'à la veille du TP.

1  Les objectifs

Être capable d'appliquer aux exercices des TP précédents les notions vues lors du cours 7 (exceptions, applications, applettes).
Attention ! Lire les énoncés en détail, chaque mot compte ...
Consulter abondamment la javadoc des différentes classes et méthodes utilisées.

2  Matrice


    v0 : Terminer l'exercice du TP6 si ce n'est pas déjà fait, et utiliser la classe de test fournie pour vérifier que votre classe respecte toutes les spécifications (notamment commencer à 1 et non à 0).
    Écrire ensuite successivement chaque version ci-dessous pour comprendre progressivement l'intérêt de chaque notion introduite.
    v1 : Transformer la méthode essai() en méthode main() (avec la syntaxe imposée).
    L'essayer dans BlueJ.
    Ouvrir une fenêtre terminal, aller dans le répertoire dans lequel se trouve le fichier Matrice.class, puis taper java Matrice
    v2 : Ajouter la gestion des arguments de la ligne de commande comme suit :
    - S'il y a moins d'un argument, afficher un message et sortir par un simple return;
    - S'il y a plus d'un argument, afficher Trop d'arguments : arg2 arg3 arg4 ignores
    - Déclarer un entier taille et lui affecter la conversion en entier du premier argument de la ligne de commande (voir la classe Integer).
    - Utiliser ensuite taille plutôt que 20.
    - Essayer sous BlueJ en tapant chaque argument sous forme de String et séparés par des virgules.
    - Essayer dans la fenêtre terminal en tapant simplement les arguments séparés par des espaces.
    Que se passe-t-il si le premier argument est par exemple "probleme" ?
    v3 : Pour résoudre ce problème, ajouter la gestion de l'exception qui est lancée (voir la javadoc pour savoir laquelle).
    - D'abord fermer le projet BlueJ puis fermer BlueJ.
    - Lancer un éditeur de texte en tapant par exemple : nedit Matrice.java &
    - Ajouter le traitement de l'exception évoquée ci-dessus, qui consistera simplement à afficher un message signalant que le premier argument n'est pas un entier.
    - Compiler par la commande javac Matrice.java, puis essayer le programme par la commande java Matrice avec comme argument probleme puis 20
    Que se passe-t-il si le nombre est négatif par exemple ?
    v4 : Pour résoudre ce problème, il faut vérifier au début de la méthode initMat() si la valeur de son paramètre est bien comprise entre 1 et par exemple 100. Dans le cas contraire, il faut lancer une exception avec un message informant de la raison de l'exception et précisant la valeur du paramètre en cause. Dans un premier temps, comme aucun nom d'exception ne convient à ce cas précis, nous choisirons la classe générale Exception.
    Comment résoudre l'erreur de compilation détectée dans la méthode initMat() ?
    Corriger et recompiler.
    Comment résoudre maintenant l'erreur de compilation détectée dans la méthode main() ?
    v5 : Nous avons maintenant un programme qui détecte les exceptions, mais que se passe-t-il si nous introduisons par inattention une erreur telle que <= au lieu de < dans la condition de boucle de la méthode initMat() ? Le message n'est pas très informatif ... (le vérifier).
    Il faudrait au moins afficher le nom de l'exception, mais dans ce cas, le message prévu à la v4 serait moins agréable. La solution est de créer notre propre classe d'exception et de laisser Exception pour les "autres" exceptions. Pour cela :
    - Créer une nouvelle classe BadValueException héritant de Exception.
    - Prévoir 3 attributs entiers bad, min, et max.
    - Écrire un constructeur à 3 paramètres.
    - Écrire les 3 accesseurs.
    - Redéfinir la méthode getMessage() pour qu'elle retourne le même message que la v4 en le recomposant à partir des valeurs des 3 attributs.
    - Modifier initMat() en conséquence.
    - Ajouter au bon endroit dans main() un 3ème cas d'exception et améliorer l'affichage dans le cas le plus général (que nous ne trouvions pas très informatif).
    v6 : Nous avons maintenant un programme qui détecte bien les exceptions, mais qui se contente d'afficher un message même dans les cas où il serait peut-être possible de corriger le problème et de continuer à exécuter la suite du programme.
    Nous allons en profiter pour apprendre à saisir des données au clavier sans utiliser de fenêtre graphique.
    Dans le traitement de l'exception n'est pas un entier, ajouter après l'affichage du message l'algorithme décrit dans le premier cadre en vous aidant des explications données dans le deuxième cadre.
      
    - Déclarer et créer un Scanner du clavier (*1) et un booléen ok.
    - REPETER
    - Afficher un message prévenant l'utilisateur qu'il va devoir saisir un entier
    - ok <--- un entier a-t-il été saisi ? (*2)
    - SI ok
    -- ALORS taille <--- l'entier saisi (*3)
    -- SINON Afficher chose saisie (*4) n'est pas un entier
    - FINSI
    - JUSQUA ok vrai

      

      
    .*1 Il faut utiliser la classe Scanner du package java.util. Il faut dire au constructeur de Scanner qu'on veut lire le clavier. Il faut donc lui passer le paramètre System.in (de même que System.out désigne l'écran).
    .*2 La méthode hasNextInt() de la classe Scanner permet de savoir si le prochain "mot" saisi est un entier ou pas (si rien n'a encore été saisi, attend la saisie de l'utilisateur).
    .*3 La méthode nextInt() de la classe Scanner retourne le prochain entier saisi au clavier (ne doit être appelé que si hasNextInt() a auparavant retourné vrai, sinon génère une exception).
    .*4 La méthode next() de la classe Scanner retourne le prochain "mot" saisi au clavier et permet ainsi de "consommer" un "mot" dont on ne veut pas car on sait qu'il n'a pas les caractéristiques désirées. Attention ! Oublier de l'appeler provoquerait une boucle infinie car hasNextInt() retournerait toujours faux puisque le "mot" incorrect ne serait jamais "consommé".

      

3  Applette

  1. Une applette est un programme java qui peut s'exécuter dans une page html (automatiquement au chargement de la page). On peut écrire une classe qui fonctionne aussi bien en application (lancée par la ligne de commande) qu'en applette (dans un navigateur). Il faut pour cela qu'elle contienne à la fois la méthode main() requise pour une application et la méthode init() requise pour une applette.
  2. Afficher le sujet du TP5, puis le fichier CalculatorPanel.java (vérifier au passage que c'est bien un JPanel), sélectionner tout, et copier.
  3. Lancer BlueJ, créer un nouveau projet, créer une nouvelle classe CalculatorPanel, sélectionner tout, coller, et compiler.
  4. Afficher le fichier AppliApplet.java , le lire, sélectionner tout, et copier.
  5. Revenir sous BlueJ, créer une nouvelle classe AppliApplet, sélectionner tout, et coller.
    Cette classe nécessite un JPanel pour fonctionner. Fort heureusement, on a pu vérifier au 2. ci-dessus que CalculatorPanel était bien un JPanel.
  6. Compléter l'instruction dans la méthode getPanel(), compiler, puis essayer la méthode main().
    Rappel du fonctionnement : cliquer sur les chiffres et le
    .
    pour former un nombre puis cliquer sur
    Entr
     ; recommencer pour le 2ème nombre ; cliquer sur un opérateur, puis sur
    =
     .

  7. Essayer maintenant la même classe en tant qu'applette : cliquer avec le bouton droit sur la classe AppliApplet et choisir Exécuter l'applet, puis Utiliser le visualiseur d'applets.
    BlueJ a généré le fichier AppliApplet.html . Essayer maintenant de lancer l'applette par la commande appletviewer AppliApplet.html
    Essayer également d'ouvrir ce fichier dans un navigateur.

4  Autres exercices

Terminer tous les exercices du TP6, voire des TP précédents si ce n'est pas déjà fait.
Imaginer des adaptations de ces exercices pour traiter les exceptions et/ou pour pouvoir les exécuter par la ligne de commande et/ou en applette.
Profiter jusqu'au bout de la présence des intervenants de TP pour poser des questions sur tous ces exercices.


File translated from TEX by TTH, version 3.70.
On 16 Jan 2006, 20:04.