Lectures préalables :


Thèmes du TP :

  • Utilisation de BlueJ
  • Java impératif
  • Exceptions


Ce TP est consacré à une application Java de conversion des degrés Fahrenheit (Angleterre) en degrés Celsius (reste de l’Europe!).


La classe "FahrenheitCelsius"

Ouvrir avec Bluej le projet “tp2”, descendre dans le paquetage “question1” où l’on découvre la classe “FahrenheitCelsius”.

C’est dans cette classe qu’est effectuée la conversion. Cette classe est une application car elle contient la méthode :

   public static  float  fahrenheitEnCelsius ( int  f ) {  //..


</code>
Compléter les 2 méthodes de cette classe

Contraintes :

  • La formule de conversion : °C = 5/9 * (°F -32)
  • Les valeurs en degrés Fahrenheit à convertir sont données sur la ligne de commande.
  • Ce sont des valeurs entières.
  • Le résultat est attendu avec un seul chiffre derrière la virgule, obtenu uniquement par le calcul. ( par exemple r = ((int)resultat*10)/10.0 )


Exécution sous Bluej :

“clic droit” sur le diagramme de la classe “FahrenheitCelsius” , choisir l’item “void main(String[] args)”, introduire des données comme ci dessous par exemple …

Le résultat dans la fenêtre Terminal

Technique Java :

  • Les arguments de la ligne de commande sont des chaînes (String), donc pour effectuer la conversion il faut les convertir en entiers (cf. static int parseInt(String s) de la classe Integer du paquetage java.lang)
  • Pour les tableaux, le champ length contient le nombre d'éléments du tableau (ATTENTION le premier indice d'un tableau est 0).
  • Attention : la division entre 2 entiers est une division entière . Exemple 5/9 = 0 et 9/5 = 1



La classe de tests unitaires "FahrenheitCelsiusTest"

Enrichissez la classe de tests unitaires comparant des résultats calculés à des résultats attendus.

Lire le tutoriel “Unit Testing in BlueJ” sur les classes de tests sous Bluej et un exemple est donné dans le projet…



La gestion de l'exception "NumberFormatException"

“runtime” Exceptions :

Descendre maintenant dans le paquetage “question2” où l’on découvre une autre version de la classe “FahrenheitClesius”.

Développez une nouvelle version de cette classe en reprenant la conversion de la question 1 et en ajoutant la gestion de l’exception NumberFormatException.

L’exception “NumberFormatException” est levée lors d’une mauvaise entrée sur la ligne de commande i.e. d’une entrée autre qu’une chaîne convertible en “int”

Exemple : {“10”,”ZZ”,”100”} engendre :

For input string: “ZZ” est généré par l’appel de e.getMessage() . e étant le nom de l’Exception soit System.out.println(“error : “ + e.getMessage());


La classe de tests unitaires

Développez une classe de tests unitaires (cf. question1)



IHM

Descendre maintenant dans le paquetage “question2” et compléter l’“IHM Fahrenheit” fournie en utilisant la fonction de conversion de la question, cette IHM doit avoir un comportement analogue à cette interface. Celle-ci s’exécutera facilement dans votre environnement en déclenchant la méthode de classe main (clic droit, classe IHMFahrenheit)<p align="center"> </p>

Aide au comportement attendu :
<paramname="backgroundColor" value="0xc0c0c0">


Prise en compte de l'exception "NumberFormatException"
Ajoutez à l'IHM la prise en compte de l'exception "NumberFormatException" : si cette exception est levée la sortie mentionnera le libellé "error !", comme le montre cette copie d'écran


Prise en compte du zéro absolu
Complétez L'IHM par la prise en compte du zéro absolu : la valeur minimale ne peut être inférieure à -273.1°C, un fonctionnement analogue à l'applette de l'énoncé ( if(celsius < -273.1F) celsius = -273.1F)