La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Le langage JAVA Intervenants : Denis Marchal - Frédéric Moreau Année scolaire 2004-2005.

Présentations similaires


Présentation au sujet: "1 Le langage JAVA Intervenants : Denis Marchal - Frédéric Moreau Année scolaire 2004-2005."— Transcription de la présentation:

1 1 Le langage JAVA Intervenants : Denis Marchal - Frédéric Moreau Année scolaire

2 2 Sommaire Introduction à Java La syntaxe Les concepts Objet Classes, méthodes, attributs Héritage, polymorphisme, encapsulation Les interfaces Les classes de base Les exceptions Les entrées-sorties

3 3 Introduction à Java

4 4 Origine du langage Développé par SunSoft pour réaliser le développement de systèmes embarqués Projet « Oak » Évolution gérée par JavaSOFT (SunSoft) Quelques liens –http://www.javasoft.com/ –http://www.sunsoft.com/ –http://www.developer.com/directories/pages/dir.java.htm/ (anciennement –http://www.javaworld.com/ –http://tips.iworld.com/ sélectionnez « Java » Introduction à Java

5 5 Java est simple Simplicité relative par rapport au C++ Certains concepts du C++ à lorigine de nombreux bugs ont été supprimés –Pointeurs –Surcharge des opérateurs –… Des études comparatives de développements montrent une diminution du coût de développement de 30 à 35 % Introduction à Java

6 6 Java est un langage objet Java reprend des caractéristiques de différents langages à objets –La syntaxe du C++ –La gestion dynamique de la mémoire SmallTalk –Certains concepts de ADA et Objective C Toute ligne de code JAVA se trouve obligatoirement dans une méthode à lintérieur dune classe Java est un langage intermédiaire entre les langages statiques (C++) et les langages interprétés (SmallTalk) Nombreuses classes permettant le développement de systèmes répartis –Classes daccès aux ressources dun serveur Web Introduction à Java

7 7 Java est robuste Le compilateur Java est très strict Contrôle de typage « fort » Le compilateur vérifie que les erreurs sont traitées par le développeur –Si une erreur retournée par une méthode nest pas traitée, le programme ne compilera pas La gestion de la mémoire nest pas à la charge du développeur –Garbage Collector (« ramasse-miettes) –Pas de pointeurs Un débordement dindex dans un tableau provoque une erreur –La mémoire nest pas écrasée Introduction à Java

8 8 JAVA est portable Un code source Java est compilé pour générer un code assembleur virtuel : le byte code Ce code est conçu pour : –Etre rapidement interprété –Etre optimisable au moment de son exécution –Etre facilement traduit en instructions assembleur lors de son exécution –Etre compact en moyenne, une instruction byte code = 1,8 octet, RISC = 4 octets –Etre vérifiable Le byte code est exécuté par un logiciel : la Machine virtuelle La machine virtuelle est dépendante de la plate-forme Introduction à Java

9 9 Java est performant ! Introduction à Java Prog.java Prog.class Système dexploitation MV MV+ JIT Code binaire en mémoire Compilateur Code binaire

10 10 JAVA est sécurisé Le compilateur interdit toute manipulation en mémoire Le Verifier contrôle que le byte code chargé dans la machine virtuelle est conforme Le ClassLoader est responsable du chargement des classes dans le « SandBox ». Il vérifie que la classe chargée nen écrase pas une autre en mémoire Le SecurityManager contrôle les opérations dentrée/sortie locales et sur le réseau (Applet uniquement) La portabilité de Java permet de déplacer dynamiquement du code Java sur un réseau Introduction à Java

11 11 JAVA supporte le multi-threading La gestion des multi-threads est intégrée dans le langage et dans la Machine Virtuelle Grande simplification Java permet de synchroniser les threads Introduction à Java P1P2 Mémoire T1T2 Mémoire Inter-process Synchronisation Multi-processusMulti-thread

12 12 Le JDK Le JDK = Java Development Kit –Ancienne version : –Version actuelle : 1.2 Il contient : –Un ensemble de classes de base regroupées en packages Interface utilisateur, conteneurs, gestion des threads, réseau… –Des exécutables : machine virtuelle, compilateur… –Des bibliothèques permettant de coupler du Java et du C Peut être téléchargé sur Il est gratuit Introduction à Java

13 13 Les environnements de développement Ils offrent des fonctions avancées : –Éditeur évolué (couleur, autocorrection, présentation…) –Assistance syntaxique –Générateur de code –Débugage –Environnement dexécution –… Loffre actuelle –Jbuilder 4 (Inprise) –Visual J++ (Microsoft) –Visual Age (IBM) –Visual Cafe Pro –… Introduction à Java

14 14 Les classes de base AWT : Abstract Window Toolkit –Classes dIHM : boutons, listes, gestion générique de la géométrie, traitement des événements par abonnement, copier/coller, glisser/déplacer Réseau –Sockets (serveurs, clients), Web (URL), Applet… Entrée-sortie –Fichier, Pipe, accès direct… Classes de base –Conteneurs, date, Chaîne de caractéres RMI –R emote Method Invocation –Middleware objet 100 % java Introduction à Java

15 15 Les classes de base JDBC –Accès aux bases de données relationnelles Beans –Composant Java Sécurité –Cryptage, identification, signature Internationalisation –Format de date/heure –messages localisés –caractères UNICODE 2 JavaIDL –Support de CORBA Introduction à Java

16 16 Hello Word class Hello { int k = 5; public static void main (String argv[]) { Hello hello = new Hello(); for (int I = 0; I < hello.k; I++) hello.SayHello(); } public void SayHello() { System.out.println("Hello Java World !!! "); } Introduction à Java Edit Hello.java Javac Hello.java Java Hello

17 17 La syntaxe

18 18 La syntaxe Constitution dun programme Un programme Java utilise un ensemble de classes Les classes sont regroupées par package Une classe regroupe un ensemble dattributs et de méthodes Package Classe Attributs Méthodes

19 19 Déclaration dune classe Le nom de la classe est spécifié derrière le mot clé « class » Le corps de la classe est délimité par des accolades On définit dans le corps les attributs et les méthodes qui constituent la classe La syntaxe class Test { }

20 20 Définition dun méthode Une méthode est constituée de : –Dun nom –Dun type de retour –De paramètres (éventuellement aucun) –Dun bloc dinstructions Un paramètre est constitué : –Dun type –Dun nom « void » est le mot-clé signifiant que la méthode ne renvoie pas de valeur La syntaxe class Test { int calculer (int taux, float delta) { }

21 21 Bloc dinstructions Un bloc dinstructions est délimité par des accolades Il contient un ensemble dinstructions Toute instruction est terminée par un point virgule Un bloc dinstructions peut contenir dautres blocs dinstructions La syntaxe { int i = 0; if (i==0) System.out.println ("Valeur de i : " + i); }

22 22 Instructions possibles Déclaration dune variable Appel de méthode Affectation Instruction de boucle (while, for…) Instruction de test (if, switch) La syntaxe

23 23 Corps dune méthode Le corps dune méthode est un bloc dinstructions Le mot clé « return » permet de renvoyer une valeur à lappelant de la méthode Il doit renvoyer une valeur du même type que le type de retour de la méthode La syntaxe class Test { int calculer (int taux, float delta) { return taux * delta; }

24 24 Déclaration dune variable Une variable possède un type et un nom Le type peut être un type de base ou une classe Linitialisation dune variable peut se faire au moment de la déclaration La syntaxe { int compteur; int indice = 0; Voiture golf; Voiture twingo = new Voiture(); }

25 25 Portée dune variable La portée dune variable sétend jusquà la fin du bloc dans lequel elle est définie La syntaxe { int compteur; … // compteur est accessible } // compteur nest plus accessible }

26 26 Nom de classes, de variables et de méthodes Un nom peut être constitué de lettres, de chiffres et du caractère souligné Il ne peut pas commencer par un chiffre Le caractère $ est utilisable mais à éviter Les mots réservés (if, class, int…) ne peuvent pas être utilisés Les développeurs ont défini un consensus de nommage : –Les mots du langage sont en minuscule –Les noms de classe commencent par une majuscule –Les noms de méthodes et de variables comment par une minuscules –Chaque mot qui compose le nom commence par une majuscule La syntaxe

27 27 Point dentrée Une application possède un point dentrée fourni par la méthode « main » (sauf les applets) Attention à la casse, Java est sensible aux majuscules/minuscules La syntaxe class Test { public static void main (String[] args)) { … // corps de la méthode main }

28 28 Les différents types de base (1/2) Types arithmétiques Type caractère Type booléen La syntaxe byte8 bitssigné(-128, 127) short16 bitssigné(-32768, 32767) int32 bitssigné( , ) long64 bitssigné( , ) float32 bitssigné(1.4E-45, E38) double64 bitssigné(4.9E-324, E308) char16 bitsnon signé UNICODE2 boolean1 bitdeux valeurs possibles : true ou false

29 29 Les différents types de base (2/2) Les types de base sécrivent en minuscules (int, float..) Le type « int » est codé sur 4 octets portabilité Le type « char » est codé sur 2 octets pour supporter les jeux de caractères Unicode Une chaîne de caractères est déclarée avec le mot- clé « String » –Ce nest pas un type de base –Il se manipule comme un type de base –Ce nest pas équivalent à un tableaux de caractères La syntaxe String s = "Hello World"

30 30 Laffectation Lopérateur « = » permet daffecter la valeur de lexpression qui est à droite à la variable qui est à gauche La syntaxe class Test { int calculer () { int i = 0; int j = 6; i = (j + 5) * 3; return i + j; }

31 31 Les opérateurs arithmétiques Sappliquent sur les types entiers ou réels –+, -, *, /, % (modulo), +=, -=, *=, /= Les opérateur = et += peuvent être utilisés sur des variables de type « String » En terme de performance, il est recommandé dutiliser la notion raccourcie La syntaxe int x, y, z; y = 2; z = 3; x = y * z ; //x vaut 6 x += 2 ; //x vaut 8 y = x / 4 ; //y vaut 2 y =x % 2 ; //y vaut 0

32 32 Opérateurs unaires Sappliquent à un seul opérande de type entier ou réel –-, --, +, ++ La pré et la post-incrémentation diminuent le nombre de lignes de byte code générées La syntaxe int x, y; x = 3; y = -x ; //y vaut -3 y = ++x ; //y vaut 4, x vaut 4 y = x-- ; //y vaut 4, x vaut 3

33 33 Opérateurs de comparaison Sappliquent sur des entiers, booléens, réels ==, !=,, >= Ces opérateurs retournent une valeur du type boolean La syntaxe { boolean droitDeVote; int age; droitDeVote = (age >= 18) ; }

34 34 Opérateurs logiques Sappliquent au type boolean –! (not), && (and), II (or) –&, I Retournent un type boolean & renvoie « true » si les deux expressions renvoient « true » && a le même comportement mais névalue pas le seconde expression si la première est « false » | renvoie « true » si lune des deux expressions renvoie « true » || a le même comportement mais névalue pas le seconde expression si la première est « true » La syntaxe

35 35 Les conversions de type (1/2) Il y a 4 contextes possibles de conversion (cast) : –Conversion explicite –Affectation –Appel de méthode –Promotion arithmétique Certaines conversions provoquent une perte de valeur –Float en int, int en short, short en byte Le type boolean ne peut pas être converti en entier La syntaxe

36 36 Les conversions de type (2/2) La syntaxe double f =3.14 ; int i,j ; short s ; i = (int)f;// float int (conversion explicite) float ff = (float)3.14; i = s;// short int (affectation) // appel de la méthode int obj.m(int i) obj.m(s);// short int (appel de méthode) // division dun entier et dun flottant : lentier i est // converti en flottant, puis la division flottante est calculée f = i / (double)j;// f vaut …

37 37 Test conditionnel La syntaxe class Test { public static void main (String args[]) { int compteur = 0; boolean debut; if (compteur == 0) { debut = true; System.out.println("Début de la partie"); } else if (compteur ==10) System.out.println("Fin de la partie"); else System.out.println("Partie en cours"); }

38 38 Boucles while La syntaxe class Test { public static void main (String args[]) { int i; do { System.out.println("Entrez un nombre < 10"); c= lireUnInt(); } while (c>10); while (c>0) afficher (c--); } public static int lireUnInt() {……} public static void afficher (char c) {……} }

39 39 Boucles for La syntaxe class Test { public static void main (String args[]) { int i; for (i=0 ; i <=5 ; i++) { System.out.println (i); …… } for (j=0 ; j <=5, j++) { System.out.println (i); …… } // i est accessible // j nest pas accessible }

40 40 Switch La syntaxe Le « switch » ne sapplique quau type entier ou caractère. class Test { public static void main (String args[]) { char c = (char)System.in.read(); switch(c) { case o : case O : System.out.println("Oui"); break; case n : case N : System.out.println("Non"); break; default : System.out.println("Mauvaise réponse"); break; }

41 41 Commentaires (1/2) Lutilisation de commentaires est fortement recommandé /*ceci est un commentaire sur plusieurs lignes */ //ceci est un commentaire sur une ligne Javadoc (fourni dans le JDK) génère la documentation des classes en au format HTML –/** : début de commentaire Javadoc : exemple de tag auteur –*/ : fin de commentaire Javadoc La syntaxe

42 42 Les tableaux : description Nombre fixe déléments. Taille fixée à la construction Les éléments sont de même type (type de base ou classe) Les tableaux sont alloués dynamiquement par « new » Un tableau est détruit lorsquil nest plus référencé Les tableaux multi-dimensionnels sont des tableaux de tableaux La syntaxe

43 43 Les tableaux : syntaxe 2 syntaxes pour lallocation : Une méthode peut renvoyer un tableau La syntaxe int[] monTableau = new int[10]; int monTableau[] = new int[10]; classe Test { int[] construireTableau (int dimension) { int tab[] = new int[dimension]; return tab; }

44 44 Les tableaux : initialisation Lattribut « length » renvoie la dimension du tableau Lindice des éléments du tableaux varie de 0 à « tableau.length –1 » Initialisation statique : Initialisation dynamique : La syntaxe int[] monTableau = {1, 2, 3}; int[] param = new int[10]; for (int i = 0; i < param.lenght ; i++) param[i]= i;

45 45 Les concepts Objet

46 46 Les concepts de base Les concepts de base de lobjet sont simples et peu nombreux –Objet et Classe –Encapsulation –Généralisation/Spécialisation –Polymorphisme Ces concepts impactent directement sur la qualité, les délais et les coûts de développement et de la maintenance des logiciels Il existe de nombreux autres concepts, mais non fondamentaux Les concepts de base sont simples, mais leur utilisation sur un projet demande de lexpérience Les concepts Objet

47 47 Quest-ce quun objet ? Cest une abstraction dune entité du monde réel Les concepts Objet Monde réelModèle Voiture Simulateur de circulation Voiture BoîteMoteur Conception de voiture Abstraction

48 48 La généralisation / spécialisation (1/2) Généralisation = recherche des similitudes –Identifier les objets du monde réel connus par le système –Regrouper les objets en classes –Généraliser les classes en super classes Règle dor : en cas de doute sur la pertinence dune classe, il est préférable de ne pas la définir La généralisation est caractérisé par lexpression : « est un type de » Les concepts Objet

49 49 La généralisation / spécialisation (2/2) TracteurTrainVoiture Moyen de transport Les concepts Objet > Monde réel Classes concrètes Classes abstraites

50 50 Attribut, Opération, Identité ? Attribut : valeur portée par un objet Opération : service rendu par lobjet –Synonyme : Méthode, Service Identité : un objet doit être identifiable –Concept équivalent pour les SGBDR : clef primaire Les concepts Objet

51 51 Attribut, Opération, Identité (2/2) Une classe décrit les Attributs, les Opérations et lIdentité de ses objets Les concepts Objet Voiture couleur : Couleur=Color.Black vitesseMax : float = 150 demarrer() arreter() accelerer(acc : float) Freiner(acc : float) Bmw :Voiture couleur=rouge vitesseMax=230 Twingo : Voiture couleur=jaune vitesseMax=140 Instance de

52 52 Accès aux attributs et invocation des méthodes Laccès aux attributs et aux méthodes définis dans la classe se fait à partir dun objet Un objet est une instance de classe Il possède des valeurs propres pour les attributs définis dans la classe Les concepts Objet Voiture clio;// Déclaration dune variable clio = new Voiture();// Création de lobjet clio.couleur = « rouge »;// Accès à lattribut clio.demarrer();// Appel de la méthode

53 53 Définition dune méthode <> invocation dune méthode Les concepts Objet class Voiture {// Définition de la classe float vitesse; float consommation; void accelerer (float delta) { consommation = consommation + delta / 10; vitesse = vitesse + delta; } ………… // Utilisation dun objet Voiture clio = new Voiture(); clio.accelerer(20); Définition du paramètre Passage du paramètre

54 54 Les Associations (1/2) Lassociation est le lien qui peut exister entre objets de différentes classes pour leur permettre de communiquer Deux objets sont associés si : –Un objet connaît lidentité et la classe dun (ou de plusieurs) autre objet Il existe un type particulier dassociation nommé Agrégation ou Composition –Association se lisant « Est formée par lassemblage de » ou « Contient » Les concepts Objet

55 55 Les Associations (2/2) Lecture du modèle UML : –Une personne peut posséder entre 0 et n voitures –Toute voiture possède un propriétaire –Une voiture est formée de 4 roues et dune carrosserie Les concepts Objet RoueCarroserie Personne Voiture <-possède 0..* 4 +propriétaire

56 56 Lhéritage Mécanisme provenant dune relation de Généralisation/Spécialisation Une sous-classe hérite des attributs, méthodes et associations de ses super classes Les concepts Objet MoyenDeTransport couleur vitesse demarrer() arreter() Voiture typeCarrosserie marcheArriere() Moto typeDePot faireUneRoueAvant()

57 57 Quest-ce que lencapsulation ? Un mécanisme permettant de masquer les choix dimplémentation Permet de changer limplémentation sans incidence sur le reste du système si linterface nest pas modifiée Un objet possède une interface publique et une implémentation privée Chaque objet est un mini-serveur mise en place de systèmes distribués via CORBA ou DCOM Les concepts Objet interface instruction implémentatio n

58 58 Quest-ce que la collaboration ? Un objet utilise les services dautres objets Les objets collaborent Chaque objet est mini-serveur et client dautres objets Les concepts Objet Feu Voiture Velo changer (Vert) Demarrer()

59 59 Quest-ce que le polymorphisme ? Propriété pour un même message de déclencher des méthodes différentes Les concepts Objet Feu Voiture Velo changer (Vert) Demarrer() - Débrayer - Passer la première - Accélérer - Embrayer - Pédaler

60 60 Résumé Les concepts fondamentaux : –Classe, Objet –Généralisation/Spécialisation (héritage) –Encapsulation –Polymorphisme Ces concepts ont un impact direct sur : –La qualité du système –Le coût de développement et de maintenance –Le délai du développement et de maintenance Si les concepts de base sont simples, leur utilisation nécessite de lexpérience Les concepts Objet

61 61 Classes,méthodes, attributs

62 62 Déclarer une classe Une classe « public » est visible en dehors du package –Par défaut, elle nest pas visible –On ne peut pas mettre 2 classes publiques dans un fichier erreur de compilation Une classe « final » ne peut pas être dérivée (pas de sous-classes) –Utile pour des raisons de sécurité et de performances –De nombreuses classes du JDK sont « final » Une classe « abstract » ne peut pas être instanciée (new) Classes,méthodes, attributs

63 63 Déclarer un attribut (1/3) Lors de la création dun objet, les attributs sont initialisés par défaut : –À zéro pour les valeurs numériques –À « null » pour les références –À « false » pour les booléens Les attributs peuvent être initialisés : –Lors de la déclaration –Dans le constructeur Utiliser des règles de nommage cohérentes : –Le noms des classes commence par une majuscule –Lidentification dun attribut ou dune méthode commence par une minuscule Classes,méthodes, attributs

64 64 Déclarer un attribut (2/3) La valeur dun attribut déclaré comme « static » est partagée par toutes les instances (objets) de la classe La valeur dun attribut déclaré comme « final » est constante Classes,méthodes, attributs

65 65 Déclarer un attribut (3/3) Classes,méthodes, attributs class Date { int _jour;// initialisé à 0 int _mois = 1;// initialisation explicite int _an = 2000; final static int max_mois = 12;//Constante void print () { System.out.println(_jour + "/" + _mois + "/" + _an); } ……… Date d = new Date();// instantiation de lobjet d.print();// appel de la méthode print

66 66 Le passage de paramètres Lors de lappel dune méthode prenant en paramètre des types de bases, les paramètres sont passés par valeur –La valeur des variables passées en paramètres est dupliquée –Ce sont ces valeurs dupliquées qui sont manipulées dans la méthode Lors de lappel dune méthode prenant en paramètre des objets, les paramètres sont passés par référence –Ils peuvent être modifiés dans la méthode Classes,méthodes, attributs

67 67 Surcharge (1/3) Une méthode surchargée est une méthode qui peut être appelée avec plusieurs ensembles de listes de paramètres –Permet décrire plusieurs versions dune méthode Exemple void print () {…} void print (int i) {…} int print (float f) {…} Le type du paramètre de retour nest pas pris en compte par le mécanisme de résolution de surcharge Classes,méthodes, attributs

68 68 Surcharge (2/3) A lappel, Java détermine quelle est la méthode dont la liste des paramètres est la plus proche des paramètres effectivement envoyés par lappelant Si aucune signature de méthode ne correspond au valeurs envoyées, la machine virtuel Java est capable de convertir une valeur envoyée dans le type du paramètre Java détermine le coût des conversions possibles et choisit le coût le moins élevé. Si le coût global de conversion dépasse 10, Java refuse lappel Classes,méthodes, attributs

69 69 Surcharge (3/3) Classes,méthodes, attributs byteshortcharintlongfloatdouble byte Short Char Int Long Float double Coût des conversions de vers

70 70 Constructeurs Cest une ou plusieurs méthode(s) permettant dinitialiser les objets Le constructeur est appelé lors de la création de lobjet Le constructeur a le même nom que la classe Il na pas de valeur de retour (void est un type de retour) Le constructeur peut être surchargé Java fournit un constructeur par défaut (sans paramètres) si aucun constructeur nest défini explicitement Classes,méthodes, attributs

71 71 Exemple de constructeurs Classes,méthodes, attributs class Date { int _jour = 1; int _mois = 1; int _an = 2000; Date() { _an = 1999; } Date (int jour, int mois, int an) { _jour = jour; _mois = mois; _an = an; } ……… Date d = new Date(10,12,2000); // instantiation de lobjet

72 72 Création dobjets Allocation de lespace mémoire pour stocker les variables dinstances Utilisation de lopérateur « new » Appelle du constructeur adéquat Retourne une référence sur lobjet créé Classes,méthodes, attributs class Voiture {// Définition de la classe String _type; Voiture (String type) { _type = type; } void demarrer () {………} } ………… Voiture clio = new Voiture("ClioRT"); // Création de lobjet Voiture renault = clio; // Ajout dune référence sur lobjet renault.demarrer();

73 73 Le Garbage Collector (ramasse-miettes) Il prend en charge la gestion de la mémoire Il alloue lespace mémoire lors de la création des objets Il libère la mémoire occupé par un objet dès quil ny a plus aucune référence qui pointe vers cet objet Il est capable de compacter la mémoire pour éviter la fragmentation Cest un « Thread » de la machine virtuel Java Classes,méthodes, attributs

74 74 « this » « this » = référence sur lobjet courant Représente linstance courante en train de sexécuter Classes,méthodes, attributs class Compte { void crediter(float montant) {……}; void debit(float montant) {……}; } class Versement { void valider() {……} void effectuer(Compte s, Compte d, float montant) { s.debiter(montant); d.crediter(montant); this.valider(); }

75 75 Utilisation de « this » dans un constructeur Classes,méthodes, attributs class Personne { String _nom ; String _prenom; float _taille; Personne(String nom, String prenom) { _nom = nom; _prenom = prenom; } Personne(String nom, String prenom, float taille) { this(nom, prenom); _taille = taille; }

76 76 « null » La valeur « null » peut être assignée à nimporte quelle référence sur un objet Une méthode peut retourner « null » Lappel dune méthode sur une référence dobjet valant « null » provoque une erreur dexécution (NullPointerException) On peut tester une référence pour savoir si elle vaut « null » Classes,méthodes, attributs Personne moi = new Personne(); …… if (moi != null) { System.out.println("Jexiste toujours ! "); }

77 77 Opérateurs sur les références Egalité de deux références : == –Compare si 2 références pointent vers le même objet Différence de deux références : != –Compare si 2 références pointent vers des objets différents Type dinstance de la référence : instanceof –Permet de savoir si lobjet référencé est une instance dune classe donnée ou dune de ses sous-classes Classes,méthodes, attributs Personne moi = new Personne(); …… if (moi instanceof Personne) { System.out.println("Je suis bien une personne! "); }

78 78 Méthodes « static » Le mot-clé « static » permet de définir une méthode comme statique Une méthode statique ne peut accéder quaux attributs de la classe déclarés comme « static » Lappel dune méthode statique ne se fait pas sur un objet, mais sur une classe –Exemple : Math.cos(3.14); Lutilisation dune méthode statique ne nécessite pas la création dun objet Classes,méthodes, attributs

79 79 Exemple de méthode « static » Classes,méthodes, attributs class MathUtil { final static double _PI = 3.14 ; static double PI() { return _PI; } static double Carre(double x) { return x * x; } static double Demi(double x) { return x / 2; } …… double i = MathUtil.Carre(5); double x = MathUtil.PI();

80 80 Héritage, polymorphisme, encapsulation

81 81 Héritage (1/2) Toute classe Java est une sous-classe de la classe « Object » Java ne permet pas lhéritage multiple La classe dérivée peut changer limplémentation dune ou plusieurs méthodes héritées : redéfinition Il est possible de faire en sorte que lon ne puisse pas hériter dune classe en particulier : utilisation du mot-clé « final » Il est possible de faire en sorte quune méthode ne puisse pas être redéfinie : utilisation du mot-clé « final » Héritage, polymorphisme, encapsulation

82 82 Héritage (2/2) Héritage, polymorphisme, encapsulation class Felin { boolean a_faim = true; void parler() { } void appeler() { System.out.println("minou minou,…"); if (a_faim) parler(); } final class Chat extends Felin { String race; void parler() { System.out.println("miaou! "); } } final class Lion extends Felin { void parler() { System.out.println("roar! "); } void chasser() {……} }

83 83 Conversion entre classes Si une variable référence un objet dune classe, elle peut référencer un objet de nimporte laquelle de ses sous-classes Héritage, polymorphisme, encapsulation class Felin {………} class Lion extends Felin {………} Lion lion = new Lion(); Felin felin; felin = lion;// OK conversion implicite : les lions // sont des félins lion = felin// ERREUR : tous les félins ne sont pas // des lions

84 84 Conversion ascendante, conversion descendante Héritage, polymorphisme, encapsulation class Felin {………} class Lion extends Felin {………} …… Felin felin = new Felin(); Lion lion = new Lion(); felin = lion;// Conversion ascendante felin.parler();// « roar ! » felin.chasser()// Méthode introuvable lion = felin;// ERREUR : conversion explicite nécessaire lion = (Lion)felin;// Conversion descendante explicite lion.parler();// « roar ! » lion.chasser();// OK Chat chat = new Chat(); felin = chat;// Conversion ascendante lion = (Lion)felin// ERREUR java ClassException

85 85 Polymorphisme (1/2) Une méthode polymorphe est une méthode déclarée dans une super-classe et redéfinie dans une sous-classe Une méthode Java st par défaut polymorphe Les méthodes « final » ne peuvent pas être redéfinies –Permet à la machine virtuel doptimiser le byte-code –Est utilisé pour des raisons de sécurité Héritage, polymorphisme, encapsulation

86 86 Polymorphisme (2/2) Héritage, polymorphisme, encapsulation class Cirque { Felin f_list[] = new Felin[3]; Cirque() { f_list[0] = new Lion(); f_list[1] = new Chat(); f_list[2] = new Tigre(); } void appeler() { for (int i = 0; i<3 ; i++) { Felin f = f_list[i]; f.parler(); }

87 87 Super (1/2) Le mot-clé « super » permet daccèder aux méthodes et aux attributs de la super-classe « super » est utilisé dans le constructeur de la classe dérivée pour appeler celui de la super-classe –Cela permet de factoriser du code –« super(…) » doit être la première instruction du constructeur Héritage, polymorphisme, encapsulation class Felin { int _nbPattes; Felin(int nbpattes) { _nbPattes = nbPattes; } } class Chat { Chat() { super(4); race = "goutière"; } }

88 88 Méthodes et classes abstraites Une méthode abstraite est une méthode dont on donne la signature sans en décrire limplémentation –Le mot-clé « abstract » permet dindiquer quune méthode doit être redéfinie dans une sous-classe Une classe abstraite ne peut pas être instanciée –Le mot-clé « abstract » permet de bloquer linstanciation –Une classe possédant une méthode abstraite est abstraite Héritage, polymorphisme, encapsulation abstract class Felin { abstract void parler() {…] } class Chat extends Felin { void parler() { System.out.println("miaou ! "); } } Felin f = new Felin();// Ne compile pas

89 89 Les packages : définition (1/2) Un package est une bibliothèque de classes On regroupe les classes dun même domaine dans un package Les packages sont organisés hiérarchiquement La notion de package apporte un niveau dencapsulation supplémentaire Héritage, polymorphisme, encapsulation

90 90 Les packages : définition (2/2) Les classes du JDK sont classées dans des packages Java importe automatiquement le package « java.lang » qui contient des classes comme « Thread » ou « System » Héritage, polymorphisme, encapsulation java langutil awt net event String.class Thread.class Date.class Vector.class Socket.class URL.class Button.class List.class …

91 91 Les packages : utilisation (1/2) Il y a 2 manières dutiliser une classe stockée dans un package : –Utilisation du nom complet –Importer une classe ou toutes les classes du package Héritage, polymorphisme, encapsulation java.util.Date dateDuJour = new java.util.Date(); System.out.println(dateDujour); import java.util.Date; Date dateDuJour = new Date(); System.out.println(dateDujour); import java.util.*; Date dateDuJour = new Date(); System.out.println(dateDujour);

92 92 Les packages : utilisation (2/2) Le mot-clé « package » permet de définir un nouveau package La hiérarchie des packages correspond à la hiérarchie des répertoires Héritage, polymorphisme, encapsulation //fichier Compte.java dans le répertoire Finance package finance; public class Compte { …… } //Fichier Client.java dans le répertoire de lapplication import finance.*; public class Client { Compte c = new Compte(); …… }

93 93 La variable CLASSPATH Le compilateur utilise la variable denvironnement CLASSPATH pour localiser les classes dun package sur le disque Cette variable doit référencer tous les répertoires ou fichiers dans lesquels sont susceptibles de se trouver des classes Java On a le droit de placer les classes dans des archives (zip, jar, cab) –Dans ce cas, la variable CLASSPATH doit référencer le fichier La hiérarchie des classes des packages doit être respectée Héritage, polymorphisme, encapsulation

94 94 Classes publiques Le mot-clé « public » permet de définir une classe comme publique Seules les classes « public » sont accessibles depuis lextérieur du package Chaque fichier java doit contenir au maximum une classe « public » –Cette classe doit porter le nom du fichier dans lequel elle est définie (en respectant les majuscules/minuscules) Les classes « non public » ne sont utilisables quà lintérieur du fichier dans lequel elles sont définies Héritage, polymorphisme, encapsulation

95 95 Visibilité - Encapsulation Permet de distinguer les services offerts (interface) de limplémentation Lencapsultation des classes Java est définie au niveau du package ILencapsulation agit au niveau des classes et non des objets –Un attribut « private » dans un objet sera accessible depuis une autre objet de la même classe Il y a 4 niveaux de visibilité : public, private, protected, friendly (valeur par défaut) Héritage, polymorphisme, encapsulation

96 96 Règles de visibilité Héritage, polymorphisme, encapsulation public protected private friendly (par défaut)

97 97 Règles de visibilité Pour une bonne encapsulation, il est préférable de définir les attributs comme « private » On définit alors des méthodes «publiques » (accesseurs) permettant de lire et/ou de modifier les attributs –Si un accesseur retourne une référence sur un objet, rien nempêche la modification de cet objet à travers cette référence cela brise lencapsulation Héritage, polymorphisme, encapsulation class Personne { private Vector children = new Vector(); public Vector getChildren() { return children; } } …… Personne moi = new Personnes(); Vector v = moi.getChildren(); v.addElement(new Personne("Paul"); Rupture de lencapsulation

98 98 Encapsulation des constantes Héritage, polymorphisme, encapsulation class EtatPorte {// Classe non publique public final static EtatPorte OUVERTE = newEtatPorte(); public final static EtatPorte FERME = newEtatPorte(); // Empeche la création dun nouvel objet private EtatPorte() {} } public class Porte {// Classe publique private EtatPorte etat = EtatPorte.FERMEE; public void ouvrir() { etat = EtatPorte.OUVERTE; } public estOuverte() { return (etat == EtatPorte.OUVERTE); }

99 99 Les interfaces

100 100 Définition Une interface définit un ou plusieurs services offerts Elle est composée dun ensemble de méthodes abstraites et de constantes (« static » et « final ») Une classe peut implémenter une ou plusieurs interfaces –Elle doit fournir une implémentation pour chaque méthode Les interfaces interface Printable { void print(); class Point extends Object implements Printable { private double x, y; void print() { System.out.println(x); System.out.println(y); }

101 101 Héritage multiple dinterface Une interface peut hériter dune ou plusieurs autres interfaces –Java supporte lhéritage multiple dinterface Une classe peut implémenter plusieurs interfaces Les interfaces interface Printable { void print(); interface Persistent { void save(); interface SGBD extends Persistent { void connect(); class Point implements Printable, SGBD { private double x, y; void print() {……}; void save() {……}; void connect() {……}; }

102 102 Interfaces et types Une interface définit un nouveau type Des objets différents peuvent répondre au même message à condition quils implémentent la même interface Lopérateur « instanceof » peut être utilisé pour savoir si un objet implémente une interface donnée Les interfaces Point point = new Point(); if (point instanceof Printable){ point.print(); …… }

103 103 Variables dinterfaces Les variables déclarées dans une interface sont des constantes –Les mots clés « static » et « final » ne sont pas nécessaires Les variables des interfaces doivent obligatoirement être initialisées Les interfaces interface MyInterface { int MIN = 0; int MAX = 100; …… } int i = MyInterface.MAX;

104 104 Quand utiliser les interfaces ? Pour définir des services techniques Pour contourner le fait que Java ne supporte pas lhéritage multiple Interface vs Héritage : –On utilise lhéritage quand un objet est un sous-type dun autre –On utilise une interface pour décrire le fait quune classe implémente un service particulier Les interfaces Persistent Client Personne extends implements

105 105 Conception par contrat (1/4) Exemple : on définit les classes « Client », Banque » et « Compte » Les interfaces Compte credit() debit() balance() save() load() Banque …… Client …… 0..*

106 106 Conception par contrat (2/4) Le « Client » et la « Banque » ont des points de vue différents sur un « Compte ». Ils nutilisent pas les mêmes méthodes On définit des contrats différents Les interfaces Compte credit() debit() balance() save() load() Banque …… Client …… 0..* ICompteBanque balance() save() load() ICompteClient credit() debit() balance() 0..* implements

107 107 Conception par contrat (3/4) La méthode « balance » peut être mise en facteur Les interfaces Compte credit() debit() balance() save() load() Banque …… Client …… 0..* ICompteBanque save() load() ICompteClient credit() debit() 0..* implements ICompte balance()

108 108 Conception par contrat (4/4) Les méthodes « save » et « load » sont des services techniques transversaux Les interfaces Compte credit() debit() balance() save() load() Banque …… Client …… 0..* ICompteBanque ICompteClient credit() debit() 0..* implements ICompte balance() IPersistant save() load()

109 109 Les classes de base

110 110 La classe « Object » : définition Classe mère de toutes les classes –Permet dutiliser les classes conteneurs et le polymorphisme La méthode « toString() » retourne une description de lobjet La méthode « equals(Object) » teste légalité sémantique de deux objets Le méthode « getClass() » retourne le descripteur de classe. Il permet de : –connaître la classe dun objet –connaître le nom de la classe, ses ancêtres –découvrir la structure des objets (JDK 1.1) Les classes de base

111 111 La classe « Object » : exemple Les classes de base class NamedObject extends Object { protected String _nom; public String toString() { return "Objet : " + _nom + " de la classe " + getClass().getName(); } public boolean equals (NamedObject obj) { return obj._nom.equals(this._nom); } class Personne extends NamedObject {………} Personne moi = new Personne("Marcel Dupond"); Personne lui = new Personne("Marcel Dupond"); System.out.println(moi); if (moi == lui) {……} if (moi.equals(lui)) {……} Objet Marcel Dupond de la classe Personne Test des références = false Test des valeurs = true

112 112 La finalisation dun objet Tout objet qui nest plus référencé est détruit par le ramasse- miettes –Il ny a pas de delete en java « finalize() » est appelé avant que le ramasse-miettes ne libère la mémoire occupée par lobjet –Permet de libérer des ressources allouées par lobjet On peut forcer lappel au ramasse-miettes en invoquant –System.gc() : déclencher le ramasse-miettes –System.runFinalisation() : déclencher la finalisation des objets Vous pouvez lancer la machine virtuelle en bloquant le déclenchement automatique du ramasse-miettes –Option : java-nosyncgc –Permet de contrôler le déclenchement du ramasse-miettes Les classes de base

113 113 Les classes « Wrapper » : description Les types de base Java ne sont pas des objets –Il est parfois indispensable de les manipuler comme des objets Les classes Wrapper représentent un type de base –Récupérer les valeurs min et max –Créer une instance à partir dun type de base ou dune chaîne –Conversions entre types de base et chaînes –Conversions entre chaînes et types de base –Utiliser des types de base dans des conteneurs Boolean, Integer, Float, Double, Long, Character Attention : ne supporte pas dopérateurs (+, -, …) Elles sont dans le package java.lang Les classes de base

114 114 « Wrapper » vs « types de base » Avantages des type de bases : –Plus léger en mémoire –Supporte un certain nombre dopérateurs –Autorise certaines conversions automatiques de types Avantages des Wrappers : –Est passé par référence –Dispose de méthodes de conversions statiques vers les autres types –Peut être géré par les objets container Les classes de base

115 115 Exemples Convertir une chaîne en entier : Convertir un entier en chaîne : Les classes de base static int convertir(String s) { try { return Integer.parseInt(s); } catch(Exception e) { return 0; } } static String convertir(int i) { Interger j = new Integer(i); return j.toString(); }

116 116 La classe java.lang.String Contient une chaîne de caractères Classe connue par le compilateur Java –Une chaîne constante sera convertie en objet de la classe String –String msg = Hello Java World ! Un objet de la classe String ne peut pas être modifié –Ne brise pas lencapsulation Les classes de base class Personne { String nom; public String getNom() { return nom; }

117 117 String : concaténation Les classes de base int area = 33; int prefixe = 1; int suffixe = ; // Chaque concaténation crée un nouvel objet // lancien est détruit par le Garbage Collector String numTel = "(" + area + ")";// (33) numTel += prefixe// (33)1 numTel += "-" // (33)1- numTel += suffixe// (33) // Un seul objet est créé numtel = "(" + area + ")" + prefixe + "-" + suffixe // Conversion dun entier en chaîne String un = 1 + "";

118 118 String : manipulation length() : cette méthode permet de connaître le nombre de caractères dune chaîne –Ex : for (int i = 0; i < monTexte.length(); i++) {......} indexOf(char c, int i) : retourne la position du caractère c à partir de la position i –if (monTexte.indexof($, 5) <> -1 ) {......} substring(int i, int j) : extrait de la chaîne les caractères de la position i à la position j –String nouveauMot = ancienMot.substring(2,5); equals() : retourne un booléan signifiant si les deux chaînes sont identiques –Ex : if ( mot1.equals(mot2)) {......} Les classes de base

119 119 La classe java.lang.StringBuffer Cest une chaîne de caractères modifiable et de taille variable Son utilisation est moins simple que « String » –pas dutilisation possible de lopérateur + append(p) : ajoute p en fin de la chaîne courante –p peut être de nimporte quel type de base length() : retourne la longueur de la chaîne setLength() : change la longueur de la chaîne –Si elle est étendue, les nouveaux caractères sont initialisés à 0 Les classes de base

120 120 La classe java.util.Vector Tableau de références à taille variable On ne peut y stocker que des références sur les objets –Impossible de stocker directement un type de base dans une collection de type Vector : utiliser pour cela les classes wrapper –Souvent utilisé pour coder une relation 1-n entre deux classes Possibilité de savoir si un objet est présent dans le tableau et quelle est sa position Vous pouvez : –Insérer ou supprimer des références –Parcourir le contenu Les classes de base

121 121 Vector : insérer, supprimer Les classes de base Vector vInt = new Vector(); for (int i = 0; i<10 ; i++) { Integer elt = new Integer(i); vInt.addElement(elt); } // Interger i = new Integer(0); vInt.addElementAt(i, 5); // vInt.removeElementAt(0); // vInt.removeAllElements();

122 122 Vector : modifier, rechercher... Object elementAt(int index) –Retourne lélément pointé par index Void setElementAt(Object obj, int index) –Place obj à la position index Boolean contains(Object elem) –Retourne true si elem est dans le tableau Int indexOf(Object elem) Int indexOf(Object elem, int index) –Retourne la position de lobjet ou -1 si lobjet nest pas dans le tableau –Lobjet est recherché par référence Int size() –Retourne la taille courante Les classes de base

123 123 Linterface java.util.Enumeration Objet permettant de parcourir les éléments dun conteneur –Une énumération ne stocke aucune information –Ne contient quune position courante dans le conteneur –Interface unique pour le parcours de tous les types de conteneurs –Ne fonctionne que pour un seul parcours –Cest une interface, pas une classe Elements() appliquée sur un Vector retourne une Enumeration Deux méthodes : –Boolean hasMoreElements() : teste sil reste des éléments –Object nextElement() : récupère lélément courant et passe au suivant Les classes de base

124 124 Enumeration : exemple Les classes de base Vector vInt = new Vector(); for (int i = 0; i<10 ; i++) { Integer elt = new Integer(i); vInt.addElement(elt); } // // Première façon de parcourir le vector for (int i = 0; i

125 125 Quand utiliser une Enumeration ? Utilisez une Enumeration pour parcourir une association 1..* Permet de ne pas briser lencapsulation Dans lexemple suivant : –la classe « Personne » possède une méthode publique pour parcourir la collection de voitures –Lajout ou la suppression dune voiture dans cette collection doit se faire en manipulant une instance de la classe « Voiture » Les classes de base Voiture Personne 0..* possède -> proprietaire

126 126 Quand utiliser une Enumeration ? Les classes de base public class Personne { private Vector _voitures = new Vector(); public Enumeration voitures() { return _voitures.elements(); } void addVoiture(Voiture v) { _voitures.addElement(v); } void remVoiture(Voiture v) { _voitures.removeElement(v); } } package simulateur; class Voiture { private Personne _proprio; public void setProprietaire (Personne p) { if (_proprio != null) _proprio.remVoiture(this); _proprio = p; if (_proprio != null) _proprio.addVoiture(this); } public Personne getProprietaire() { return _proprio; } }

127 127 La classe java.util.Hashtable Tableau associatif permettant : –Dindexer un objet par une clé –De retrouver rapidement un objet à partir dune clé Les clés des références sont des objets –Chaînes de caractères, numéros didentification … –Elles sont recherchées par valeurs (méthodes equals) –Les clés doivent implémenter la méthode Object:hashCode() Une clé ne peut identifier quune seule valeur –Naccepte pas les doublons –Pour stocker des relations n-n, il suffit de stocker des instances de Vector dans une Hashtable Très performant pour laccès aux valeurs Les classes de base

128 128 La classe java.util.Hashtable Object put(Object key, Object value) : insère un élément Object remove(Object key) : supprime la clé Object get(Object key) : retourne la valeur associée à la clé Boolean containsKey(Object key) : teste si la clé existe Keys() : retourne une Enumeration sur les clés Elements() : retourne une Enumeration sur les valeurs Les classes de base

129 129 Hashtable : un exemple Les classes de base Hashtable deptable = new Hashtable(); // Stockage dobjets de type Departement en utilisant // une clé de type String deptable.put("Ain", new Departement(1)); deptable.put("Aisne", new Departement(2)); deptable.put("Allier", new Departement(3)); Departement dep = (Departement)deptable.get(("Aisne"); // Parcours de toutes les clés de la hashtable for (Enumeration noms = deptable.keys(); noms.hasMoreElements();) { String nom = (String)noms.nextElements(); Departement dep2 = (Departement)deptable.get(nom); System.out.println(nom + " = " + dep2); }

130 130 Choisir un conteneur Le choix dun conteneur dépend du type daccès Les classes de base TableauListe (Vector) Hashtable Parcourir1073 Insérer ou enlever 3109 Rechercher3 (5 si trié) 210

131 131 Les exceptions

132 132 A quoi servent les exceptions ? Le mécanisme des exceptions Java permet de traiter les erreurs déxécution Il permet aussi de gérer toutes les situations hors contrat définit par le concepteur Le travail du concepteur : –Définir les ensembles dinstructions à risque –Implémenter les gestionnaire dexceptions pour chaque cas Le travail de la machine virtuelle Java : –Distinguer un résultat valide dun code erreur –Propager jusquau gestionnaire de ce cas exceptionnel les informations qui lui sont nécessaires (code erreur, données de contexte) Les exceptions

133 133 Exemple (1/2) Les exceptions class Equation { double _a; double _b; double c; // Constructeur Equation(double a, double b, double c) { _a = a; _b = b; _c = c;} // Calcul du delta public double delta() { return _b*_b – 4*_a*_c; } // Solution public double solution() throws PasDeSolution { double discr = delta(); if (discr<0) throw new PasDeSolution(); return (_b + Math.sqrt(discr))/(2*_a); } }

134 134 Exemple (2/2) Les exceptions class PasDeSolution extends Exception { // Retourne la description du problème String toString() { return "Léquation na pas de solution"; }... // Méthode appelante …… try { Equation ed = new Equation(1,0,1); // x2 + 1 = 0 double resultat = eq.solution(); …… } catch(PasdeSolution p) { System.out.println(p.toString); } Branchement vers le catch

135 135 Throw et throws Le mot-clé Throw permet de soulever une exception Le mot-clé Throws sutilise au niveau de la signature dune méthode pour préciser que celle-ci est susceptible de soulever une exception Les exceptions if (discr<0) throw new PasDeSolution(); …… public double solution() throws PasDeSolution { ……

136 136 Try - Catch et Throws Lorque que lon utilise une méthode susceptible de soulever une exception, il faut spécifier comment on la gére. 2 Solutions : –Traiter le cas dans la méthode : Try - Catch –Faire remonter lexception au niveau supérieur : Throws Les exceptions try { double resultat = eq.solution(); } catch(PasdeSolution p) { System.out.println(p.toString); } void calculer() throws PasDeSolution { …… double resultat = eq.solution(); …… }

137 137 Finaly Le mot-clé Finally permet de déclarer un bloc dinstruction qui sera exécuté dans tous les cas, quune exception survienne ou non. Les exceptions try { // Ouvrir le fichier // Lire les données // …… } catch (IOException i) { System.out.println("Erreur I/O sur le fichier"); return; } finally { // Fermer le ficher // …… } Erreur ici ! Retour aux instructions suivant la lecture Bloc dinstructions toujours traité

138 138 Classification des exceptions Le JDK contient des classes dexceptions dont voici un extrait : Les exceptions Object Throwable Exception RuntimeException Error SecurityException NullPointerExceptionArithmeticException PasDeSolution......

139 139 Bâtir une hiérarchie dexceptions métier Les exceptions Exception ConnectionException AuthentificationFailed InvalidPassword NetworkFailure InvalidLogin ServerDownOrBusy

140 140 Debugging : les traces Une exception dérive de la classe Object. Utilisez la méthode toString() pour garder des traces dexécution La méthode PrintStackTrace() permet dafficher la pile des appels depuis la méthode qui a déclenché lexception La classe Throwable prend une String à sa construction. Cela permet denrichir les traces avec des messages spécifiques, récupérés avec getMessage() Les exceptions

141 141 Les entrées-sorties

142 142 Description Le modèle dentrée/sortie de Java offre 2 groupes de classes : –Entrées/sorties par octet (Stream) –Entrées/sorties par caractères UNICODE (Reader/Writer) Les classes InputStreamReader et OutputStreamWriter font le lien entre les 2 modèles Les entrées-sorties Reader OutputStreamInputStreamWriter InputStreamReaderOutputStreamWriter

143 143 Canal et Filtre (1/2) Un Canal représente une source de données –Un fichier, un pipe, un socket, un tableau … –Peut être lu et/ou écrit –Interface de bas niveau : lire/écrire un octet ou un caractère Un Filtre se connecte sur un Canal –Il permet doffrir une interface de haut niveau identique à tous les canaux –Interface de haut niveau : lire/écrire un entier, un flottant, une chaîne –Il est possible de connecter un filtre à un autre Les entrées-sorties

144 144 Canal et Filtre (2/2) Les entrées-sorties Reader OutputStreamInputStreamWriter FilterReaderFilterWriterFilterOutputReaderFilterInputWriter Fichier CanalCanal Filtre

145 145 Entrées/Sorties par caractères Flots de caractères UNICODE-2 –2 octets par caractère Deux classes de base –Java.io.Reader –Java.io.Writer Modèle symétrique aux canaux par octets –ReaderFilter –WriterFilter Vous pouvez connecter un canal UNICODE sur un canal par octets –OutputStreamWriter et InputStreamReader –Conversion des caractères UNICODE sur 1 caractère –Dépend de la plate-forme (ASCII ou EBCDIC) Les entrées-sorties

146 146 Sous-classes de la classe Reader FileReader : lecture dun flux de caratères à partir dun fichier PipedReader : lecture dun flux de caratères à partir dun Pipe (IPC) StringReader : lecture dun flux de caratères à partir dunString CharArrayReader : lecture dun flux de caratères à partir dun tableau de char InputStreamReader : lecture dun flux de caratère à partir dunInputStream BufferedReader : permet de mémoriser les caractères lors de la lecture pour améliorer les performances...etc Les entrées-sorties

147 147 Sous-classes de la classe Writer PipedWriter : écriture dun flux de caratères vers un Pipe (IPC) StringWriter : écriture dun flux de caratères dans un String CharArrayWriter : écriture dun flux de caratères dans un tableau de char OutputStreamWriter : écriture dun flux de caratère vers un OutputStream BufferedWriter : permet de mémoriser les caractères lors de lécriture pour améliorer les performances...etc Les entrées-sorties

148 148 La classe java.io.PrintWriter Permet décrire une chaîne de caractères, un entier (Integer), etc., vers un canal de sortie Pour écrire, on utilise les méthodes write ou writein Le flushing peut être automatique ou non Les entrées-sorties try{ FileWriter fos = new FileWriter("text.txt"); PrintWriter p = new PrintWriter(fos,true); String s = "Je suis une chaîne"; p.print(s);// écriture sans retour-chariot P.println(s);// écriture avec retour-chariot } catch(IOException e) {}

149 149 La classe java.io.BufferedReader Permet de lire des informations depuis un Reader quelconque (entrée standard, fichier, …) Les entrées-sorties try{ // Lecture depuis un fichier BufferedReader in = new BufferedReader(new FileReader(args[0])); String s = new String(); while((s = in.readLine()) != null) System.out.println(s); in.close(); // Lecture depuis le clavier BufferedReader clav = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Saisissez une phrase : "); String s = clav.readLine(); …… } catch(IOException e) {}

150 150 La classe java.io.File Manipulations du système de fichiers Constructeurs : –Public File(File dir, String name) ; –Public File(String path) ; –Public File(String path, String name) ; Principales méthodes : –Boolean isDirectory() – String[] list (FilenameFilter filter) –Boolean isFile() – Int length() –String getAbsolutePath() – Boolean delete() –Boolean renameTo(File dest) – Boolean exists() –Boolean mkdir(String name) – Boolean canReads() –String [] list () – Boolean canWrite() Les entrées-sorties

151 151 La classe java.io.RandomFile La classe RandomAccessFile permet la lecture et lécriture à nimporte quelle position dans le fichier Loctet est lunité de mesure des positions et des déplacements dans le fichier Constructeurs (throws IOException) : –Public RandomAccessFile (File file, String mode) –Public RandomAccessFile (String name, String mode) –Mode = r (lecture seule) ou rw (lecture et écriture) Méthodes : –ReadInt, readFloat, readBoolean : lecture des types de base (Interface DataInput) –WriteInt, writeFloat, writeBoolean : écriture des types de base (Interface DataOutput) –Seek(long) : décalage en octets Les entrées-sorties


Télécharger ppt "1 Le langage JAVA Intervenants : Denis Marchal - Frédéric Moreau Année scolaire 2004-2005."

Présentations similaires


Annonces Google