MLP TP4 - Enonce 2014-2015 - Moodle

publicité
Travaux pratique de Méthodologie et Langage de Programmation, UMONS/Polytech, TP4
1
4.Programmation en Java : exceptions et fichiers
Cette séance de TP permettra de mettre en évidence le principe de gestion des exceptions en Java et d'en montrer les avantages. De plus, l'accès au système de fichiers sera étudié en vue d'y lire ou d'y enregistrer des informations.
4.1.Notions
a) Traitement des exceptions
Une exception indique qu'un problème s'est manifesté durant l'exécution d'un programme. Différents exemples d'exceptions sont :
●
dépassement des limites d'un tableau;
●
dépassement arithmétique;
●
division par zéro;
●
paramètres de méthode non valides;
●
épuisement de la mémoire.
En vue de ne pas compliquer la présentation du code, Java permet de séparer la gestion des exceptions du reste du programme. Cette séparation se fait en trois parties:
●
un bloc try : permet d'isoler le code susceptible de générer une exception;
un (ou plusieurs) blocs catch : spécifie le type d'exception qui peut être intercepté et le code de traitement de l'exception;
●
un bloc finally (facultatif) : indique des lignes de codes qui doivent toujours s'exécuter, qu'il y ait eu une exception ou non.
●
On a donc typiquement une structure ressemblant à:
try {...
}
catch(typeException e){...
}
Lorsqu'une exception est rencontrée, le contrôle de programme quitte le bloc try et poursuit au premier bloc catch. Chaque bloc catch spécifie entre parenthèses le nom d'une classe du type d'exception à capturer et un paramètre.
throw.
Une exception peut être lancée spécifiquement par le programmeur en utilisant l'instruction Remarque : le bloc try doit contenir tout le code dépendant de l'exception potentielle en vue de passer ce code si l'exception survient.
On peut associer à une méthode une clause throws reprenant une liste des exceptions susceptibles d'être lancées par cette méthode. Les exceptions des catégories Exception et Error doivent être mentionnées dans la clause throws ou capturées dans un bloc try/catch.
UMONS/Polytech
Pierre Manneback, Sébastien Frémal
2014­2015
2
Travaux pratique de Méthodologie et Langage de Programmation, UMONS/Polytech, TP4
b)Fichiers et flots de données
Java considère que chaque fichier est un flot séquentiel d'octets. Un flot classique utilisé depuis le début des séances de TP est System.out; ce dernier permet d'envoyer des informations vers la sortie standard (la console). On distingue également System.in (flot d'entrée standard : le clavier) et System.err (flot d'erreur standard : la console).
La gestion de fichier se fait à l'aide des classes du package java.io. Les classes suivantes sont couramment utilisées :
●
FileInputStream : pour l'entrée d'octets à partir d'un fichier;
●
FileOutputStream : pour la sortie d'octets vers un fichier;
●
FileReader : pour l'entrée de caractères à partir d'un fichier;
●
FileWriter : pour la sortie de caractères vers un fichier.
Il est également possible d'enregistrer directement des objets sans devoir stocker manuellement chaque attribut de l'objet. Cela est rendu possible grâce à l'implémentation de l'interface java.io.Serializable dans la déclaration de la classe. De cette manière, les objets instanciés à partir de cette classe pourront être utilisés avec ObjectInputStream et ObjectOutputStream.
Remarque : il est important que toutes les variables d'instance de la classe implémentent également l'interface Serializable.
Une classe très utile en vue de naviguer dans le système de fichiers est la classe JFileChooser du package javax.swing. Cette classe présente des méthodes showOpenDialog et showSaveDialog permettant l'ouverture d'une boîte de dialogue de choix d'un fichier (respectivement en vue de l'ouvrir ou d'y enregistrer des informations). La méthode getSelectedFile retourne un lien vers le fichier sélectionné ; ce lien sera enregistré dans un objet File qui sera le descripteur de fichier. L'ouverture du flux se fait alors de la manière suivante :
ObjectOutputStream sortie = new ObjectOutputStream( new FileOutputStream( nomDeFichier ));
où nomDeFichier est un objet de type File.
L'enregistrement d'un objet dans le fichier se fera à l'aide de la méthode writeObject de la classe ObjectOutputStream et la fermeture du descripteur de fichier sera réalisée par la méthode close.
La lecture d'un objet depuis un fichier se fera à l'aide de la méthode readObject de la classe ObjectInputStream; celle­ci renvoie un objet générique Object qui devra donc être transtypé suivant le type d'objet à lire. Par exemple :
Enregistrement enregistrement = (Enregistrement) entree.readObject();
Remarque : une erreur lors d'un accès à un fichier lancera une exception du type IOException.
UMONS/Polytech
Pierre Manneback, Sébastien Frémal
2014­2015
Travaux pratique de Méthodologie et Langage de Programmation, UMONS/Polytech, TP4
3
4.2.Exercices
a) Exercice 1
entiers.
Cet exercice permettra de comprendre la gestion des exceptions en réalisant un quotient de deux Ce quotient sera d'abord réalisé sans gestion d'erreur. Ensuite, la gestion d'erreur sera ajoutée au code existant et se fera à deux niveaux:
●
entrée d'un caractère à la place d'un entier;
●
entrée d'un dénominateur nul.
Remarque : un moyen pour identifier le type d'exception lancée lors d'une erreur d'exécution est d'observer la console lorsque l'on fait volontairement planter le programme. Un autre moyen est de consulter les pages de manuel des méthodes utilisées et d'en identifier les exceptions possibles.
b)Exercice 2
On souhaite gérer une liste de personnes dont le nom, le prénom et l'âge doivent pouvoir être obtenus. Une classe Personne sera donc créée et testée dans une seconde classe TestPersonne. Cette dernière définira différentes méthodes permettant:
●
l'ouverture d'un fichier;
●
l'enregistrement de personnes dans un fichier;
●
la lecture de personnes depuis un fichier;
●
la fermeture d'un fichier.
c) Exercice 3
L'exercice sur les formes géométriques du TP précédent sera repris en vue d'y apporter les modifications suivantes:
●
possibilité d'enregistrer la liste des formes géométriques;
●
possibilité de récupérer à partir d'un fichier la liste de formes géométriques.
La gestion des erreurs se fera à deux niveaux:
●
gérer les exceptions d'accès au système de fichier;
●
tester le caractère convexe des polygones introduits par l'utilisateur.
Indication:
sin 
a,
b=
UMONS/Polytech
Pierre Manneback, Sébastien Frémal
a x b y −a y b x

∥
a∥∥b∥

a=ax , a y  et 
b=b x , b y 
2014­2015
Travaux pratique de Méthodologie et Langage de Programmation, UMONS/Polytech, TP4
4
4.3.Annexes
a) Exceptions du package java.lang (sauf AWTError qui se trouve dans java.awt)
Error
LinkageError
ClassCircularityError
ClassFormatError
ExceptionInInitializerError
IncompatibleClhassChangeError
AbstractMethodError
IllegalAccessError
InstantiationError
NoSuchFieldError
NoSuchMethodError
NoClassDefFoudError
UnsatisfiedLinkError
VerifyError
ThreadDeath
VirtualMachineError
InternalError
OutOfMemoryError
StackOverflowError
UnknownError
AWTError
Exception
ClassNotFoundException
CloneNotSupportedException
IllegalAccessException
InstantiationException
InterruptedException
NoSuchFieldException
NoSuchMethodException
RuntimeException
ArithmeticException
ArrayStoreException
ClassCastException
IllegalArgumentException
IllegalThreadStateException
NumberFormatException
IllegalMonitorStateException
IllegalStateException
IndexOutOfBoundsException
ArrayIndexOutOfBoundsException
StringIndexOutOfBoundsException
NegativeArraySizeException
NullPointerException
SecurityException
UMONS/Polytech
Pierre Manneback, Sébastien Frémal
2014­2015
Travaux pratique de Méthodologie et Langage de Programmation, UMONS/Polytech, TP4
5
b) Exceptions du package java.util
Exception
RuntimeException
EmptyStackException
MissingResourceException
NoSuchElementException
TooManyListenersException
c) Exceptions du package java.io
Exception
IOException
CharConversionException
EOFException
FileNotFoundException
InterruptedIOException
ObjeectStreamException
InvalidClassException
InvalidObjectException
NotActiveException
NotSerializableException
OptionalDataException
StreamCorruptedException
WriteAbortedException
SyncFailedException
UnsupportedCodingException
UTFDataFormatException
d) Exceptions du package java.awt
Exception
AWTException
RuntimeException
IllegalStateException
IllegalComponentStateException
e) Exceptions du package java.net
Exception
IOException
BindException
MalformedURLException
ProtocolException
SocketException
ConnectException
NoRouteToHostException
UnknownHostException
UnknownServiceException
4.4.Bibliographie
1. JAVA ­ Comment programmer – Quatrième édition, Harvey M. Deitel & Paul J. Deitel ­ Les éditions Reynald Goulet INC., 2002
2. Méthodologie et Langages de Programmation, Pierre Manneback, Année académique
2005-2006.
UMONS/Polytech
Pierre Manneback, Sébastien Frémal
2014­2015
Téléchargement