Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;



Documents pareils
Premiers Pas en Programmation Objet : les Classes et les Objets

Corrigé des exercices sur les références

Projet de programmation (IK3) : TP n 1 Correction

Programmer en JAVA. par Tama

Programme Compte bancaire (code)

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle CISII,

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Programmation en Java IUT GEII (MC-II1) 1

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Plan du cours. Historique du langage Nouveautés de Java 7

TP, première séquence d exercices.

Chapitre 10. Les interfaces Comparable et Comparator 1

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Corrigés des premiers exercices sur les classes

as Architecture des Systèmes d Information

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Tp 1 correction. Structures de données (IF2)

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmation par les Objets en Java

TD3: tableaux avancées, première classe et chaînes

Chapitre VI- La validation de la composition.

TD/TP PAC - Programmation n 3

TP1. Outils Java Eléments de correction

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Utilisation d objets : String et ArrayList

Objets et Programmation. origine des langages orientés-objet

Flux de données Lecture/Ecriture Fichiers

INITIATION AU LANGAGE JAVA

TD/TP PAC - Programmation n 3

Structurer ses données : les tableaux. Introduction à la programmation

Programmation Objet Java Correction

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Cours 1: Java et les objets

OCL - Object Constraint Language

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Remote Method Invocation (RMI)

Programmation avec des objets : Cours 7. Menu du jour

Développement Logiciel

Java Licence Professionnelle CISII,

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Introduction au langage C

Auto-évaluation Programmation en Java

Une introduction à Java

TP1 : Initiation à Java et Eclipse

Synchro et Threads Java TM

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Un ordonnanceur stupide

Gestion distribuée (par sockets) de banque en Java

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Le langage C. Séance n 4

Introduction : les processus. Introduction : les threads. Plan

Programmation Par Objets

Langage Java. Classe de première SI

PROGRAMMATION PAR OBJETS

Solutions du chapitre 4

ACTIVITÉ DE PROGRAMMATION

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Bases Java - Eclipse / Netbeans

Algorithmique et programmation : les bases (VBA) Corrigé

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Apprendre Java en 154 minutes

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Introduction au langage Java

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Héritage presque multiple en Java (1/2)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Package Java.util Classe générique

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

UML et les Bases de Données

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Cours 1 : La compilation

Programmation Orientée Objet Java

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

INF 321 : mémento de la syntaxe de Java

Cours 14 Les fichiers

Exercices sur les interfaces

La gestion des exceptions

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

TP : Gestion d une image au format PGM

Applet pour visualiser les variables «automate» notifiées

Cours d initiation à la programmation en C++ Johann Cuenin

Java c est quoi? Java pourquoi?

Conventions d écriture et outils de mise au point

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Algorithmique et Programmation, IMA

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Présentation du langage et premières fonctions

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Transcription:

CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe Console fournie (listing 1). Cette méthode lit, à partir du clavier, un entier. Le message passé en paramètre est affiché pour inviter l utilisateur à taper l entier. L entier est lu sous la forme d une chaîne de caractères (String) qui est transformée en un entier (int). Si l utilisateur n a pas saisi un entier, une nouvelle saisie est demandée. On utilisera les méthodes printprompt(string) et readline() de la classe Console (listing 1). On utilisera également la méthode parseint(string) de la classe Integer. Listing 1 La classe Console 1 import java.io.*; 2 3 /** Quelques méthodes pour lire à partir du clavier. 4 * @author Xavier Crégut (très largement inspiré par Cay Horstmann) */ 5 public class Console { 6 /** Afficher un prompt à l écran (sans passage à la ligne) */ 7 public static void printprompt(string prompt) { 8 System.out.print(prompt + " "); 9 System.out.flush(); // forcer l écriture en l absence de \n 10 } 11 12 /** Lire une chaîne de caractères à partir du clavier. La chaîne se 13 * termine par un retour à la ligne (qui n en fait pas partie) (cf corejava) 14 * @return la ligne lue à partir du clavier (sans le retour à la ligne) */ 15 public static String readline() { 16 int ch; 17 String r = ""; 18 boolean done = false; 19 while (!done) { 20 try { 21 ch = System.in.read(); 22 if (ch < 0 (char) ch == \n ) { 23 done = true; 24 } else if ((char) ch!= \r ) { 25 // weird--it used to do \r\n translation 26 r = r + (char) ch; 27 } TP 10 1/5

28 } catch (java.io.ioexception e) { 29 done = true; 30 } 31 } 32 return r; 33 } 34 35 } 2 Comptes bancaires et exceptions Exercice 2 : Comptes simples et exceptions L objectif de cet exercice est d utiliser les exceptions pour exprimer les responsabilités de la classe CompteSimple (listing 2) et de voir les conséquences sur le reste de l application résumé ici au programme de test du listing 3. 2.1 Les constructeurs. Un compte simple est créé à partir d un titulaire et d un dépôt initial. Le titulaire doit exister (différent de null) et le dépôt initial doit être positif. On utilisera les deux exceptions TitulaireInvalideException et DépôtInitialException pour détecter ces deux cas d erreurs. 2.1.1 Définir les deux exceptions comme hors du contrôle du compilateur Java (elles sont donc des descendantes de RuntimeException). Quelles sont les modifications à apporter au programme de test? 2.1.2 Définir les deux exceptions comme sous contrôle du compilateur Java (elles sont donc des descendantes de Exception mais pas de RuntimeException). Quelles sont les modifications à apporter au programme de test? 2.2 Les méthodes créditer et débiter. Définir une exception MontantException qui signale que le montant passé en paramètre des méthodes créditer et débiter est incorrect. Indication : Quelles sont les informations à associer à cette exception pour qu elle puisse être traitée dans le gestionnaire d exception qui décidera de la récupérer? 2.3 Le programme principal. Dans le programme principal, on souhaite récupérer les exceptions sur les comptes qui se produisent sans pour autant avoir à énumérer tous les cas d erreurs possibles. Ceci permettra en particulier de prendre en compte, sans modification, de nouveaux types d anomalie qui pourraient être introduits par la suite sur les comptes bancaires. 2.3.1 Proposer et implanter une solution. 2.3.2 L énoncé ci-dessus présente un avantage à la solution donnée, indiquer ses inconvénients. Listing 2 La classe CompteSimple 1 /** CompteSimple modélise un compte bancaire simple tenu en euros. Il 2 * est caractérisé par un titulaire et un solde (positif ou négatif) 3 * et autorise seulement les opérations de crédit et débit. 4 * @author Xavier Crégut 5 * @version 1.9 6 */ TP 10 2/5

7 public class CompteSimple { 8 9 /** Titulaire du compte. */ 10 private Personne titulaire; 11 12 /** Solde du compte exprimé en euros. */ 13 private double solde; 14 15 /** Initialiser un compte. 16 * @param titulaire le titulaire du compte 17 * @param depotinitial le montant initial du compte 18 */ 19 public CompteSimple(Personne letitulaire, double depotinitial) { 20 this.solde = depotinitial; 21 this.titulaire = letitulaire; 22 } 23 24 /** Initialiser un compte à partir de son titulaire. 25 * Son solde est nul. 26 * @param titulaire le titulaire du compte 27 */ 28 public CompteSimple(Personne titulaire) { 29 this(titulaire, 0); 30 } 31 32 /** Solde du compte exprimé en euros. */ 33 public double getsolde() { 34 return this.solde; 35 } 36 37 /** Titulaire du compte. */ 38 public Personne gettitulaire() { 39 return this.titulaire; 40 } 41 42 /** Créditer le compte du montant (exprimé en euros). 43 * @param montant montant déposé sur le compte en euros 44 */ 45 public void crediter(double montant) { 46 this.solde = this.solde + montant; 47 } 48 49 /** Débiter le compte du montant (exprimé en euros). 50 * @param montant montant retiré du compte en euros 51 */ 52 public void debiter(double montant){ 53 this.solde = this.solde - montant; 54 } 55 56 public String tostring() { 57 return "solde=" + this.getsolde() 58 + ", titulaire=\"" + this.gettitulaire() + "\""; 59 } 60 TP 10 3/5

61 } Listing 3 La classe TestCompteSimple1Assert 1 /** Programme de test sur les comptes simples (utilisant assert). 2 * @author Xavier Crégut 3 * @version 1.3 4 */ 5 public class TestCompteSimple1Assert { 6 public static void main (String args []){ 7 Personne p1 = new Personne("Xavier", "Crégut", true); 8 CompteSimple cs1 = new CompteSimple(p1, 1000); 9 assert cs1.getsolde() == 1000; 10 cs1.crediter(100); 11 assert cs1.getsolde() == 1100; 12 cs1.debiter(2000); 13 assert cs1.getsolde() == -900; 14 15 CompteSimple cs2 = new CompteSimple(p1); 16 assert cs2.getsolde() == 0; 17 cs2.crediter(100); 18 assert cs2.getsolde() == 100; 19 } 20 } Exercice 3 : Impact des exceptions sur le compte courant Maintenant que la classe CompteSimple a été modifiée pour lever des exceptions (exercice 2), nous allons en voir l impact sur la classe CompteCourant. 3.1 Compiler la classe CompteCourant. Quelles sont les erreurs signalées? 3.2 Corriger la classe CompteCourant et le programme de test ExempleComptes. Exercice 4 : Livret A et exceptions La classe LivretA a été écrite en faisant un héritage de la classe CompteCourant. Cet héritage a été justifié par le souhait de réutiliser la gestion du titulaire, du solde et de l historique du CompteCourant. Ceci ne peut jamais être une justification en Java car la relation d héritage définit une relation de sous-typage. En nous appuyant sur les exceptions, nous montrons que la relation d héritage conduit à modifier les classes parentes (pour effectivement avoir une relation de soustypage). 4.1 La compilation de la classe LivretA provoque des erreurs liées à la non déclaration des exceptions pouvant être levées par certaines méthodes. Corriger la classe LivretA pour supprimer ces messages. 4.2 Par rapport à un compte courant, nous avons une contrainte supplémentaire sur le montant de créditer. Il ne faut pas dépasser le plafond du Livret A. 4.2.1 Définir une exception sous contrôle, DépassementPlafondException. Elle sera utilisée dans la méthode créditer de LivretA pour signaler un montant qui provoquerait un dépassement du plafond. 4.2.2 Quelles sont les erreurs signalées par le compilateur lors de la compilation de LivretA? Pourquoi? TP 10 4/5

4.2.3 Que faut-il faire pour corriger les erreurs signalées? Remarque : Nous aurions pu mener un raisonnement analogue en nous appuyant sur les préconditions de la méthode créditer de la classe CompteCourant (ou CompteSimple) et de sa redéfinition dans LivretA. La précondition est en effet renforcée ce qui est contraire à la règle qui dit que la précondition d une méthode redéfinie ne peut qu être affaiblie. 4.3 L utilisation de l héritage entre LivretA et CompteCourant conduit à modifier la sémantique des classes CompteCourant et CompteSimple. Si ceci n est pas souhaitable, il ne faut pas utiliser l héritage. Comment faire alors pour écrire la classe LivretA? TP 10 5/5