Travaux Pratiques n°1

Lectures préalables :  
Thèmes du TP :
  • mise en place d'un environnement
    minimal pour démarrer sous Java
  • Java "sans objets" !
  • Exceptions
  • System.out.println
  • Applet et HTML
  • javadoc et les conseils

 

Pour ce premier TP, il est demandé d'utiliser directement le JDK sous DOS (une petite étape de configuration peut être nécessaire).
Il est également souhaitable de créer sur U: un répertoire IN413 dans lequel vous pourrez créer les répertoires TP1, TP2, ...

Question 1. (application)

(i)  Développez une application Java (Fahr2Cels) dont le programme principal appelle une fonction de conversion en degrés Celsius d'une valeur exprimée en degrés Fahrenheit.

Remarques :

La formule de conversion est :  °C = 5/9 * (°F -32)   (voir 1.)
Les valeurs en degrés Fahrenheit à convertir sont données sur la ligne de commande.   (voir 2.)
Ce sont des valeurs entières uniquement.   (voir 3.)
Le résultat est attendu avec un seul chiffre derrière la virgule.   (voir 4.)
IMPORTANT !

  1. La division entre 2 entiers est une division entière. Exemple 5/9 = 0
  2. Dans les tableaux, l'attribut length contient le nombre d'éléments du tableau
    (attention ! ce n'est pas une fonction, et le premier indice d'un tableau est 0).
  3. Les arguments de la ligne de commande sont des chaînes, donc à convertir en entiers
    (voir la fonction static int parseInt(String s) de la classe Integer)
  4. Le nombre souhaité de chiffres après la virgule peut s'obtenir d'au moins 3 manières différentes : dans un premier temps, utiliser simplement un calcul et une conversion en entier ; vous pouvez préférer utiliser la fonction d'arrondi inférieur floor() de la classe Math. Enfin, vous pouvez utiliser une classe de formatage qui arrondira au plus proche (voir partie optionnelle à la fin de ce sujet).
  5. DOS et Windows ne codent pas les caractères de la même manière. Le caractère ° que vous tapez dans le bloc-notes sous Windows ne s'affiche donc pas correctement quand vous exécutez le programme sous DOS.
    Ce problème ne se posera pas pour les applettes qui s'exécutent sous Windows. En attendant, si vous voulez un affichage correct sous DOS, il faut demander l'affichage du caractère de code ascii F8 (la notation unicode est "\u00F8").
  6. En cas de besoin, consultez la documentation Sun sur les packages, classes, et méthodes proposés par Java.

Commandes DOS :
Attention ! Vous devez être sur le bon répertoire (ne pas spécifier de chemin d'accès avant le nom du fichier java).

compilation : javac Fahr2Cels.java
execution : java Fahr2Cels 0 100 2000 54
conversion en entier arrondi inférieur   arrondi (par formatage)
   0 °F -> -17.7 °C
   100 °F -> 37.7 °C
   2000 °F -> 1093.3 °C
   54 °F -> 12.2 °C 
   -17.8
       
       
       
   -17.8
   37.8
       
       

(ii)  La documentation générée par l’utilitaire ‘javadoc’ est demandée (voir la documentation Sun sur cette commande).

IMPORTANT !

Commande DOS :

documentation : javadoc -d docFahr2Cels -version -author -private Fahr2Cels.java

  • Le dossier  docFahr2Cels de la commande javadoc ci-dessus est à créer avant de lancer la commande, car il n'est pas créé automatiquement...
  • Un commentaire minimum de votre part est attendu pour au moins toutes les classes, toutes les méthodes, tous les paramètres, et toutes les valeurs de retour.

(iii)  Développez une nouvelle version de votre programme (Fahr2CelsExcept) en ajoutant la gestion des exceptions susceptibles d'être levées :

(iv) N'oubliez pas de fournir la documentation javadoc

(générée par javadoc -d docFahr2CelsExcept -version -author -private Fahr2CelsExcept.java)


Question 2. (applette)

(i)  Complétez le squelette d'"Applette" fourni en insérant votre fonction de conversion

                                    
 
      L'applette en version complète, essayez !

Exécution  depuis la fenêtre d'invite de commande : DOS> appletviewer AppletteFahrenheit.html   ou ouvrir ce fichier depuis un navigateur.

Voir le source à compléter de l'applette (par exemple, AppletteFahrenheit.java).

Voir le source de la page HTML (par exemple, AppletteFahrenheit.html).

ATTENTION : les fichiers AppletteFahrenheit.html  et AppletteFahrenheit.class doivent être dans le même répertoire

(ii) N'oubliez pas de fournir la documentation javadoc

(générée par javadoc -d docAppletF2C -version -author -private AppletteFahrenheit.java)

(iii) Ajouter à cette Applette la prise en compte de l'exception NumberFormatException.

(iv) N'oubliez pas de fournir la documentation javadoc

(générée par javadoc -d docAppletF2CExcept -version -author -private AppletteFahrenheitExcept.java)

Optionnel* :

(v) Ajouter à cette Applette la lecture de paramètres comme la couleur du fond. Ces paramètres sont transmis depuis la page HTML (voir le tutorial) comme dans l'exemple suivant :
 <APPLET CODE="AppletteFahrenheit.class" HEIGHT=66 WIDTH=400>
 <PARAM NAME=backgroundcolor VALUE="#FF00FF">
 </APPLET> 
C'est la méthode de classe : static Color decode(String nm); de la classe java.awt.Color qui doit être exécutée; si une erreur se produit, c'est la couleur rose (Color.pink) qui est conservée.

Vous pouvez aussi chercher un moyen de pouvoir spécifier dans le fichier html la couleur "en clair", c'est-à-dire en mettant "blue" ou "yellow" à la place de "#FF00FF", mais c'est nettement plus difficile.

1. (i) -suite- Utiliser la classe NumberFormat pour formater correctement le nombre "à l'américaine", mais avec un seul chiffre après la virgule.

* Optionnel signifie qu'il n'est pas obligatoire de "rendre" ces questions sur la page web dont vous avez enregistré l'URL, mais vous devez essayer de traiter toutes ces questions pendant le TP.


Annexe 1. (le source à compléter de l'applette)

import java.awt.Button;
import java.awt.Color;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.applet.Applet;

/**
 *   une IHM minimale de test de la classe Fahrenheit.
 *
 *   @author   <A HREF="mailto:douin_at_cnam.fr">jm Douin</A>
 *   @version  1.0
 *   @since    jdk 1.1.x or higher
 */
public class AppletteFahrenheit extends Applet implements ActionListener{
    /** L'entrée de la valeur en degré Fahrenheit. */
	private TextField entree = new TextField( 6 );
    /** Le bouton de conversion. */
	private Button  boutonDeConversion = new Button( "convertir" );
    /** La sortie en degré Celsius. */
        private TextField sortie = new TextField( 6 );

    /**
     * Initialise l'applette.  
     * cette méthode est appelée automatiquement par le navigateur.
     */
    public void init() {
      add( entree ); add( boutonDeConversion ); add( sortie );
      sortie.setEditable( false );
      setBackground( Color.pink );
      boutonDeConversion.addActionListener( this );
    }

	/** 
	 * méthode déclenchée lorsque le bouton de conversion est appuyé. 
	 * remarquer que le champs de droite (les degrés Celsius) n'est pas éditable.
	 * 
	 */
	public void actionPerformed( ActionEvent ae ){
          float c = fahrenheitEnCelsius( Integer.parseInt( entree.getText() ) );
          sortie.setText( Float.toString( c ) );
	}

     /** 
      * la méthode à compléter. 
      *   @param f la valeur en degré Fahrenheit
      *   @return  la conversion en degré Celsius
      */
     private static float fahrenheitEnCelsius( int f){
       // ...
       return 0.F;	// à compléter	en remplaçant ce return "bidon" par la fonction de conversion
       // ...
     }

}

Annexe 2. (le source de la page HTML)

<HTML>
<HEAD>
</HEAD>
<BODY BGCOLOR="#ffff80">
<P>
<APPLET CODE = "AppletteFahrenheit.class" HEIGHT=66 WIDTH=400></APPLET>
<P>
<P>
  <HR>
<P>
<P>
</BODY></HTML>

--> Dernière mise à jour le par DB