TP12 - Travaux Pratiques de Programmation

afternoonhandsomelyΛογισμικό & κατασκευή λογ/κού

17 Νοε 2012 (πριν από 8 χρόνια και 8 μήνες)

566 εμφανίσεις



1


TP12
-
Travaux Pratiques de Prog
rammation




But du TP

Le but de ce TP est d'améliorer vos connaissances du concept de classe et d'introduire l'utilisation des
exceptions pour le traitement des situations qui posent des problèmes.


Le concept d'exception


Une exception est le résultat d'une opération qui n'a pas pu aboutir.

Java nous permet de gérer toute sorte de situations afin d'empêcher à nos programmes de planter ou
d'éviter des situations non acceptables.

En utilisant la structure
try…catch
, on peut
demander à Java d'essayer d'exécuter une ou plusieurs
opérations et si nécessaire, de traiter les problèmes survenir lors de l'exécution.


Exemple


Soit une fonction devant diviser un entier n par un deuxième entier d:


35

public

static

void
division(
int
n
,
int
d){

36


37


System.out.println(n/d);

38

}


Clairement, si d vaut 0, on ne peut pas évaluer la réponse.

Si on ne pense pas à traiter ce problème quand on demande une division avec d égal 0, voici ce qui
va être affiché dans la console de NetBeans:


.
..

Exception in thread "AWT
-
EventQueue
-
0" java.lang.ArithmeticException: / by zero


at Calc.division(Calc.java:37)

at Tp10ui.jButton6ActionPerformed(Tp10ui.java:129)

at Tp10ui.access$400(Tp10ui.java:11)

...


Normalement, ce g
enre de message d'erreur est bien plus long, mais ce qui nous intéresse est facile
à trouver (en général on a besoin de deux informations).

La première se trouve à la première ligne bleue (ici la ligne
at Calc.division(Calc.java:37)
) et nous
indique où l'
erreur s'est produite, ici à la ligne 37 du fichier Calc.java, et en particulier dans la méthode
division
.

La deuxième est à la ligne juste précédente (en rouge dans la console de NetBeans), et nous indique
quel genre de problème s'est produit: ici, le pro
blème est de type
ArithmeticException
, en particulier, il
s'agit d'une division par zéro.


On pourrait résoudre le problème avec un
if
, testant d avant la division, mais cela n'est pas toujours
possible.

L'autre façon de résoudre cela est d'introduire un b
loc
try…catch
et de gérer les exceptions qui
pourraient être levées pour résoudre le problème:


public

static

void
division(
int
n,
int
d){




try
{



System.out.println(n/d);


}


catch
(ArithmeticException ae){



System.out.println("division par zéro impossi
ble");


}

}



2


Le traitement est très simple, on
essaye
d'afficher le résultat de la division et s'il n'est pas possible de
le faire car une
ArithmeticException
s'est produite, on affiche un message d'erreur à la place.

En effet, une exception est elle aussi
un objet, c'est pour cette raison que, dans le
catch
, on doit

non
-
seulement spécifier le type d'exception qu'on veut traiter, mais aussi choisir un nom arbitraire
pour cette exception particulière; ici, on a utilisé
ae
.



Exercice 1


Définissez un nouveau
projet avec un
jFrame
, comme on le fait d'habitude. Cette interface ne
comprendra qu'un seul champ de texte et un bouton "évaluer". Enfin, ajoutez
-
y une étiquette afin
d'afficher un résultat.

L'utilisateur va entrer une expression arithmétique simple dans
le champ texte, p.ex.: "
10 + 5
", "5 * 9",
"5 / 2", etc… mais elle sera
toujours
de la forme:
nombre opérateur nombre
, séparé par des espaces.
Lorsque l'utilisateur presse le bouton, l'expression va être évaluée et le résultat affiché.

Pour cela, vous deve
z
parser
, c'est à dire décortiquer, la chaîne de caractères. Utilisez la méthode
split
de la classe
String
(voir l'API pour le fonctionnement), pour séparer la chaîne morceaux et faire
les transformations nécessaires (de
String
en
int
). Votre programme doi
t être capable de traiter les 5
opérations de base (+,
-
, *, /, %).

Assurez vous que le format d'entrée des expressions arithmétiques est respecté et utilisez le
mécanisme des
exceptions
de Java afin de traiter les erreurs de conversion (voir
Integer.pars
eInt

dans l'API afin de voir quelles exceptions sont levées) et les erreurs arithmétiques (p.ex. division par
zéro). Dans tous ces cas, affichez un message d'erreur le plus précis possible (quelle variable est
inconvertible et pourquoi, etc…). Vous pouvez
travailler avec des entiers ou des nombres à virgules.


Exercice 2


Dans un nouveau projet:


1.

Vous allez créer une classe OutilsFichiers. Elle contiendra deux méthodes
publiques

et
statiques

estLisible
et
lire
. Rappelons que les méthodes statiques sont uti
les lorsque l’on désire
utiliser les méthodes d’une classe sans devoir en créer un instance. Vous connaissez et utilisez
par exemple les méthodes
random
ou
pow
de la classe
Math
sans pour autant l’avoir instanciée.
De ce fait, tout comme vous appelez

: Mat
h.pow(2, 3) pour obtenir la valeur de 2 au cube, vous
pourrez utiliser OutilsFichiers.lire(
fichier
) qui vous retournera le contenu du fichier passé en
paramètre. Dans notre cas, le paramètre passé aux deux méthodes est une instance de la classe
java.io.Fil
e
qui sert à manipuler les fichiers ou répertoires en Java. Les fichiers et les opérations
sur ces derniers nécessitent souvent l'aide des exceptions ! La classe
OutilsFichiers
se compose
de:




un constructeur
privé

qui ne prend pas de paramètre et ne fait
rien. Il devra être privé afin
rendre l’instanciation de cette classe impossible, c’est une
helper
-
class
. En effet, instancier
une classe qui ne contient qui des méthodes (et attributs) statiques n’a pas de sens.



la méthode
estLisible
prendra une instance
de
File
en paramètre et utilisera les méthodes de
la classe
File
pour déterminer que le fichier est bien un fichier (et non un répertoire) et qu’il est
lisible (voir l’API de Java sous
java.io.File
). Si ces deux critères sont satisfaits, la méthode
retourn
e
true
,
false
dans tous les autres cas.



la méthode lire prendra une instance de
File
en paramètre et retournera un tableau de
chaînes de caractères, chaque case du tableau contenant une ligne du fichier. Si le fichier
n’est pas valide, la méthode lèvera un
e exception avec un message adéquat. Si le fichier est
vide, il devra retourner un tableau de taille zéro.


Pour la lecture de fichier, il existe plusieurs solutions en Java, adaptées au fichier d’entrée et au
résultat voulu. En voici une adaptée à nos bes
oins: créez une instance de
java.io.BufferedReader

comme suit

:


BufferedReader br = new BufferedReader(new FileReader(fichier));





3

où fichier est une instance de
java.io.File
. Voyez ensuite l’API de Java et utilisez la méthode
readLine()
de
java.io.Buffe
redReader
afin de lire le fichier ligne par ligne et de créer le tableau que
retournera la méthode. Veillez à ce que le tableau soit exactement de taille égale au nombre de
lignes du fichier.


2.

Créez une interface faite d'une grande zone de texte, une étiqu
ette et d'un bouton «

Lire fichier

»
qui va ouvrir un fichier et initialiser un tableau de chaîne avec le contenu de ce fichier.

Java permet d’ouvrir automatiquement une boîte de dialogue afin de sélectionner un ou plusieurs
fichier(s).




Voici un exemp
le qui permet d’ouvrir une telle fenêtre, de choisir un fichier et de récupérer une
instance de la classe
java.io.File
représentant le fichier. Celui
-
ci sera utilisé lors de la lecture du
contenu.


// nouveau
FileChoser

JFileChooser jfc = new JFileChooser(
);



// variable de type fichier
File

File fichier;








// ouvre une boîte de dialogue et attend que le bouton
Ouvrir
ou
Annuler
soit cliqué

if(jfc.showOpenDialog(this) == jfc.APPROVE_OPTION){



// si
Ouvrir
est cliqué

// récupère le «

fichier

» sélecti
onné

fichier = jfc.getSelectedFile();



// affiche le nom de ce fichier dans un label




jLabel1.setText("Fichier sélectionné: "+fichier.getName());












}

else{


// si
Annuler
a été cliqué

jTextArea1.setText("Pas de fichier sélectionné...");

}


Uti
lisez l’exemple ci
-
dessus pour implémenter ce que doit faire le nouveau bouton et utilisez la
classe OutilsFichiers afin d’initialiser le tableau de chaînes de caractères.


3.

Affichez le nom du fichier dans l'étiquette et son contenu dans la zone de texte sa
ns le reformater


4.

Utilisez le ficher "personnes.txt" donné sur le site web du cours afin de tester votre application.



4