Vous êtes sur la page 1sur 151

Intervenants : Denis Marchal - Frdric Moreau

Le langage JAVA

Anne scolaire 2004-2005

Sommaire

Introduction Java La syntaxe

Les concepts Objet Classes, mthodes, attributs Hritage, polymorphisme, encapsulation Les interfaces Les classes de base Les exceptions Les entres-sorties

Introduction Java

Introduction Java

Origine du langage
Dvelopp par SunSoft pour raliser le dveloppement de systmes embarqus Projet Oak volution gre par JavaSOFT (SunSoft) Quelques liens
http://www.javasoft.com/ http://www.sunsoft.com/ http://www.developer.com/directories/pages/dir.java.htm/ (anciennement www.gamelan.com) http://www.javaworld.com/ http://tips.iworld.com/ slectionnez Java
4

Introduction Java

Java est simple Simplicit relative par rapport au C++ Certains concepts du C++ lorigine de nombreux bugs ont t supprims
Pointeurs Surcharge des oprateurs

Des tudes comparatives de dveloppements montrent une diminution du cot de dveloppement de 30 35 %


5

Introduction Java

Java est un langage objet


Java reprend des caractristiques de diffrents langages objets
La syntaxe du C++ La gestion dynamique de la mmoire SmallTalk Certains concepts de ADA et Objective C

Toute ligne de code JAVA se trouve obligatoirement dans une mthode lintrieur dune classe
Java est un langage intermdiaire entre les langages statiques (C++) et les langages interprts (SmallTalk) Nombreuses classes permettant le dveloppement de systmes rpartis
Classes daccs aux ressources dun serveur Web
6

Introduction Java

Java est robuste


Le compilateur Java est trs strict Contrle de typage fort Le compilateur vrifie que les erreurs sont traites par le dveloppeur
Si une erreur retourne par une mthode nest pas traite, le programme ne compilera pas

La gestion de la mmoire nest pas la charge du dveloppeur


Garbage Collector ( ramasse-miettes) Pas de pointeurs

Un dbordement dindex dans un tableau provoque une erreur


La mmoire nest pas crase
7

Introduction Java

JAVA est portable


Un code source Java est compil pour gnrer un code assembleur virtuel : le byte code Ce code est conu pour :
Etre rapidement interprt Etre optimisable au moment de son excution Etre facilement traduit en instructions assembleur lors de son excution Etre compact
en moyenne, une instruction byte code = 1,8 octet, RISC = 4 octets

Etre vrifiable

Le byte code est excut par un logiciel : la Machine virtuelle La machine virtuelle est dpendante de la plate-forme

Introduction Java

Java est performant !


Prog.java Prog.java Prog.java

Prog.class MV

Prog.class MV+ JIT Code binaire en mmoire Compilateur

Code binaire

Systme dexploitation

Systme dexploitation

Systme dexploitation
9

Introduction Java

JAVA est scuris


Le compilateur interdit toute manipulation en mmoire Le Verifier contrle que le byte code charg dans la machine virtuelle est conforme Le ClassLoader est responsable du chargement des classes dans le SandBox . Il vrifie que la classe charge nen crase pas une autre en mmoire Le SecurityManager contrle les oprations dentre/sortie locales et sur le rseau (Applet uniquement) La portabilit de Java permet de dplacer dynamiquement du code Java sur un rseau
10

Introduction Java

JAVA supporte le multi-threading La gestion des multi-threads est intgre dans le langage et dans la Machine Virtuelle Grande simplification Java permet de synchroniser les threads

Multi-processus
Mmoire

Multi-thread
Mmoire

P1

Inter-process

P2

T1

Synchronisation

T2
11

Introduction Java

Le JDK Le JDK = Java Development Kit


Ancienne version : 1.0.2 Version actuelle : 1.2

Il contient :
Un ensemble de classes de base regroupes en packages
Interface utilisateur, conteneurs, gestion des threads, rseau

Des excutables : machine virtuelle, compilateur Des bibliothques permettant de coupler du Java et du C

Peut tre tlcharg sur http://www.javasoft.com/ Il est gratuit

12

Introduction Java

Les environnements de dveloppement Ils offrent des fonctions avances :


diteur volu (couleur, autocorrection, prsentation) Assistance syntaxique Gnrateur de code Dbugage Environnement dexcution

Loffre actuelle
Jbuilder 4 (Inprise) Visual J++ (Microsoft) Visual Age (IBM) Visual Cafe Pro
13

Introduction Java

Les classes de base AWT : Abstract Window Toolkit


Classes dIHM : boutons, listes, gestion gnrique de la gomtrie, traitement des vnements par abonnement, copier/coller, glisser/dplacer

Rseau
Sockets (serveurs, clients), Web (URL), Applet

Entre-sortie
Fichier, Pipe, accs direct

Classes de base
Conteneurs, date, Chane de caractres

RMI
Remote Method Invocation
Middleware objet 100 % java
14

Introduction Java

Les classes de base JDBC


Accs aux bases de donnes relationnelles

Beans
Composant Java

Scurit
Cryptage, identification, signature

Internationalisation
Format de date/heure messages localiss caractres UNICODE 2

JavaIDL
Support de CORBA

15

Introduction Java

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 !!! "); } }

Edit Hello.java Javac Hello.java Java Hello


16

La syntaxe

17

La syntaxe

Constitution dun programme Un programme Java utilise un ensemble de classes Les classes sont regroupes par package Une classe regroupe un ensemble dattributs et de mthodes
Package Classe Attributs Mthodes
18

La syntaxe

Dclaration dune classe Le nom de la classe est spcifi derrire le mot cl class Le corps de la classe est dlimit par des accolades On dfinit dans le corps les attributs et les mthodes qui constituent la classe
class Test {

< corps de la classe >


}

19

La syntaxe

Dfinition dun mthode


Une mthode est constitue de :
Dun nom Dun type de retour De paramtres (ventuellement aucun) Dun bloc dinstructions

Un paramtre est constitu :


Dun type Dun nom

void est le mot-cl signifiant que la mthode ne renvoie pas de valeur


class Test { int calculer (int taux, float delta) { < corps de la mthode > } }
20

La syntaxe

Bloc dinstructions Un bloc dinstructions est dlimit par des accolades Il contient un ensemble dinstructions Toute instruction est termine par un point virgule Un bloc dinstructions peut contenir dautres blocs dinstructions
{ int i = 0; if (i==0) System.out.println ("Valeur de i : " + i); }

21

La syntaxe

Instructions possibles Dclaration dune variable Appel de mthode Affectation Instruction de boucle (while, for)

Instruction de test (if, switch)

22

La syntaxe

Corps dune mthode Le corps dune mthode est un bloc dinstructions Le mot cl return permet de renvoyer une valeur lappelant de la mthode Il doit renvoyer une valeur du mme type que le type de retour de la mthode
class Test { int calculer (int taux, float delta) { return taux * delta; } }

23

La syntaxe

Dclaration dune variable Une variable possde 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 dclaration
{ int compteur; int indice = 0;

Voiture golf; Voiture twingo = new Voiture();


}

24

La syntaxe

Porte dune variable La porte dune variable stend jusqu la fin du bloc dans lequel elle est dfinie

{ { int compteur; // compteur est accessible } // compteur nest plus accessible }

25

La syntaxe

Nom de classes, de variables et de mthodes


Un nom peut tre constitu de lettres, de chiffres et du caractre soulign Il ne peut pas commencer par un chiffre Le caractre $ est utilisable mais viter Les mots rservs (if, class, int) ne peuvent pas tre utiliss Les dveloppeurs ont dfini un consensus de nommage :
Les mots du langage sont en minuscule Les noms de classe commencent par une majuscule Les noms de mthodes et de variables comment par une minuscules Chaque mot qui compose le nom commence par une majuscule
26

La syntaxe

Point dentre Une application possde un point dentre fourni par la mthode main (sauf les applets) Attention la casse, Java est sensible aux majuscules/minuscules
class Test { public static void main (String[] args)) { // corps de la mthode main } }

27

La syntaxe

Les diffrents types de base (1/2) Types arithmtiques


byte short int long float double 8 bits 16 bits 32 bits 64 bits 32 bits 64 bits sign sign sign sign sign sign (-128 , 127) (-32768 , 32767) (-2147483648 , 2147483647) (-9223372036854775808, 9223372036854775807) (1.4E-45 , 3.4028235E38) (4.9E-324 , 1.7976931348623157E308)

Type caractre
char 16 bits non sign UNICODE2 deux valeurs possibles : true ou false
28

Type boolen
boolean 1 bit

La syntaxe

Les diffrents types de base (2/2) Les types de base scrivent 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 caractres Unicode Une chane de caractres est dclare avec le motcl String
Ce nest pas un type de base Il se manipule comme un type de base Ce nest pas quivalent un tableaux de caractres
String s = "Hello World"
29

La syntaxe

Laffectation Loprateur = permet daffecter la valeur de lexpression qui est droite la variable qui est gauche
class Test { int calculer () { int i = 0; int j = 6; i = (j + 5) * 3; return i + j; } }

30

La syntaxe

Les oprateurs arithmtiques Sappliquent sur les types entiers ou rels


+, - , * , / , % (modulo) , += , -= , *= , /=
int x, y, z; y = 2; z = 3;

x x y y

= y * z ; += 2 ; = x / 4 ; =x % 2 ;

//x //x //y //y

vaut vaut vaut vaut

6 8 2 0

Les oprateur = et += peuvent tre utiliss sur des variables de type String En terme de performance, il est recommand dutiliser la notion raccourcie
31

La syntaxe

Oprateurs unaires Sappliquent un seul oprande de type entier ou rel


-, --, +, ++
int x, y; x = 3; y = -x ; y = ++x ; y = x-- ; //y vaut -3 //y vaut 4, x vaut 4 //y vaut 4, x vaut 3

La pr et la post-incrmentation diminuent le nombre de lignes de byte code gnres


32

La syntaxe

Oprateurs de comparaison Sappliquent sur des entiers, boolens, rels ==, !=, <=, >, >= Ces oprateurs retournent une valeur du type boolean

{ boolean droitDeVote; int age;

droitDeVote = (age >= 18) ;


}

33

La syntaxe

Oprateurs logiques Sappliquent au type boolean


! (not) , && (and) , II (or) &, I

Retournent un type boolean & renvoie true si les deux expressions renvoient true && a le mme comportement mais nvalue pas le seconde expression si la premire est false | renvoie true si lune des deux expressions renvoie true || a le mme comportement mais nvalue pas le seconde expression si la premire est true
34

La syntaxe

Les conversions de type (1/2) Il y a 4 contextes possibles de conversion (cast) :


Conversion explicite Affectation Appel de mthode Promotion arithmtique

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


35

La syntaxe

Les conversions de type (2/2)


double f =3.14 ; int i,j ; short s ; i = (int)f; float ff = (float)3.14; // float int (conversion explicite)

i = s;

// short int (affectation)

// appel de la mthode int obj.m(int i) obj.m(s); // short int (appel de mthode) // division dun entier et dun flottant : lentier i est // converti en flottant, puis la division flottante est calcule f = i / (double)j; // f vaut 0.3333

36

La syntaxe

Test conditionnel
class Test { public static void main (String args[]) { int compteur = 0; boolean debut; if (compteur == 0) { debut = true; System.out.println("Dbut de la partie"); } else if (compteur ==10) System.out.println("Fin de la partie");

else
System.out.println("Partie en cours"); } }

37

La syntaxe

Boucles while
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) {}


}

38

La syntaxe

Boucles for
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


} }

39

La syntaxe

Switch
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 rponse"); break; }

}
}

Le switch ne sapplique quau type entier ou caractre.


40

La syntaxe

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) gnre la documentation des classes en au format HTML
/** : dbut de commentaire Javadoc @author : exemple de tag auteur */ : fin de commentaire Javadoc
41

La syntaxe

Les tableaux : description Nombre fixe dlments. Taille fixe la construction Les lments sont de mme type (type de base ou classe) Les tableaux sont allous dynamiquement par new Un tableau est dtruit lorsquil nest plus rfrenc Les tableaux multi-dimensionnels sont des tableaux de tableaux

42

La syntaxe

Les tableaux : syntaxe 2 syntaxes pour lallocation :


int[] monTableau = new int[10]; int monTableau[] = new int[10];

Une mthode peut renvoyer un tableau


classe Test { int[] construireTableau (int dimension) { int tab[] = new int[dimension]; return tab; } }

43

La syntaxe

Les tableaux : initialisation Lattribut length renvoie la dimension du tableau Lindice des lments du tableaux varie de 0 tableau.length 1 Initialisation statique :
int[] monTableau = {1, 2, 3};

Initialisation dynamique :
int[] param = new int[10]; for (int i = 0; i < param.lenght ; i++) param[i]= i;

44

Les concepts Objet

45

Les concepts Objet

Les concepts de base Les concepts de base de lobjet sont simples et peu nombreux
Objet et Classe Encapsulation Gnralisation/Spcialisation Polymorphisme

Ces concepts impactent directement sur la qualit, les dlais et les cots de dveloppement 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 lexprience
46

Les concepts Objet

Quest-ce quun objet ? Cest une abstraction dune entit du monde rel
Monde rel Modle Voiture
Simulateur de circulation

Abstraction

Abstraction

Voiture Bote
Conception de voiture
47

Moteur

Les concepts Objet

La gnralisation / spcialisation (1/2) Gnralisation = recherche des similitudes


Identifier les objets du monde rel connus par le systme Regrouper les objets en classes Gnraliser les classes en super classes

Rgle dor : en cas de doute sur la pertinence dune classe, il est prfrable de ne pas la dfinir
La gnralisation est caractris par lexpression : est un type de

48

Les concepts Objet

La gnralisation / spcialisation (2/2)

Classes abstraites

Moyen de transport
<<extends>>

Classes concrtes

Tracteur

Train

Voiture

Monde rel

49

Les concepts Objet

Attribut, Opration, Identit ? Attribut : valeur porte par un objet Opration : service rendu par lobjet
Synonyme : Mthode, Service

Identit : un objet doit tre identifiable


Concept quivalent pour les SGBDR : clef primaire

50

Les concepts Objet

Attribut, Opration, Identit (2/2) Une classe dcrit les Attributs, les Oprations et lIdentit de ses objets

Voiture

Bmw :Voiture
Instance de

couleur : Couleur=Color.Black vitesseMax : float = 150


demarrer() arreter() accelerer(acc : float) Freiner(acc : float)

couleur=rouge vitesseMax=230
Twingo : Voiture

Instance de

couleur=jaune vitesseMax=140

51

Les concepts Objet

Accs aux attributs et invocation des mthodes Laccs aux attributs et aux mthodes dfinis dans la classe se fait partir dun objet Un objet est une instance de classe Il possde des valeurs propres pour les attributs dfinis dans la classe
Voiture clio; clio = new Voiture(); // Dclaration dune variable // Cration de lobjet

clio.couleur = rouge ;
clio.demarrer();

// Accs lattribut
// Appel de la mthode

52

Les concepts Objet

Dfinition dune mthode <> invocation dune mthode


class Voiture { float vitesse; float consommation; // Dfinition de la classe
Dfinition du paramtre

void accelerer (float delta) { consommation = consommation + delta / 10; vitesse = vitesse + delta; } } // Utilisation dun objet Voiture clio = new Voiture(); clio.accelerer(20);
Passage du paramtre

53

Les concepts Objet

Les Associations (1/2) Lassociation est le lien qui peut exister entre objets de diffrentes classes pour leur permettre de communiquer Deux objets sont associs si :
Un objet connat lidentit et la classe dun (ou de plusieurs) autre objet

Il existe un type particulier dassociation nomm Agrgation ou Composition


Association se lisant Est forme par lassemblage de ou Contient
54

Les concepts Objet

Les Associations (2/2) Lecture du modle UML :


Une personne peut possder entre 0 et n voitures Toute voiture possde un propritaire Une voiture est forme de 4 roues et dune carrosserie
<-possde 0..* +propritaire

Voiture

Personne

Roue

Carroserie
55

Les concepts Objet

Lhritage Mcanisme provenant dune relation de Gnralisation/Spcialisation Une sous-classe hrite des attributs, mthodes et associations de ses super classes
MoyenDeTransport couleur vitesse demarrer() arreter()

Voiture typeCarrosserie

Moto typeDePot

marcheArriere()

faireUneRoueAvant()

56

Les concepts Objet

Quest-ce que lencapsulation ? Un mcanisme permettant de masquer les choix dimplmentation Permet de changer limplmentation sans incidence sur le reste du systme si linterface nest pas modifie Un objet possde une interface publique et une implmentation prive Chaque objet est un mini-serveur mise en place de systmes distribus via CORBA ou DCOM
implmentatio n
instruction instruction instruction instruction instruction instruction

interface
57

Les concepts Objet

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

Demarrer()

Velo

Les concepts Objet

Quest-ce que le polymorphisme ? Proprit pour un mme message de dclencher des mthodes diffrentes
- Dbrayer - Passer la premire - Acclrer - Embrayer

Voiture Feu
changer (Vert) Demarrer() Demarrer()

Velo
- Pdaler

59

Les concepts Objet

Rsum Les concepts fondamentaux :


Classe, Objet Gnralisation/Spcialisation (hritage) Encapsulation Polymorphisme

Ces concepts ont un impact direct sur :


La qualit du systme Le cot de dveloppement et de maintenance Le dlai du dveloppement et de maintenance

Si les concepts de base sont simples, leur utilisation ncessite de lexprience


60

Classes,mthodes, attributs

61

Classes,mthodes, attributs

Dclarer une classe Une classe public est visible en dehors du package
Par dfaut, 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 drive (pas de sous-classes)


Utile pour des raisons de scurit et de performances De nombreuses classes du JDK sont final

Une classe abstract ne peut pas tre instancie (new)


62

Classes,mthodes, attributs

Dclarer un attribut (1/3) Lors de la cration dun objet, les attributs sont initialiss par dfaut :
zro pour les valeurs numriques null pour les rfrences false pour les boolens

Les attributs peuvent tre initialiss :


Lors de la dclaration Dans le constructeur

Utiliser des rgles de nommage cohrentes :


Le noms des classes commence par une majuscule Lidentification dun attribut ou dune mthode commence par une minuscule
63

Classes,mthodes, attributs

Dclarer un attribut (2/3) La valeur dun attribut dclar comme static est partage par toutes les instances (objets) de la classe La valeur dun attribut dclar comme final est constante

64

Classes,mthodes, attributs

Dclarer un attribut (3/3)


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 + "/" } } Date d = new Date(); d.print(); // instantiation de lobjet // appel de la mthode print

+ _mois + "/" + _an);

65

Classes,mthodes, attributs

Le passage de paramtres Lors de lappel dune mthode prenant en paramtre des types de bases, les paramtres sont passs par valeur
La valeur des variables passes en paramtres est duplique Ce sont ces valeurs dupliques qui sont manipules dans la mthode

Lors de lappel dune mthode prenant en paramtre des objets, les paramtres sont passs par rfrence
Ils peuvent tre modifis dans la mthode

66

Classes,mthodes, attributs

Surcharge (1/3) Une mthode surcharge est une mthode qui peut tre appele avec plusieurs ensembles de listes de paramtres
Permet dcrire plusieurs versions dune mthode

Exemple void print () {} void print (int i) {} int print (float f) {} Le type du paramtre de retour nest pas pris en compte par le mcanisme de rsolution de surcharge
67

Classes,mthodes, attributs

Surcharge (2/3) A lappel, Java dtermine quelle est la mthode dont la liste des paramtres est la plus proche des paramtres effectivement envoys par lappelant Si aucune signature de mthode ne correspond au valeurs envoyes, la machine virtuel Java est capable de convertir une valeur envoye dans le type du paramtre Java dtermine le cot des conversions possibles et choisit le cot le moins lev. Si le cot global de conversion dpasse 10, Java refuse lappel
68

Classes,mthodes, attributs

Surcharge (3/3)
vers
byte

Cot des conversions


short 1 0 10 11 11 14 15 char 2 10 0 11 11 13 14 int 3 1 1 0 10 12 13 long 4 2 2 1 0 11 12 float 6 4 4 5 6 0 10 double 7 5 5 4 5 1 0
69

de

byte Short Char Int Long Float double

0 10 11 12 12 15 16

Classes,mthodes, attributs

Constructeurs Cest une ou plusieurs mthode(s) permettant dinitialiser les objets Le constructeur est appel lors de la cration de lobjet Le constructeur a le mme 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 dfaut (sans paramtres) si aucun constructeur nest dfini explicitement
70

Classes,mthodes, attributs

Exemple de constructeurs
class int int int Date { _jour = 1; _mois = 1; _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

71

Classes,mthodes, attributs

Cration dobjets Allocation de lespace mmoire pour stocker les variables dinstances Utilisation de loprateur new Appelle du constructeur adquat Retourne une rfrence sur lobjet cr
class Voiture { String _type; Voiture (String type) { _type = type; } void demarrer () {} // Dfinition de la classe

} Voiture clio = new Voiture("ClioRT"); // Cration de lobjet Voiture renault = clio; // Ajout dune rfrence sur lobjet renault.demarrer();
72

Classes,mthodes, attributs

Le Garbage Collector (ramasse-miettes) Il prend en charge la gestion de la mmoire Il alloue lespace mmoire lors de la cration des objets Il libre la mmoire occup par un objet ds quil ny a plus aucune rfrence qui pointe vers cet objet Il est capable de compacter la mmoire pour viter la fragmentation Cest un Thread de la machine virtuel Java

73

Classes,mthodes, attributs

this this = rfrence sur lobjet courant Reprsente linstance courante en train de sexcuter
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(); } }

74

Classes,mthodes, attributs

Utilisation de this dans un constructeur


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; }

75

Classes,mthodes, attributs

null La valeur null peut tre assigne nimporte quelle rfrence sur un objet Une mthode peut retourner null Lappel dune mthode sur une rfrence dobjet valant null provoque une erreur dexcution (NullPointerException) On peut tester une rfrence pour savoir si elle vaut null
Personne moi = new Personne(); if (moi != null) { System.out.println("Jexiste toujours ! "); }
76

Classes,mthodes, attributs

Oprateurs sur les rfrences Egalit de deux rfrences : ==


Compare si 2 rfrences pointent vers le mme objet

Diffrence de deux rfrences : !=


Compare si 2 rfrences pointent vers des objets diffrents

Type dinstance de la rfrence : instanceof


Permet de savoir si lobjet rfrenc est une instance dune classe donne ou dune de ses sous-classes
Personne moi = new Personne(); if (moi instanceof Personne) { System.out.println("Je suis bien une personne! "); }
77

Classes,mthodes, attributs

Mthodes static Le mot-cl static permet de dfinir une mthode comme statique Une mthode statique ne peut accder quaux attributs de la classe dclars comme static Lappel dune mthode statique ne se fait pas sur un objet, mais sur une classe
Exemple : Math.cos(3.14);

Lutilisation dune mthode statique ne ncessite pas la cration dun objet


78

Classes,mthodes, attributs

Exemple de mthode static


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();

79

Hritage, polymorphisme, encapsulation

80

Hritage, polymorphisme, encapsulation

Hritage (1/2) Toute classe Java est une sous-classe de la classe Object Java ne permet pas lhritage multiple La classe drive peut changer limplmentation dune ou plusieurs mthodes hrites : redfinition Il est possible de faire en sorte que lon ne puisse pas hriter dune classe en particulier : utilisation du mot-cl final Il est possible de faire en sorte quune mthode ne puisse pas tre redfinie : utilisation du mot-cl final
81

Hritage, polymorphisme, encapsulation

Hritage (2/2)
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() {} }

82

Hritage, polymorphisme, encapsulation

Conversion entre classes Si une variable rfrence un objet dune classe, elle peut rfrencer un objet de nimporte laquelle de ses sous-classes
class Felin {} class Lion extends Felin {} Lion lion = new Lion(); Felin felin; felin = lion; lion = felin // OK conversion implicite : les lions // sont des flins // ERREUR : tous les flins ne sont pas // des lions

83

Hritage, polymorphisme, encapsulation

Conversion ascendante, conversion descendante


class Felin {} class Lion extends Felin {} Felin felin = new Felin(); Lion lion = new Lion(); felin = lion; felin.parler(); felin.chasser() lion = felin; lion = (Lion)felin; lion.parler(); lion.chasser(); // // // // Conversion ascendante roar ! Mthode introuvable ERREUR : conversion explicite ncessaire

// Conversion descendante explicite // roar ! // OK

Chat chat = new Chat(); felin = chat; // Conversion ascendante lion = (Lion)felin // ERREUR java ClassException

84

Hritage, polymorphisme, encapsulation

Polymorphisme (1/2) Une mthode polymorphe est une mthode dclare dans une super-classe et redfinie dans une sous-classe Une mthode Java st par dfaut polymorphe Les mthodes final ne peuvent pas tre redfinies
Permet la machine virtuel doptimiser le byte-code Est utilis pour des raisons de scurit

85

Hritage, polymorphisme, encapsulation

Polymorphisme (2/2)
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(); } } }

86

Hritage, polymorphisme, encapsulation

Super (1/2) Le mot-cl super permet daccder aux mthodes et aux attributs de la super-classe super est utilis dans le constructeur de la classe drive pour appeler celui de la super-classe
Cela permet de factoriser du code super() doit tre la premire instruction du constructeur
class Felin { int _nbPattes; Felin(int nbpattes) { _nbPattes = nbPattes; } } class Chat { Chat() { super(4); race = "goutire"; } }
87

Hritage, polymorphisme, encapsulation

Mthodes et classes abstraites Une mthode abstraite est une mthode dont on donne la signature sans en dcrire limplmentation
Le mot-cl abstract permet dindiquer quune mthode doit tre redfinie dans une sous-classe

Une classe abstraite ne peut pas tre instancie


Le mot-cl abstract permet de bloquer linstanciation Une classe possdant une mthode abstraite est abstraite
abstract class Felin { abstract void parler() {] } class Chat extends Felin { void parler() { System.out.println("miaou ! "); } } Felin f = new Felin(); // Ne compile pas
88

Hritage, polymorphisme, encapsulation

Les packages : dfinition (1/2) Un package est une bibliothque de classes On regroupe les classes dun mme domaine dans un package Les packages sont organiss hirarchiquement La notion de package apporte un niveau dencapsulation supplmentaire

89

Hritage, polymorphisme, encapsulation

Les packages : dfinition (2/2) Les classes du JDK sont classes dans des packages
java lang String.class Thread.class util Date.class Vector.class event awt Button.class List.class net Socket.class URL.class

Java importe automatiquement le package java.lang qui contient des classes comme Thread ou System
90

Hritage, polymorphisme, encapsulation

Les packages : utilisation (1/2) Il y a 2 manires dutiliser une classe stocke dans un package :
Utilisation du nom complet
java.util.Date dateDuJour = new java.util.Date(); System.out.println(dateDujour);

Importer une classe ou toutes les classes du package


import java.util.Date; Date dateDuJour = new Date(); System.out.println(dateDujour); import java.util.*; Date dateDuJour = new Date(); System.out.println(dateDujour);
91

Hritage, polymorphisme, encapsulation

Les packages : utilisation (2/2) Le mot-cl package permet de dfinir un nouveau package La hirarchie des packages correspond la hirarchie des rpertoires
//fichier Compte.java dans le rpertoire Finance package finance; public class Compte { }
//Fichier Client.java dans le rpertoire de lapplication import finance.*; public class Client { Compte c = new Compte(); }

92

Hritage, polymorphisme, encapsulation

La variable CLASSPATH Le compilateur utilise la variable denvironnement CLASSPATH pour localiser les classes dun package sur le disque Cette variable doit rfrencer tous les rpertoires 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 rfrencer le fichier

La hirarchie des classes des packages doit tre respecte


93

Hritage, polymorphisme, encapsulation

Classes publiques Le mot-cl public permet de dfinir une classe comme publique Seules les classes public sont accessibles depuis lextrieur du package Chaque fichier java doit contenir au maximum une classe public
Cette classe doit porter le nom du fichier dans lequel elle est dfinie (en respectant les majuscules/minuscules)

Les classes non public ne sont utilisables qu lintrieur du fichier dans lequel elles sont dfinies
94

Hritage, polymorphisme, encapsulation

Visibilit - Encapsulation Permet de distinguer les services offerts (interface) de limplmentation Lencapsultation des classes Java est dfinie 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 mme classe

Il y a 4 niveaux de visibilit : public, private, protected, friendly (valeur par dfaut)

95

Hritage, polymorphisme, encapsulation

Rgles de visibilit

public protected private

friendly
(par dfaut)

96

Hritage, polymorphisme, encapsulation

Rgles de visibilit Pour une bonne encapsulation, il est prfrable de dfinir les attributs comme private On dfinit alors des mthodes publiques (accesseurs) permettant de lire et/ou de modifier les attributs
Si un accesseur retourne une rfrence sur un objet, rien nempche la modification de cet objet travers cette rfrence cela brise lencapsulation
class Personne { private Vector children = new Vector(); public Vector getChildren() { return children; } } Personne moi = new Personnes(); Rupture de Vector v = moi.getChildren(); lencapsulation v.addElement(new Personne("Paul");
97

Hritage, polymorphisme, encapsulation

Encapsulation des constantes


class EtatPorte { // Classe non publique public final static EtatPorte OUVERTE = newEtatPorte(); public final static EtatPorte FERME = newEtatPorte(); // Empeche la cration 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); } }
98

Les interfaces

99

Les interfaces

Dfinition Une interface dfinit un ou plusieurs services offerts Elle est compose dun ensemble de mthodes abstraites et de constantes ( static et final ) Une classe peut implmenter une ou plusieurs interfaces
Elle doit fournir une implmentation pour chaque mthode
interface Printable { void print(); class Point extends Object implements Printable { private double x, y; void print() { System.out.println(x); System.out.println(y); } }
100

Les interfaces

Hritage multiple dinterface Une interface peut hriter dune ou plusieurs autres interfaces
Java supporte lhritage multiple dinterface

Une classe peut implmenter plusieurs 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() {};
}
101

Les interfaces

Interfaces et types Une interface dfinit un nouveau type Des objets diffrents peuvent rpondre au mme message condition quils implmentent la mme interface Loprateur instanceof peut tre utilis pour savoir si un objet implmente une interface donne
Point point = new Point(); if (point instanceof Printable){ point.print(); }

102

Les interfaces

Variables dinterfaces Les variables dclares dans une interface sont des constantes
Les mots cls static et final ne sont pas ncessaires

Les variables des interfaces doivent obligatoirement tre initialises


interface MyInterface { int MIN = 0; int MAX = 100; }

int i = MyInterface.MAX;

103

Les interfaces

Quand utiliser les interfaces ? Pour dfinir des services techniques Pour contourner le fait que Java ne supporte pas lhritage multiple Interface vs Hritage :
On utilise lhritage quand un objet est un sous-type dun autre On utilise une interface pour dcrire le fait quune classe implmente un service particulier

Personne
extends

Persistent
implements
104

Client

Les interfaces

Conception par contrat (1/4) Exemple : on dfinit les classes Client , Banque et Compte

Compte Client
0..*

credit() debit() balance() save() load()

Banque
0..*

105

Les interfaces

Conception par contrat (2/4) Le Client et la Banque ont des points de vue diffrents sur un Compte . Ils nutilisent pas les mmes mthodes
On dfinit des contrats diffrents
ICompteClient credit() debit() balance()
0..* implements

Compte
credit() debit() balance() save() load()
implements

ICompteBanque
balance() save() load()
0..*

Client

Banque
106

Les interfaces

Conception par contrat (3/4) La mthode balance peut tre mise en facteur
ICompte balance()

ICompteClient credit() debit()


0..*

implements

Compte credit() debit() balance() save() load()

implements

ICompteBanque save() load()


0..*

Client

Banque
107

Les interfaces

Conception par contrat (4/4) Les mthodes save et load sont des services techniques transversaux IPersistant
ICompte balance() save() load()

ICompteClient credit() debit()


0..*

implements

Compte credit() debit() balance() save() load()

implements

ICompteBanque

0..*

Client

Banque
108

Les classes de base

109

Les classes de base

La classe Object : dfinition Classe mre de toutes les classes


Permet dutiliser les classes conteneurs et le polymorphisme

La mthode toString() retourne une description de lobjet La mthode equals(Object) teste lgalit smantique de deux objets Le mthode getClass() retourne le descripteur de classe. Il permet de :
connatre la classe dun objet connatre le nom de la classe, ses anctres dcouvrir la structure des objets (JDK 1.1)
110

Les classes de base

La classe Object : exemple


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 rfrences = false Test des valeurs = true

111

Les classes de base

La finalisation dun objet


Tout objet qui nest plus rfrenc est dtruit par le ramassemiettes
Il ny a pas de delete en java

finalize() est appel avant que le ramasse-miettes ne libre la mmoire occupe par lobjet
Permet de librer des ressources alloues par lobjet

On peut forcer lappel au ramasse-miettes en invoquant


System.gc() : dclencher le ramasse-miettes System.runFinalisation() : dclencher la finalisation des objets

Vous pouvez lancer la machine virtuelle en bloquant le dclenchement automatique du ramasse-miettes


Option : java-nosyncgc Permet de contrler le dclenchement du ramasse-miettes
112

Les classes de base

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 reprsentent un type de base


Rcuprer les valeurs min et max Crer une instance partir dun type de base ou dune chane Conversions entre types de base et chanes Conversions entre chanes et types de base Utiliser des types de base dans des conteneurs

Boolean, Integer, Float, Double, Long, Character Attention : ne supporte pas doprateurs (+, -, ) Elles sont dans le package java.lang
113

Les classes de base

Wrapper vs types de base Avantages des type de bases :


Plus lger en mmoire Supporte un certain nombre doprateurs Autorise certaines conversions automatiques de types

Avantages des Wrappers :


Est pass par rfrence Dispose de mthodes de conversions statiques vers les autres types Peut tre gr par les objets container

114

Les classes de base

Exemples Convertir une chane en entier :


static int convertir(String s) { try { return Integer.parseInt(s); } catch(Exception e) { return 0; } }

Convertir un entier en chane :


static String convertir(int i) { Interger j = new Integer(i); return j.toString(); }

115

Les classes de base

La classe java.lang.String Contient une chane de caractres Classe connue par le compilateur Java
Une chane 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
class Personne { String nom; public String getNom() { return nom; } }
116

Les classes de base

String : concatnation
int area = 33; int prefixe = 1; int suffixe = 02030405; // Chaque concatnation cre un nouvel objet // lancien est dtruit par le Garbage Collector String numTel numTel numTel numTel = "(" + area + ")"; += prefixe += "-" += suffixe // (33) // (33)1 // (33)1// (33)1-02030405

// Un seul objet est cr numtel = "(" + area + ")" + prefixe + "-" + suffixe // Conversion dun entier en chane String un = 1 + "";

117

Les classes de base

String : manipulation length() : cette mthode permet de connatre le nombre de caractres dune chane
Ex : for (int i = 0; i < monTexte.length(); i++) {......}

indexOf(char c, int i) : retourne la position du caractre c partir de la position i


if (monTexte.indexof($, 5) <> -1 ) {......}

substring(int i, int j) : extrait de la chane les caractres de la position i la position j


String nouveauMot = ancienMot.substring(2,5);

equals() : retourne un boolan signifiant si les deux chanes sont identiques


Ex : if ( mot1.equals(mot2)) {......}
118

Les classes de base

La classe java.lang.StringBuffer Cest une chane de caractres modifiable et de taille variable Son utilisation est moins simple que String
pas dutilisation possible de loprateur +

append(p) : ajoute p en fin de la chane courante


p peut tre de nimporte quel type de base

length() : retourne la longueur de la chane setLength() : change la longueur de la chane


Si elle est tendue, les nouveaux caractres sont initialiss 0

119

Les classes de base

La classe java.util.Vector Tableau de rfrences taille variable On ne peut y stocker que des rfrences 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 prsent dans le tableau et quelle est sa position Vous pouvez :
Insrer ou supprimer des rfrences Parcourir le contenu
120

Les classes de base

Vector : insrer, supprimer


Vector vInt = new Vector(); for (int i = 0; i<10 ; i++) { Integer elt = new Integer(i); vInt.addElement(elt); } // 0123456789 Interger i = new Integer(0); vInt.addElementAt(i, 5); // 01234056789 vInt.removeElementAt(0); // 1234056789 vInt.removeAllElements();

121

Les classes de base

Vector : modifier, rechercher ...


Object elementAt(int index)
Retourne llment 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 rfrence

Int size()
Retourne la taille courante
122

Les classes de base

Linterface java.util.Enumeration
Objet permettant de parcourir les lments dun conteneur
Une numration 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() applique sur un Vector retourne une Enumeration Deux mthodes :


Boolean hasMoreElements() : teste sil reste des lments Object nextElement() : rcupre llment courant et passe au suivant

123

Les classes de base

Enumeration : exemple
Vector vInt = new Vector(); for (int i = 0; i<10 ; i++) { Integer elt = new Integer(i); vInt.addElement(elt); } // 0123456789

// Premire faon de parcourir le vector for (int i = 0; i<vInt.size() ; i++) System.out.println(vInt.elementAt(i));


// Seconde faon de parcourir le vector // la plus lgante for (Enumeration e = vInt.elements(); e.hasMoreElements();) System.out.println(e.nextElement());

124

Les classes de base

Quand utiliser une Enumeration ? Utilisez une Enumeration pour parcourir une association 1..*
Personne
possde -> proprietaire 0..*

Voiture

Permet de ne pas briser lencapsulation Dans lexemple suivant :


la classe Personne possde une mthode 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

125

Les classes de base

Quand utiliser une Enumeration ?


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; } }
126

Les classes de base

La classe java.util.Hashtable Tableau associatif permettant :


Dindexer un objet par une cl De retrouver rapidement un objet partir dune cl

Les cls des rfrences sont des objets


Chanes de caractres, numros didentification Elles sont recherches par valeurs (mthodes equals) Les cls doivent implmenter la mthode 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

Trs performant pour laccs aux valeurs


127

Les classes de base

La classe java.util.Hashtable Object put(Object key, Object value) : insre un lment Object remove(Object key) : supprime la cl Object get(Object key) : retourne la valeur associe la cl Boolean containsKey(Object key) : teste si la cl existe Keys() : retourne une Enumeration sur les cls Elements() : retourne une Enumeration sur les valeurs
128

Les classes de base

Hashtable : un exemple
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 cls 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); }

129

Les classes de base

Choisir un conteneur Le choix dun conteneur dpend du type daccs


Tableau Parcourir Insrer ou enlever Rechercher 10 3 3 (5 si tri) Liste (Vector) 7 10 2 Hashtable 3 9 10

130

Les exceptions

131

Les exceptions

A quoi servent les exceptions ? Le mcanisme des exceptions Java permet de traiter les erreurs dxcution Il permet aussi de grer toutes les situations hors contrat dfinit par le concepteur Le travail du concepteur :
Dfinir les ensembles dinstructions risque Implmenter les gestionnaire dexceptions pour chaque cas

Le travail de la machine virtuelle Java :


Distinguer un rsultat valide dun code erreur Propager jusquau gestionnaire de ce cas exceptionnel les informations qui lui sont ncessaires (code erreur, donnes de contexte)
132

Les exceptions

Exemple (1/2)
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); } }
133

Les exceptions

Exemple (2/2)
class PasDeSolution extends Exception { // Retourne la description du problme String toString() { return "Lquation na pas de solution"; } }

... ... // Mthode appelante try { Equation ed = new Equation(1,0,1); double resultat = eq.solution(); } catch(PasdeSolution p) { System.out.println(p.toString); }

// x2 + 1 = 0

Branchement vers le catch

134

Les exceptions

Throw et throws Le mot-cl Throw permet de soulever une exception


if (discr<0) throw new PasDeSolution();

Le mot-cl Throws sutilise au niveau de la signature dune mthode pour prciser que celle-ci est susceptible de soulever une exception
public double solution() throws PasDeSolution {

135

Les exceptions

Try - Catch et Throws Lorque que lon utilise une mthode susceptible de soulever une exception, il faut spcifier comment on la gre. 2 Solutions :
Traiter le cas dans la mthode : Try - Catch
try { double resultat = eq.solution(); } catch(PasdeSolution p) { System.out.println(p.toString); }

Faire remonter lexception au niveau suprieur : Throws


void calculer() throws PasDeSolution { double resultat = eq.solution(); }
136

Les exceptions

Finaly Le mot-cl Finally permet de dclarer un bloc dinstruction qui sera excut dans tous les cas, quune exception survienne ou non.
try { // Ouvrir le fichier Erreur ici ! // Lire les donnes // } catch (IOException i) { System.out.println("Erreur I/O sur le fichier"); return; } finally { Retour aux instructions // Fermer le ficher // suivant la lecture }

Bloc dinstructions toujours trait


137

Les exceptions

Classification des exceptions Le JDK contient des classes dexceptions dont voici un extrait :
Object

Throwable

Error

Exception

......

......

RuntimeException

SecurityException

......

ArithmeticException

NullPointerException

PasDeSolution
138

Les exceptions

Btir une hirarchie dexceptions mtier

Exception ConnectionException

NetworkFailure

AuthentificationFailed

ServerDownOrBusy

InvalidPassword

InvalidLogin

139

Les exceptions

Debugging : les traces Une exception drive de la classe Object. Utilisez la mthode toString() pour garder des traces dexcution La mthode PrintStackTrace() permet dafficher la pile des appels depuis la mthode qui a dclench lexception La classe Throwable prend une String sa construction. Cela permet denrichir les traces avec des messages spcifiques, rcuprs avec getMessage()

140

Les entres-sorties

141

Les entres-sorties

Description Le modle dentre/sortie de Java offre 2 groupes de classes :


Entres/sorties par octet (Stream) Entres/sorties par caractres UNICODE (Reader/Writer)

Les classes InputStreamReader et OutputStreamWriter font le lien entre les 2 modles

Reader

Writer

OutputStream

InputStream

InputStreamReader

OutputStreamWriter
142

Les entres-sorties

Canal et Filtre (1/2) Un Canal reprsente une source de donnes


Un fichier, un pipe, un socket, un tableau Peut tre lu et/ou crit Interface de bas niveau : lire/crire un octet ou un caractre

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 chane Il est possible de connecter un filtre un autre

143

Les entres-sorties

Canal et Filtre (2/2)


C a n a l

Fichier

Filtre

Reader

Writer

OutputStream

InputStream

FilterReader

FilterWriter

FilterOutputReader

FilterInputWriter

144

Les entres-sorties

Entres/Sorties par caractres Flots de caractres UNICODE-2


2 octets par caractre

Deux classes de base


Java.io.Reader Java.io.Writer

Modle symtrique aux canaux par octets


ReaderFilter WriterFilter

Vous pouvez connecter un canal UNICODE sur un canal par octets


OutputStreamWriter et InputStreamReader Conversion des caractres UNICODE sur 1 caractre Dpend de la plate-forme (ASCII ou EBCDIC)
145

Les entres-sorties

Sous-classes de la classe Reader


FileReader : lecture dun flux de caratres partir dun fichier PipedReader : lecture dun flux de caratres partir dun Pipe (IPC) StringReader : lecture dun flux de caratres partir dun String CharArrayReader : lecture dun flux de caratres partir dun tableau de char InputStreamReader : lecture dun flux de caratre partir dun InputStream BufferedReader : permet de mmoriser les caractres lors de la lecture pour amliorer les performances ...etc

146

Les entres-sorties

Sous-classes de la classe Writer PipedWriter : criture dun flux de caratres vers un Pipe (IPC) StringWriter : criture dun flux de caratres dans un String CharArrayWriter : criture dun flux de caratres dans un tableau de char OutputStreamWriter : criture dun flux de caratre vers un OutputStream BufferedWriter : permet de mmoriser les caractres lors de lcriture pour amliorer les performances ...etc
147

Les entres-sorties

La classe java.io.PrintWriter Permet dcrire une chane de caractres, un entier (Integer), etc., vers un canal de sortie Pour crire, on utilise les mthodes write ou writein Le flushing peut tre automatique ou non
try{ FileWriter fos = new FileWriter("text.txt"); PrintWriter p = new PrintWriter(fos,true); String s = "Je suis une chane";

p.print(s); P.println(s);

// criture sans retour-chariot // criture avec retour-chariot

} catch(IOException e) {}

148

Les entres-sorties

La classe java.io.BufferedReader Permet de lire des informations depuis un Reader quelconque (entre standard, fichier, )
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) {}

149

Les entres-sorties

La classe java.io.File Manipulations du systme de fichiers Constructeurs :


Public File(File dir, String name) ; Public File(String path) ; Public File(String path, String name) ;

Principales mthodes :
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()
150

Les entres-sorties

La classe java.io.RandomFile
La classe RandomAccessFile permet la lecture et lcriture nimporte quelle position dans le fichier Loctet est lunit de mesure des positions et des dplacements 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)

Mthodes :
ReadInt, readFloat, readBoolean : lecture des types de base (Interface DataInput) WriteInt, writeFloat, writeBoolean : criture des types de base (Interface DataOutput) Seek(long) : dcalage en octets
151