Les classes du JDK. Les types composites TD/TP-4. Le paquet java.lang. Les autres paquets. Les classes du JDK et les types composites Page 1 sur 15



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

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

PROGRAMMATION PAR OBJETS

Programmer en JAVA. par Tama

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

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

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

Une introduction à Java

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Java Licence Professionnelle CISII,

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Langage Java. Classe de première SI

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

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

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

as Architecture des Systèmes d Information

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

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

1. Langage de programmation Java

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Java Licence Professionnelle CISII,

INITIATION AU LANGAGE JAVA

Programmation par les Objets en Java

Généralités sur le Langage Java et éléments syntaxiques.

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Langage à objets : JAVA (1)

Flux de données Lecture/Ecriture Fichiers

INF 321 : mémento de la syntaxe de Java

Auto-évaluation Programmation en Java

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

Programmation Internet en Java

Introduction au langage Java

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

Utilisation d objets : String et ArrayList

Cours 1: Java et les objets

Corrigé des exercices sur les références

Cours 14 Les fichiers

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

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Premiers Pas en Programmation Objet : les Classes et les Objets

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Package Java.util Classe générique

Programmation en Java IUT GEII (MC-II1) 1

et se trouve popularisé rapidement pour ses possibilités de développement liés au Web. Les

TD/TP PAC - Programmation n 3

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

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

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

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

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

Introduction à JDBC. Accès aux bases de données en Java

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Support de cours et TD Programmation Orientée Objet

Programmation Par Objets

Projet de programmation (IK3) : TP n 1 Correction

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Solutions du chapitre 4

Applet pour visualiser les variables «automate» notifiées

TP, première séquence d exercices.

Initiation à la programmation orientée-objet avec le langage Java

Remote Method Invocation Les classes implémentant Serializable

Développement Logiciel

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Java DataBaseConnectivity

TD/TP PAC - Programmation n 3

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Dis papa, c est quoi un bus logiciel réparti?

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Programmation avec des objets : Cours 7. Menu du jour

TP1 : Initiation à Java et Eclipse

ACTIVITÉ DE PROGRAMMATION

Programme Compte bancaire (code)

TP 1. Prise en main du langage Python

Programmation client-serveur sockets - RPC

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

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

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

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Corrigés des premiers exercices sur les classes

Introduction au langage C

Exercices sur les interfaces

Java Licence professionnelle CISII,

Apprendre Java en 154 minutes

Calcul Parallèle. Cours 5 - JAVA RMI

RMI le langage Java XII-1 JMF

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Synchro et Threads Java TM

Le Modèle de Sécurité dans JAVA

Recherche dans un tableau

Initiation à JAVA et à la programmation objet.

Threads. Threads. USTL routier 1

COMPARAISONDESLANGAGESC, C++, JAVA ET

I. Introduction aux fonctions : les fonctions standards

Chapitre 2. Classes et objets

Transcription:

Les classes du JDK et les types composites Page 1 sur 15 Les classes du JDK et les types composites Page 2 sur 15 Pour affecter une valeur à une variable simple, if suffit d utiliser les lignes suivantes: Les classes du JDK TD/TP-4 int i; i = 5; Pout initialiser un objet composite, il faut utiliser un constructeur: Le JDK fournit un grand nombre de classes regroupées en packages nommés java.*. Le paquet java.lang Le paquet java.lang est chargé automatiquement, ses classes sont donc toujours utilisables. On y trouve, entre autres : la classe Object dont dérivent toutes les autres classes les classes représentant les types numériques de bases : Boolean, Byte, Double, Float, Integer, Long la classe Math qui fournit des méthodes de calcul des fonctions usuelles en mathématiques les classes Character, String et StringBuffer pour la gestion des caractères et des chaînes de caractères la classe System que nous utilisons pour afficher du texte sur la console DOS. Les autres paquets Les autres paquets doivent être déclarés (mot clé import) pour pouvoir être utilisés. java.awt pour la création d'interfaces graphiques java.awt.event pour la gestion des évènements java.util pour certaines structures de données java.io pour la gestion des fichiers java.net pour le développement des application en réseau. java.text pour la gestion du texte, des dates, des nombres et des messages. java.applet pour créer des applets. java.sql pour accéder aux données d'une source de données et de les traiter. java.security pour mettre en œuvre la sécurité. Pour une présentation plus détaillée des paquets Java suivre ce lien pour un format html ou pdf. Les types composites Java implémente un certain nombre de types simples: boolean, byte, char, double, float, int, long, short. Des types composites sont également disponibles dans le langage Java: Boolean, Character, Double, Float, Integer, Long, Number, String. Si les types simples s appliquent à des variables, les types composites concernent uniquement les objets. Integer I = new Integer(10); String S = new String( C est un objet String ); La méthode parsint() de la classe Integer convertit l'élément String qui lui est passé en un entier int. Exemple 4.1 : L exemple suivant démontre l utilisation de la méthode parsint() pour la conversion d une chaîne de caractères, entrée par le clavier. La chaîne doit contenir rien que des nombres. La fonction Lit() acqiert les données tapées au clavier et les envoie sous forme d'une chaîne String. L'entrée s'effectue tant que le caracrère tapé n'est pas un retour chariot. Le caractère est concatené à la chaîne S. La chaîne est retournée alors que la touche Entrée est pressée. public class ex4 public static void main (String args[]) throws java.io.ioexception int e1, e2, e3, e4; String Interm; System.out.println("Entrez une valeur decimale pour le premier operande (e1) :"); e1 = Integer.parseInt(Interm); System.out.println("Entrez une valeur decimale pour le deuxieme operande (e2) :"); e2 = Integer.parseInt(Interm); System.out.println("Entrez une valeur decimale pour (e3) :"); e3 = Integer.parseInt(Interm); System.out.println("(e1 + e2) * e3 = " + ((e1 + e2)*e3)); public static String Lit() throws java.io.ioexception

Les classes du JDK et les types composites Page 3 sur 15 Les classes du JDK et les types composites Page 4 sur 15 String S = ""; char C; while ((C = (char)system.in.read())!= '\n') S += C; return (S.substring(0, S.length()-1)); Exemple d'exécution de ce programme: Pour manipuler les réels on utilise la classe Float. La méthode valueof(interm) convertit la chaîne Interm en un objet Float. L application de la méthode doublevalue() à l objet Float fait la conversion en un réel double. throws Le mot clé throws permet d'avertir le système qu'une certaine catégorie d'exception ne seront pas traitée en local. Si une exception est levée et qu'elle n'est traitée par aucune fonction, alors c'est la JVM qui la traite et affiche sa représentation sous chaîne de caractères. Exemple 4.2 : L'exemple suivant montre l'application de ces méthodes pour la création d'une simple calculette en Java. public class ex5 public static void main (String args[]) throws java.io.ioexception boolean l; double o1, o2, res = 0; String Interm; char oper; System.out.println("Entrez une valeur reel pour le premier operande (o1) :"); o1 = Float.valueOf(Interm).doubleValue(); System.out.println("Entrez une valeur reel pour le deuxieme operande (o2) :"); o2 = Float.valueOf(Interm).doubleValue(); System.out.println("Entrez le charactere pour operation (oper) :"); oper = (char)system.in.read(); l = true; switch(oper) case '+' : res = o1 + o2; break; ; case '-' : res = o1 - o2; break; ; case '*' : res = o1 * o2; break; ; case '/' : res = o1 / o2; break; ; default : l = false; ; if (l) System.out.println("Resultat : " + o1 + " " + oper + " " + o2 + " = " + res); public static String Lit() throws java.io.ioexception String S = ""; char C; while ((C = (char)system.in.read())!= '\n') S += C; return (S.substring(0, S.length()-1));

Les classes du JDK et les types composites Page 5 sur 15 Les classes du JDK et les types composites Page 6 sur 15 Les instructions... catch... finally Ce mot doit être suivi d'un bloc d'instructions. On parlera alors d'un "bloc ". En soit, il ne fair rien d'autre que de permettre l'utilisation de blocs "catch"ou (et) "finally" qui peuvent éventuellement suivre le "bloc " catch Cette clause conduit à attraper une exception. On appelle "bloc catch" la clause catch et le bloc d'instructions qui la suit. La syntaxe est du type : instructions effectuées; instruction ou méthode pouvant lancer une exception de la classe MyException; instructions effectuées si l'exception n'a pas été lancée; catch(myexception e) instructions effectuées si une instance de MyException, a été lancée et donc attrapée; Un "bloc catch" suit nécessairement un "bloc ". Si un "bloc catch" attrape une exception qui a été lancée, le déroulement du programme se poursuit avec l'instruction qui suit le "bloc catch". finally La clause précède un bloc d'instructions. La clause et le bloc d'insructions constituent ce qu'on appelle un "bloc finally". Un "bloc finally" est en général utilisé pour effectuer des nettoyages (fermer des fichiers, libérer des ressources...). Un bloc finally suit: soit un "bloc " soit un "bloc " suivi d'un "bloc catch" Dans les deux cas, quelque soit la façon dont on est sorti du "bloc " (par une instruction break, ou ou continue, ou return, par une propagation d'exceptions, ou bien normalement), les instructions contenues dans le "bloc finally" sont exécutées. Si un "bloc catch" situé entre le "bloc " et le "bloc finally" attrape une exception, les intructions du "bloc catch" sont faites avant celles du "bloc finally". Exemple 4.3 du TD2 (par imom): Un tableau de deux dimension; la première colonne contient les numeros des étudiants comme suit : 1, 2, 3,..., n; les colonnes suivantes (2-ème, 3-ème,..., n-ème) contiennent les résultats en points d'examens de 0 à 20. public class td2 public static String readline(string prompt) int ch; String r = ""; boolean done = false; System.out.print(prompt); while (!done) ch = System.in.read(); if (ch < 0 (char)ch == '\n') done = true; else if ((char)ch!= '\r') r = r + (char)ch; catch(java.io.ioexception e) done = true; return r; public static int readint(string prompt) while (true) return Integer.valueOf(readLine(prompt).trim()).intValue(); catch(numberformatexception e) System.out.println("Ce n'est pas un entier! "); public static void main(string a[]) int resultat[][]; int lines; int i; int j; lines = readint("le nombre des etudiants est : "); resultat = new int[lines][]; for (i=0; i<lines; i++) int colons = readint("nombre de resultats pour l'etudiant " + (i+1) + ": " ); resultat[i] = new int[colons]; for (j=0; j<colons; j++) resultat[i][j] = readint((j+1) + " points: ");

Les classes du JDK et les types composites Page 7 sur 15 Les classes du JDK et les types composites Page 8 sur 15 for (i=0; i<lines; i++) for (j=0; j<resultat[i].length; j++) System.out.println(resultat[i][j]); System.out.println(""); Résultat à l'exécution : Faites des modifications dans le programme : 1. Affichez uniquement les notes par étudiant supérieurs à 10 points. (Corrigé) 2. Calculez la moyenne pour chaque étudiant. (Corrigé) 3. Faites le classement des étudiants suivant leurs moyennes. (Corrigé) Exemple 4.4 du TD3 (par imom): L'exemple qui suit démontre comment retourner un tableau à partir d'une méthode. Dans le programme sont utilisées des méthodes mathématiques. Une description de méthodes est accessible à partir de ce lien : public class td3 static String[] aromate; static String[] aromatset(int n) String[] results = new String[(int)(Math.random()*aromate.length+1)]; for(int i = 0; i < results.length; i++) re: while(true) int t = (int)(math.random() * aromate.length); for(int j = 0; j < i; j++) if(results[j].equals(aromate[t])) continue re; results[i] = aromate[t]; break; return results; public static void main(string[] args) init(); for(int i = 0; i < 4; i++) System.out.println("aromatSet(" + i + ") = "); String[] fl = aromatset(aromate.length); for(int j = 0; j < fl.length; j++) System.out.println("\t" + fl[j]); public static String readline(string prompt) char ch; String r = ""; boolean done = false; System.out.print(prompt); while (!done) ch = (char)system.in.read(); if (ch < 0 ch == '\n') done = true; else if (ch!= '\r') // utiliser pour \r\n translation r = r + ch; catch(java.io.ioexception e) done = true; return r; public static int readint(string prompt) while(true) return Integer.valueOf(readLine(prompt).trim()).intValue(); catch(numberformatexception e)

Les classes du JDK et les types composites Page 9 sur 15 Les classes du JDK et les types composites Page 10 sur 15 System.out.println("ce n'est pas un entier!! "); public static void init() aromate = new String[readInt("nombre des aromates: ")]; for(int i = 0; i<aromate.length; i++) aromate[i] = readline("aromate "+i+": "); L'instruction continue (continue re;) avec une étiquette (re:) sont utilisées pour sortir des deux itérations. Modifiez le programme pour ajouter pourcentage (random) pour chaque aromate, afin que la somme des pourcentages sera egale à 100%. Les exceptions. Une exception correspond à un événement anormal ou inatendu. Les exceptions sont des instances de sous-classes des classes java.lang.error (pour des erreurs graves qui provoquent l'arrêt du programme) et java.lang.exception (pour des événements inattendus, qui sont souvent traités). La hiérarchie de classes d'exceptions : - class java.lang.throwable - class java.lang.error - class java.lang.linkageerror - class java.lang.virtualmachineerror - class java.lang.exception - class java.lang.classnotfoundexception - class java.util.zip.dataformatexception - class java.io.ioexception - class java.lang.runtimeexception - class java.lang.arithmeticexception - class java.lang.classcastexception - class java.lang.illegalargumentexception - class java.lang.numberformatexception - class java.lang.indexoutofboundsexception - class java.lang.arrayindexoutofboundsexception - class java.lang.stringindexoutofboundsexception - class java.lang.nullpointerexception Exemple 4.5 : L'objectif est de calculer la moyenne d'entiers, strictement positifs, envoyés en arguments par la ligne de commande. Les arguments non entiers et négatifs doivent être éliminés. Voici un premier essai : class TestException static int moyenne(string[] suite) int s = 0, a, nb = 0; for (int i = 0; i < suite.length; i++) a = Integer.parseInt(suite[i]); s += a; nb++; catch (NumberFormatException e) System.out.println("Le " + (i+1) + "-eme element n'est pas un entier") return s/nb; public static void main(string[] argv) System.out.println("La moyenne est " + moyenne(argv)); Résultat à l'exécution : Si la chaîne de caractères suite[i] ne correspond pas à un entier, la méthode parseint de la classe Integer lance une exception, instance de java.lang.numberformatexception définie dans catch. Les instructions suivantes en ne sont alors pas effectuées et on passe dans la section catch. Après traitement de l'exception le déroulement du code poursuit sa route dans la section et ainsi de suite. Si nb vaut 0, une exception, instance de java.lang.arithmeticexception est lancée. Celle-ci n'étant pas attrapée, elle se propage alors jusqu'à la fin du programme. Pour corriger cela on ajoute une nouvelle classe pour pouvoir attraper et traiter sur place ce problème. Pour signaler un événement exceptionnel d'un type non prévu par l'api, il faut étendre la classe java.lang.exception ; la classe étendue contient en général un ou plusieurs constructeur(s) et éventuellement une redéfinition de la méthode tostring. Lors du lancement de l'exception à l'aide du mot réservé throw, on crée une instance de la classe définie. Voilà une classe héritant de la classe Exception.

Les classes du JDK et les types composites Page 11 sur 15 Les classes du JDK et les types composites Page 12 sur 15 class MonException extends Exception MonException() System.out.println("MonException est appele"); public String tostring() return("aucune entree n'est valide"); Le contrôle des entiers positifs peut-être fait par une classe suplémentaire ExceptionPositive qui étend la classe parente Exception : class ExceptionPositive extends Exception ExceptionPositive(String s) super(s); public static void main(string[] argv) System.out. println("la moyenne est " + moyenne(argv)); catch (MonException e) System.out.println(e); finally System.out.println("A bientot!"); Résultat à l'exécution : Le point final (Exemple 4.6) : class TestException static int moyenne(string[] suite) throws MonException int s = 0, a, nb = 0; for (int i = 0; i < suite.length; i++) a = Integer.parseInt(suite[i]); if ( a < 0 ) throw new ExceptionPositive("Entier negatif"); s += a; nb++; catch (NumberFormatException e) System.out.println("Le " + (i+1) + "-eme element n'est pas un entie catch (ExceptionPositive e) System.out.println("Le "+ (i+1) + "-eme element est un " + e.getmessage if (nb == 0) throw new MonException(); Ici le programme ne prend pas en compte les entiers négatifs entrées au clavier en instanciant la classe ExceptionPositive. Par la suite le message "Entier negatif" est passé en paramètre à la classe parente (Exception). Le message est accessible par sa méthode getmessage() qui affiche cette chaîne. Si il y a lieu nb == 0 l'exception levée instacie la classe MonException. Ici on voit que le nombre de section catch n'est pas limité à une seule. L'exemple ci-dessus a pour objectif aussi de montrer l'effet d'un "bloc finally". Ce bloc est en général utilisé pour effectuer des nettoyages (fermer des fichiers, libérer des ressources...) ou affichage final. On doit toujours l'utiliser en association avec un "bloc ". Quelque soit la façon dont on est sorti du "bloc " (par une instruction break, ou continue, ou return, par une propagation d'exceptions, ou bien normalement), les instructions contenues dans le "bloc finally" sont exécutées. Si un "bloc catch" situé entre le "bloc " et le "bloc finally" attrape une exception, les intructions du "bloc catch" sont exécutées avant celles du "bloc finally". Les Entrées - Sorties Il y a quatre classes de base, abstraites, pour traiter les flots de données héritant directement d'object : return s/nb; pour traiter de flots d'octets

Les classes du JDK et les types composites Page 13 sur 15 Les classes du JDK et les types composites Page 14 sur 15 la classe InputStream la classe OutputStream pour traiter de flots de caractères la classe Reader la classe Writer Une méthode simple. La classe Syteme.in contient une méthode read() qui lit des octets et rend un nombre compris entre 0 et 255. Pour effectuer une lecture au clavier on propose la méthode suivante : la méthode nexttoken() renvoie l'élément suivant. Exemple d'utilisation : StringTokenizer st = new StringTokenizer("this is a test"); while (st.hasmoretokens()) System.out.println(st.nextToken()); Saisie au clavier : public static String Lit() throws java.io.ioexception String S = ""; char C; while ((C = (char)system.in.read())!= '\n') S += C; return (S.substring(0, S.length()-1)); import java.io.*; import java.util.stringtokenizer; class SaisieClavier public static void main (String[] argv) throws IOException, NumberFormatExceptio int somme = 0; String ligne; StringTokenizer st; BufferedReader entree = new BufferedReader(new InputStreamReader(System.in)) Tant que l'utilisateur n'a pas frappé sur la touche ENTRÉE les caractères saisis sont concaténés à la chaîne s. La méthode returne une chaîne de caractère. Exemple 4.7 : Utilisant cette méthode reprendre l'exemple 4.6 pour modifier la rentrée des données. Corrigé Méthodes basées sur les classes InputStream et StringTokenizer. ligne = entree.readline(); while(ligne.length() > 0) st = new StringTokenizer(ligne); while(st.hasmoretokens()) somme += Integer.parseInt(st.nextToken()); ligne = entree.readline(); entree.close(); System.out.println("La somme vaut : " + somme); On utilise deux classes de java.io, la classe InputStreamReader et la classe BufferedReader. La classe InputStreamReader admet un constructeur InputStreamReader(InputStream), c'est-à-dire un constructeur qui admet en paramètre un flot d'entrée. La classe BufferedReader a un constructeur qui prend en argument une instance de Reader dont hérite la classe InputStreamReader. Cette classe permet en particulier de lire une ligne d'un texte. On peut lire ce qui est envoyé par le clavier ligne par ligne et on découpe le contenu de chaque ligne avec la classe StringTokenizer pour récupérer les entiers attendus (voir mots). La classe StringTokenizer Cette classe fait partie du package java.util. Elle permet de décomposer une chaîne de caractères en une suite de "mots" séparés par des "délimiteurs". Les délimiteurs sont les caractères espace, tabulation, retour chariot et changement de ligne. La classe StringTokenizer fournit deux méthodes importantes qui permettent d'obtenir les différentes parties d'une chaîne l'une après l'autre : la méthode hasmoretokens() indique s'il reste des éléments à extraire; Lire depuis un fichier texte et ecrire dans un fichier texte. La classe FileReader permet de lire des caractères dans un fichier. La classe FileWriter permet d'écrire des caractères dans un fichier. Le programme ci-dessous écrit une chaîne de caractères dans un fichier nommé copie.txt puis copie le fichier essai.txt caractère par caractère dans le fichier copie.txt. import java.io.*; class LitEcritTexte public static void main(string[] argv) throws IOException FileReader lit; FileWriter ecrit; int c; lit = new FileReader("essai.txt"); ecrit = new FileWriter("copie.txt"); ecrit.write("copie de essai.txt\n");

Les classes du JDK et les types composites Page 15 sur 15 while((c = lit.read())!= -1) ecrit.write(c); lit.close(); ecrit.close(); Le fichier essai.txt doit exister. Tester le programme. ivmad, 1998-2003 Version PDF du TD/TP-4 à télécharger ou à imprimer