Upload
diawara-modibo
View
244
Download
0
Embed Size (px)
Citation preview
7/30/2019 Programmation oriente Objet en JAVA
1/88
121643316.doc______________________________________________________________________________
Programmation Oriente
Objets en JAVACours du Cycle dApprofondissement
Cours dispens par B. Chaulet
CNAM ANGOULEME 2000-2001
___________________________________________________________________DI GALLO Frdric Page 1 24/12/2012
class{ public
private
7/30/2019 Programmation oriente Objet en JAVA
2/88
121643316.doc______________________________________________________________________________
PROGRAMMATIONPROGRAMMATION
ORIENTEEORIENTEEOBJETSOBJETS ::
Gnralits surGnralits sur
JAVAJAVA
___________________________________________________________________DI GALLO Frdric Page 2 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
3/88
121643316.doc______________________________________________________________________________
PROGRAMMATION JAVA: GNRALITS.....5
I. PROGRAMMATION
CLASSIQUE
ET
ORIENTE
OBJETS
..........................................................................5II. CLASSEETOBJET.....................................................................................................................6III. LESDONNESDUNECLASSE....................................................................................................8IV. LESMTHODESDUNECLASSE................................................................................................11
4.1) Mthodes publiques de type Constructeur ...........................................................14
4.2) Mthodes publiques de type Accesseur ...............................................................17
4.3) Les mthodes de type binaire.....................................................................................21
4.4) La transmission de paramtres.................................................................................26
4.5) Le mot cl this ......................................................................................................27
V. LESVARIABLESETMTHODESDECLASSE..................................................................................28VI. TRAVAUX PRATIQUES...........................................................................................................29
6.1) Utilisation de la classe String....................................................................................296.2) Cration dune classe................................................................................................32
VII. ANNEXE : LESTAPESDEDVELOPPEMENTEN JAVA.................................................................33
LES COLLECTIONS EN JAVA...........................37I. INTRODUCTION..............................................................................................................37II. LES TABLEAUX.............................................................................................................39III. LES VECTEURS............................................................................................................42
3.1) La classe gnrique Object .................................................................................42
3.2) Les mthodes de la classe Vector ........................................................................45
3.3) La classe Enumeration ........................................................................................473.4) Les packages..............................................................................................................48
IV. LESDICTIONNAIRES..............................................................................................................49V. LESFLUX.............................................................................................................................51
5.1) Oprations sur un fichier...........................................................................................51
5.2) La gestion des erreurs...............................................................................................53
L'HERITAGE EN JAVA........................................63I. INTRODUCTION..............................................................................................................63II. DFINITIONDEL'HRITAGE......................................................................................................65
2.1) Le constructeur d'une classe drive.........................................................................66
2.2) Les proprits d'une classe drive...........................................................................67
2.3) Les mthodes d'une classe drive............................................................................68
III. MANIPULATIONSD'OBJETSISSUSDECLASSEMREETFILLE.........................................................69
EXEMPLES DE CLASSES JAVA.........................78I. PUISSANCEDE10....................................................................................................................78II. CAPACITE.............................................................................................................................79III. PUISSANCE..........................................................................................................................80
IV. INVENTAIRE.........................................................................................................................80V. CONNEXION & LISTECONNEXION............................................................................................81
___________________________________________________________________DI GALLO Frdric Page 3 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
4/88
121643316.doc______________________________________________________________________________
VI. PRODUIT & PRODUITACHET................................................................................................83VII. COMPTE & COMPTEEPARGNE..............................................................................................84VIII. FACTURE & LISTEFACTURES..............................................................................................86IX. CLIENT & CLIENTPRO.........................................................................................................88
___________________________________________________________________DI GALLO Frdric Page 4 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
5/88
121643316.doc______________________________________________________________________________
INFORMATIQUE CNAM ANGOULEME 2000-2001INFORMATIQUE CNAM ANGOULEME 2000-2001
PROGRAMMATION JAVA:PROGRAMMATION JAVA:GNRALITSGNRALITS
I. Programmation classique et oriente objets
En programmation classique le dveloppement dune application se dcompose en deux
tapes bien distinctes :
La dfinition des structures de donnes capables daccueillir linformation quelon veut grer. Ainsi, en programmation classique, pour stocker en mmoirecentrale une fraction on a introduit un enregistrement compos de 2 champs de type
Entier nomms Numerateur et Denominateur .
La conception de fonctions et de procdures qui travaillent sur les structures dedonnes conues ltape prcdente et qui permettent de mettre en uvre tous les
besoins exprims dans le cahier des charges.
Cette forme de programmation, qui spare les donnes des traitements, rend difficile lamise en place de contrles, destins garantir la cohrence et lintgrit des donnes.Lutilisateur peut en effet accder directement aux donnes, sans utiliser les fonctions mises sa disposition. Par exemple, le programme dutilisation des fractions ci-dessous, dfinit
partiellement la fraction F ce qui va entraner des erreurs lors de lappel certaines fonctionsprsentes dans la bibliothque Fraction.h .
#includemain(){ struct Fraction F, R;
F.Numerateur = 3 ;R=Inverse (F) ;}
De plus, toute modification de limplmentation des donnes des consquences surlensemble des fonctions travaillant sur ces donnes, et donc sur lensemble des traitementsutilisant ces fonctions. Si lon choisit par exemple, pour des raisons doptimisation,dimplanter une fraction au moyen dune chane de caractres ( 4/5 ), toutes les fonctionsde la bibliothque Fraction.h sont modifier au niveau du type des paramtres dentre oude sortie. Il va de soi que ces changements imposent, leur tour, une modification de tous les
programmes qui rfrencent la bibliothque Fraction.h .
___________________________________________________________________DI GALLO Frdric Page 5 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
6/88
121643316.doc______________________________________________________________________________
La programmation oriente objets a t introduite afin de remdier ces inconvnients.Son principe de base consiste :
dune part regrouper (ou "encapsuler") au sein dune mme unit (appeleclasse) les donnes et les traitements. Par exemple, on dfinira la classe Fraction de la manire suivante :
class Fraction{ private int Numerateur ; dclaration de variables
destinesprivate int Denominateur ; mmoriser une fraction.public void initialiser(int n, int d){Numerateur = n ;Denominateur = d ; traitements sur les fractions.}
}Une fraction est dfinie par un numrateur, un dnominateur ainsi que par toutes lesoprations mathmatiques existantes sur les fractions.
dautre part contrler laccs aux donnes en les dclarant prives ce quiobligera lutilisateur de la classe employer les traitements encapsuls pour agir surcelles-ci.
En conclusion, la programmation oriente objets a deux avantages principaux:- contrler l'accs aux donnes,- permettre la modification des classes sans avoir d'incidence sur les
programmes des utilisateurs.
II. Classe et objet
Une classe est une description abstraite de structure de donnes et de traitements destine mmoriser et grer une ralit ou une notion.Par exemple la classe Fraction permet demmoriser des fractions et de mettre en uvre des oprations sur ces dernires.
A partir dune classe, tout langage objet permet (par lintermdiaire de l'oprateur new) decrer des objets qui seront des emplacements en mmoire centrale destins contenir
effectivement linformation manipule. Ces objets sont appels instance et lopration decration : instanciation. Dans louvrage Java, la synthse , les auteurs dfinissent uneclasse comme un "moule" partir duquel on peut obtenir autant dobjets que ncessaires.
Le programme Java suivant illustre la cration dun objet de la classe Fraction .
Fraction F; // dclaration dune variable qui va pointer sur un objet : Fraction ;// F contient la valeur null
F= new Fraction() ; // cration dun objet Fraction , c--d. allocation en mmoire centrale// dun espace destin recevoir la valeur dune fraction.// la variable F contient ladresse de cet emplacement.
Numerateur
F
___________________________________________________________________DI GALLO Frdric Page 6 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
7/88
121643316.doc______________________________________________________________________________
Denominateur
Il est important de noter que la variable F contient ladresse de lobjet et non lobjet lui-mme. Ainsi, si on dclare une autre variable G de la classe Fraction , laffectation
G=F aura pour consquence daffecter dans la variable G ladresse contenue dans F .A lissue de cette instruction F et G pointe le mme objet.
En langage Java, loprateur new recherche lespace ncessaire la reprsentation delobjet et renvoie ladresse de cet objet. Dans le cas o loprateur nobtient pas lallocationncessaire, il termine lexcution en renvoyant lexception OutOfMemoryError (qui seratudie ultrieurement). Ds que lespace allou un objet nest plus dsign par unevariable, lespace mmoire est rcupr par un systme de ramasse-miettes.
Application: On considre la classe Date :Elle est dfinie par 3 donnes: Jour, Mois et Anne, ainsi que par toutes les oprations sur
une date telles que lajout de 2 dates, le calcul de la date du lendemain, etc.Analyser lextrait du programme Java suivant et indiquer combien dobjets de la classe
Date ont t crs au cours de lexcution.
0 int I ;1 Date D1,D2 ;2 D1=new Date() ;3 D2=D1 ;4 D1=new Date() ;
N Type Image0 Dclaration d'une variable de type primitive I
1 Dclaration des variables D1 et D2destines contenir des objets de type Date
D1
D22 Instanciation de D1
JourD1 Mois
Annee
D23 Instanciation de D2 vers l'objet de D1
D1 JourD2 Mois
Annee
4 Nouvelle instanciation de D1Jour
D1 MoisAnnee
___________________________________________________________________DI GALLO Frdric Page 7 24/12/2012
NULL
NULL
NULL
7/30/2019 Programmation oriente Objet en JAVA
8/88
121643316.doc______________________________________________________________________________
III. Les donnes dune classe
Toute classe comporte une partie donnes, dans laquelle on dcrit les emplacements
mmoires - appels variables dinstance - qui seront utiles la mmorisation delinformation que lon veut grer. Ces emplacements sont en fait allous chaqueinstanciation et sont caractriss par un nom et un type qui peut tre simple ou structur.
La classe Fraction utilise, pour mmoriser une fraction, deux variables dinstances de
type simple Entier : Numerateur et Denominateur. A chaque instanciation de la classe
Fraction, il y aura cration de ces deux variables comme le montre le schma ci-dessous :
Numerateur
Fraction F1, F2 ; Denominateur
F1=New Fraction() ;
F2=New Fraction() ;Numerateur
Denominateur
On remarque donc, qu un moment donn, une variable dinstance existe en autantdexemplaires quil y a dobjets instancis.La syntaxe Java pour dclarer les variables dinstance dune classe est la suivante:
SpcificateurAccs NomType NomVariable [=ValeurInitiale]
Spcificateur daccs reprsente le niveau de protection de la donne; 2niveaux Java:
- public : laccs direct la donne est possible depuis tout programme dutilisationde la classe par la rfrence : VariableObjet.VariableDInstance
- private : laccs direct la donne nest pas possible depuis un programme
dutilisation de la classe. Lutilisateur devra utiliser des traitements encapsulspour lire ou mettre jour ces donnes.
Le programme ci-dessous illustre les consquences de laffectation des spcificateurs :
- private la variable Numerateur ,- public la variable Denominateur dans lutilisation de la classe Fraction :
Fraction F ;F=New Fraction()F.Numerateur =2 // affectation refuse la compilation car la variable Numerateur est priveF.Denominateur = 3 // affectation autorise car la variable Denominateur est publique
___________________________________________________________________DI GALLO Frdric Page 8 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
9/88
121643316.doc______________________________________________________________________________
La valeur initiale sera la valeur affecte dans la variable dinstance lors de lacration dun objet. Dans le cas o cette valeur nest pas prcise, cest une valeur quidpend du type de la variable dinstance qui est affecte (par exemple 0 pour le type
Entier ).La partie donnes de la classe Fraction pourrait scrire ainsi :
class Fraction{ private int Numerateur ;
private int Denominateur =1; }
Application: On suppose que la partie Donnes de la classe Date :
class Date
{ public int Jour;public int Mois;public int Annee ;
}
1. On considre le programma Java de test de la classe Date suivant. Indiquer lemessage affich par le programme lors de son excution.
class test{ public static void main(String args[])
{ Date D1,D2 ;
D1=new Date() ;D1.Jour = 1 ;D1.Mois = 1 ;D1.Annee = 2001 ;D2 = New Date() ;D2.Jour = 1 ;D2.Mois = 1 ;D2.Annee = 2001 ;if (D1==D2) System.out.println( galit ) ;else System.out.println ( Diffrence ) ;
}}Le message affich est "Diffrence" car D1 et D2 sont diffrents. Ils contiennent les
adresses distinctes des classes, seul leur contenu est gal.
2. A lissue de linstanciation dun objet de la classe Date , indiquer le contenu de sesvariables dinstance.
Jour, Mois et Annee sont des entiers, donc leur contenu "initial" est 0.
3. La dfinition de la classe Date autorise-t-elle crer (dans un programmedutilisation de la classe) des objets qui contiennent des valeurs qui ne correspondent pas
une date (par exemple le :32/02/2000).Oui, on a le droit de mettre n'importe quel entier, mme s'il ne correspond pas une date
___________________________________________________________________DI GALLO Frdric Page 9 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
10/88
121643316.doc______________________________________________________________________________
___________________________________________________________________DI GALLO Frdric Page 10 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
11/88
121643316.doc______________________________________________________________________________
IV. Les mthodes dune classe
Les mthodes dune classe (encore appeles comportements ou traitements) se rpartissent
en deux catgories : Les mthodes publiques qui correspondent tous les traitements que lutilisateur
dune classe pourra appliquer aux objets de la classe. Certains auteurs qualifient ces mthodespubliques de messages que lon peut envoyer aux objets.
Les mthodes prives qui sont des traitements introduits pour simplifier laconception de la classe, mais qui ne pourront pas tre utiliss depuis un programmedutilisation de la classe.Exemple: dans la classe Fraction la mthode destine calculerle PGCD de deux nombres entiers est une mthode prive dont lexistence rend plus simple le
traitement destin mettre sous forme irrductible une fraction. Dans ce chapitre, on limiteraltude aux mthodes publiques.
En Java la dclaration dune mthode publique respecte la syntaxe suivante :
Public TypeRsultat NomFonction (Liste Paramtres formels){Dclaration de variables localesInstructions}
Remarque : on appelle signature de la mthode le nom de la fonction suivi de la liste de sesparamtres formels.
Comme pour le langage C, dans le cas o la fonction ne renvoie aucun rsultat, on doitspcifier le mot cl void pour le TypeRsultat . Dans le cas o la fonction renvoie unrsultat, ce dernier devra tre retourn par linstruction return Rsultat . La liste des
paramtres formels et des variables locales se dclare de la mme manire quen C.Remarquons que ces deux listes peuvent tre vides.
En plus des paramtres dentre et des variables locales, toute mthode rfrence tout, ouune partie, des variables dinstance de la classe. Une mthode publique tant toujoursappliqu un objet de la classe, ce seront les variables de cet objet qui seront effectivementrfrences lors de lexcution de la mthode. Ce principe est illustr ci-dessous par lamthode Afficher de la classe Fraction .
class Fraction{ private int Numerateur ;private int Denominateur ;
public void Afficher(){System.out.println(Numerateur + / + Denominateur) ;}
}En appliquant la mthode Afficher lobjet de gauche, ce seront les contenus des
variables Numerateur et Denominateur de cet objet qui seront affichs c--d. 4/8 .
___________________________________________________________________DI GALLO Frdric Page 11 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
12/88
121643316.doc______________________________________________________________________________
Lapplication dune mthode sur un objet scrit : VariableObjet.NomMthode(..). Parexemple, en supposant que la variable F pointe sur lobjet ci-dessus, laffichage de la
fraction contenue dans cet objet scrira : F.Afficher() .
Comme il a t dj dit dans le chapitre prcdent, si la mthode renvoie un rsultat,lapplication de la mthode un objet doit tre intgre une instruction, sinon elle devra trespcifie comme une instruction. La mthode Afficher() sutilise comme une instructioncar elle nadmet aucun paramtre de sortie.
Exemple:class Date{ public int Jour;
public int Mois;public int Annee ;
concepteur public void Afficher(){ System.out.println(Jour + / + Mois+ / + Annee) ; }
public int MonJour(){ return Jour ; }
}
class test{ public static void main(String args[])
{ Date D1 ;D1=new Date() ;D1.Jour = 12 ;
utilisateur D1.Mois = 02 ;D1.Annee = 2001 ;D1.Afficher() ;System.out.println (D1.MonJour()+25) ;
}}
___________________________________________________________________DI GALLO Frdric Page 12 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
13/88
121643316.doc______________________________________________________________________________
Application: Complter la description de la classe Fraction :1. En crivant le contenu des mthodes suivantes :
public void Initialiser(int N, int D)
{ // valorise les variables dinstance de lobjet cr avec les valeurs fournies en paramtre dentre. }
public void Inverse(){ // inverse le contenu de la fraction }
public float Valeur(){ // renvoie la valeur en relle de la fraction }
public void Initialiser(int N, int D){ Numerateur = N ;
Denominateur = D ; }
public void Inverse(){ int x ;
x = Numerateur ;Numerateur = Denominateur ;Denominateur = x ; }
public float Valeur(){ return ( Numerateur / (float) Denominateur ) ; }
2. Construire un programme Java de test de la classe Fraction qui ralise les diffrentesoprations suivantes: cration de la fraction 6/5, affichage de sa valeur relle, affichage de lavaleur relle de son inverse.
class test{ Fraction F1 ; // F1 contient NULL
F1=new Fraction () ; // F1 Numerateur: 0 - Denominateur: 0F1.Initialiser (6,5) ; // F1 initialis 6 / 5System.out.println (F1.Valeur() ) ; // afficher la valeur relle de F1F1.Inverse () ;System.out.println (F1.Valeur() ) ; // on ne peut pas utiliser la mthode
} // Afficher() car elle affiche uniquement le contenu de la fraction, pas sa valeur relle.
Pour ne pas perdre le contenu de F1 avant l'inversion, il est faut modifier la classe Fraction: public Fraction Inverse(){ Fraction Res ;
Res = new Fraction () ;Res.Numerateur = Denominateur ; Res.Denominateur = Numerateur ;return Res ; }
{ Fraction F1, F2 ; // F1 et F2 contienent NULLF1=new Fraction () ; F1.Initialiser (6,5) ; // F1 initialis 6 / 5
F2 = F1.Inverse () ;System.out.println (F2.Valeur() ) ; }
___________________________________________________________________DI GALLO Frdric Page 13 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
14/88
121643316.doc______________________________________________________________________________
4.1) Mthodes publiques de type Constructeur
Un constructeur est une mthode qui porte le nom de la classe et qui est charg dinitialiserles variables de lobjet au moment de sa cration. Le langage Java dfinit chaque classe unconstructeur par dfaut qui affectera des valeurs dpendantes du type de la variable dinstancesi aucune valeur dinitialisation nest prcise dans la dclaration. Le tableau ci-dessousrcapitule, pour chaque type, les valeurs affectes par dfaut.
Type ValeurEntier 0Rel 0.0Chane de caractres Null
En respectant ce principe, lors de la cration dun objet de la classe Fraction dfinieau dbut de cette page, le constructeur Fraction() initialise les variables Numerateur
et Denominateur 0.Si on se limitait lexistence du constructeur par dfaut, toute instanciation devrait tre
suivie dune phase daffectation pour valoriser les variables dinstances de lobjet. Or plus lenombre dtapes pour atteindre un objectif est grand plus le risque doublier une tape estgrand. Par exemple si on oublie de valoriser les variables de lobjet Fraction cr, ontravaillera avec une fraction ayant un numrateur et un dnominateur = 0 ce qui peut
entranera des erreurs dexcution. Pour remdier ce problme, Java propose au concepteurde la classe de construire ses propres constructeurs. La dfinition dun nouveau constructeurdevra respecter la syntaxe suivante :
public NomClasse(Liste des paramtres formels){}
On remarque quun constructeur nest pas typ. Une fois le constructeur dfini celui-ci estappel par loprateur new comme pour le constructeur par dfaut.
Le constructeur suivant permet de crer une fraction partir de la donne dun
numrateur et dun dnominateur passs en paramtre dentre.
public Fraction (int N, int D) // Fraction tant le nom de la classe, ceci est leconstructeur{ Numerateur = N;
If (Denominateur ==0)
{ System.out.println ( le dnominateur ne peut tre gal 0 ) ;
System.exit(1) ;
}
else
Denominateur = D; // Aprs cela, le constructeur dorigine nexiste plus.
}
___________________________________________________________________DI GALLO Frdric Page 14 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
15/88
121643316.doc______________________________________________________________________________
Laffectation F=New Fraction (2,4) crera un objet Fraction avec comme numrateur la
valeur 2 et un dnominateur gal 4.
___________________________________________________________________DI GALLO Frdric Page 15 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
16/88
121643316.doc______________________________________________________________________________
Il est possible de crer pour une mme classe plusieurs constructeurs ds lors quils ont dessignatures diffrentes. Par exemple, pour la classe Fraction on pourrait dfinir le secondconstructeur suivant :
public Fraction(int N)
{ Numerateur = N ;
Denominateur = 1 ;
}
Lors de lappel dun constructeur Java recherche le constructeur qui est conforme aveclappel et excute ses instructions. Ainsi, lors de lexcution de linstruction F=New
Fraction(5), Java excutera le second constructeur, alors que linstruction F=New
Fraction(5,3) dclenchera lexcution du premier constructeur. Lorsquune classe comporteplusieurs constructeurs on dit que le constructeur est surcharg.
Application: On considre la classe Horaire :Dont la partie Donnes est fournie ci-dessous :
class Horaire{ private int heure ;
private int Minute ;
}
Ecrire le contenu du constructeur suivant :
public Horaire (int H, int M){ if ( H > 23 || H < 0 )
{ system.out.println (Lheure doit tre comprise entre 0 et 23 ) ;system.exit (1) ;
}else heure = H ;if ( M > 59 || M < 0 )
{ system.out.println (Les minutes doivent tre comprises entre 0 et 59 ) ;
system.exit (1) ;}else Minute = M ;
}
class TestHoraire{ Horaire H ;
H = new Horaire (5,55) ;}
On peut crer un constructeurpublic Horaire () (cest dire sans paramtre). F = new
Horaire () ne prendra pas en compte le constructeur par dfaut mais celui-ci.
___________________________________________________________________DI GALLO Frdric Page 16 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
17/88
121643316.doc______________________________________________________________________________
4.2) Mthodes publiques de type Accesseur
Lorsque les variables dinstances dune classe sont dclares avec le spcificateur daccs private elles ne sont pas accessibles directement depuis un programme dutilisation de laclasse. Ce dispositif permet donc de garantir la cohrence et lintgrit des donnes contenuesdans les diffrents objets de la classe. Pour permettre un utilisateur de la classe de consulterou de modifier les donnes ainsi protges, le concepteur de la classe doit dfinir desfonctions daccs publiques encore appeles accesseurs. Celles-ci peuvent tre de deux types :
- en consultation seulement : la fonction daccs renvoie la valeur de la donnemais ne permet pas de la modifier,
- en modification : la fonction modifie la valeur de la donne.
Les deux accesseurs en consultation suivants permettent dobtenir le numrateur et lednominateur dune fraction:
public int SonNumerateur ()
{ return Numerateur ;
}
public int SonDenominateur ()
{ return Denominateur ;
}
Avec de telles fonction daccs pour connatre la valeur du numrateur dun objet, on crirala rfrence : VariableObjet.SonNumerateur()
Remarque : certaines classes peuvent comporter des donnes prives pour lesquelles ilnexiste aucun accesseur. Dans ce cas il sagit de donnes dimplmentation qui sontintroduites pour faciliter lcriture de la classe mais dont lexistence ne doit pas tre connuede lutilisateur de la classe.
class Horaire{ private int heure ;
private int Minute ;public int SonHeure () H1 = new horaire (8,20) ;
accs en { return heure ; } system.out.println (H1.SonHeure ()) ;consultation public int SaMinute () system.out.println (H1.SaMinute ()) ;
{ return Minute ; }
public void Changer ()accs en { heure = 12;
modification Minute = 0 ;}
}
___________________________________________________________________DI GALLO Frdric Page 17 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
18/88
121643316.doc______________________________________________________________________________
Auto-valuation n6: On considre la classe Compte :Destine grer des comptes bancaires. Chaque objet de cette classe sera dcrit au moyen
des 3 donnes prives suivantes :Nom de la proprit Type Rle
Numero Entier Identifie un compteType Caractre Fournit le type du compte :
J compte jointC compte courant
Solde Rel Mmorise le solde du compte
1. Dfinir les variables dinstance de la classe Compte
class Compte{ private int Numero ; // Il vaut mieux dclarer les variables en
privprivate char Type ;private float Solde ;
} // Types primitifs : la variable contient la valeur et pas un pointeur.
2. On considre le programme de test de la classe Compte suivant :class TestCompte{public static void main (String args[])
{ Compte C;C = new Compte ();}
}2.1 Indiquer le contenu de la variable C:
- lissue de lexcution de la dclaration : Compte C :C contient la valeur NULL
- lissue de lexcution de linstruction dinstanciation :C pointe vers un objet de type Compte.
C
2.2 Indiquer le contenu des variables dinstance de lobjet cr :Numero : 0 / Type : NULL / Solde : 0.0
2.3 Ecrire la mthode prive TestType dfinie ci-dessous :Renvoie true si le type pass en paramtre est gal J ou C, et false sinon.
private boolean TestType (char T) // renvoie true si le type pass enparamtre
{ if ( T = = "J" || T = = "C" ) return true; // est gal J ou C, et false sinon.
else return false;}
___________________________________________________________________DI GALLO Frdric Page 18 24/12/2012
Numero
Type
Solde
7/30/2019 Programmation oriente Objet en JAVA
19/88
121643316.doc______________________________________________________________________________
3. Utiliser la notion de surcharge de constructeur pour construire un objet de la classe"Compte" des deux faons suivantes:
- les valeurs initiales Numero et Type d'un compte sont passes en paramtre; le soldeest mis 0.Par exemple, C = new Compte (123, "J") cr le compte joint de numro 123.
- les valeurs initiales Numero et Type sont saisies au clavier; le solde est mis 0. Parexemple, l'instruction C = new Compte() demande l'utilisateur de lui communiquer le
numro de compte et son type, et cr l'objet associ. On utilisera les mthodes Lire.i() et
Lire.c() pour acqurir respectivement un entier et un caractre.
Pour ces deux constructeurs, des contrles sur le numro (seules les valeurs positives sontautoriss) et sur le type, devront tre mis en place.
public Compte (int N, char T){ if (N
7/30/2019 Programmation oriente Objet en JAVA
20/88
121643316.doc______________________________________________________________________________
public void ModifType () // modifie le type d'un compte automatiquement// en appliquant la logique suivante:// si c'est un compte courant, il devient compte joint;// si c'est un compte joint, il devient compte courant.
accs en { char change; ou { if (Type = = 'C') Type = 'J';modification change = Type; else Type = 'C';
if (change = 'C') Type = 'J'; }else Type = 'C';
}
5. Pour agir sur le solde d'un compte on souhaite disposer des traitements "Debiter" et"Crediter". Ecrire les mthodes associes.
public void Crediter (float S) // crdite de la somme S, le solde d'un compte.{ Solde += S; }
public void Debiter (float S) // dbite de la somme S, le solde d'un compte.{ Solde -= S; }
6. Ecrire le programme de test de la classe Compte qui ralise les traitements suivants:
- Cration des deux comptes suivantsCompte Cl Numero: 250 Type : CCompte C2 Numero: 320 Type : J
- Affichage du numro et du solde du compte Cl- Modification du type du compte C2- Apport de 500 F sur le compte Cl- Dbit de 200 F sur le compte C2
class TestCompte{ public static void main (String args[])
{ compte C1, C2;C1 = New Compte (250, "C");C2 = New Compte (320, "J");System.out.println ("Numro du compte:" + C1.Numero ());System.out.println ("Solde du compte: " + C1.Solde () );C2.ModifType ();C1.Crediter (500);C2.Crediter (200); // on remarque que C2 est en solde ngatif.
}}
___________________________________________________________________DI GALLO Frdric Page 20 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
21/88
121643316.doc______________________________________________________________________________
7. On souhaite enrichir la classe "Compte" par la mthode binaire publique "EstSuperieur"dont la signature et l'objectif sont donns ci-dessous:
public boolean EstSuperieur (Compte C){ // renvoie true si le solde de l'objet est suprieur au solde de C et false sinon}
7.1 Ecrire la mthode EstSuprieur
public boolean EstSuperieur (Compte C){ if (C.Solde < Solde) return (true);
else return (false);}
7.2 Dans le programme de test prcdent, comparer le compte "Cl" et le
compte "C2" et faire afficher le message "Cl est suprieur C2" ou "Cl est infrieur ou gal C2" selon le rsultat du test.
{ if (C1.EstSuperieur (C2) ) System.out.println ("C1 est suprieur C2");else System.out.println ("C1 est infrieur ou gal C2");
}
4.3) Les mthodes de type binaire
A linstar des oprateurs binaires, une mthode est binaire lorsquelle sapplique sur deuxobjets dune mme classe. Par exemple, le traitement qui consiste ajouter deux fractionsdonnera lieu une mthode binaire. Lors de la conception dune telle mthode, les deuxobjets sur lesquels elle travaillera nauront pas le mme rle. Lun sera lobjet sur lequel seraappliqu la mthode, et lautre sera fourni en argument de la mthode. Lexemple ci-dessous
prsente la mthode binaire Multiplier de la classe Fraction et son utilisation dans un
programme de test.
class Fraction
{ private int Numerateur ;private int Denominateur ;
public Fraction Multiplier (Fraction F){ Fraction Res;
Res = new Fraction(F.Numerateur*Numerateur,F.Denominateur*Denominateur);
return Res ;}
Remarque : dans la mthode dune classe, on peut rfrencer les proprits prives dun
autre objet de cette classe. Les rfrences F.Numerateur et F.Denominateur sont donc
autoriss dans lcriture de la mthode Ajouter .
___________________________________________________________________DI GALLO Frdric Page 21 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
22/88
121643316.doc______________________________________________________________________________
class Test{ public static void main (String args[])
{Fraction F1, F2 ;F1 = new Fraction (4,5) ;F2 = new Fraction (6,8) ;F3 = F1.Multiplier (F2) ;
}}
Application: On considre la classe "PuissanceDe10" :Destine raliser les oprations suivantes sur les puissances de 10 :
- Initialiser une puissance partir de la donne de lexposant,- Afficher une puissance de 10 sous la forme 10^Exposant
- Multiplier deux puissances de 10 (on rappelle que 104 x 105 donne 109- Fournir la valeur associe une puissance de 10 (rappel 100 = 1 et 10-2 = 0.01 (rel)
class PuissanceDe10{ private int Exposant;
public PuissanceDe10 (int E) // on ne met pas de type pour le constructeur.{ Exposant = E ; }
public void Afficher (){ System.out.println ("10 " + Exposant) ; }
public void Multiplier (PuissanceDe10 P){ Exposant += P.Exposant ; }
public PuissanceDe10 MultiplierBis (PuissanceDe10 P){ PuissanceDe10 Result;
Result = New PuissanceDe10 (P.Exposant + Exposant);Return (Result) ; }
public PuissanceDe10 MultiplierTer (PuissanceDe10 P){ Exposant += P.Exposant ;
return this ; // this retourne l'objet lui-mme.}
public void MultiplierQua (PuissanceDe10 P){ P.Exposant += Exposant ; } // ici c'est P2 qui va tre modifi.
public float Valeur (){ int P = 1, i ;
for (i = 1; i
7/30/2019 Programmation oriente Objet en JAVA
23/88
121643316.doc______________________________________________________________________________
___________________________________________________________________DI GALLO Frdric Page 23 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
24/88
121643316.doc______________________________________________________________________________
Auto-valuation n7: On considre la classe Capacit :Destine grer des capacits exprimes en octets. Son implantation est fournie ci-dessous:
class Capacite{ private float Valeur;private char Unite;public Capacite (float V, char U){ if (U != 'O' && U != 'K' && U !=' M')
{ System.out.println (" capacit incorrecte");System.exit(1);
}else{ Valeur = V; Unite = U; }
}
private long ValeurEnOctets (){ long L = (long) Valeur;
if (Unite = = 'K') L = (long) Valeur* 1024;else if(Unite = = 'M') L = (long) Valeur * 1024*1024;return L;
}
public void Ajouter (Capacite C){ Valeur = this.ValeurEnOctets () + C.ValeurEnOctets ();
Unite = 'O';}
public void Afficher (){ System.out.println (Valeur +" "+ Unite); }
}
1. Fournir les rsultats affichs l'cran l'issue de l'excution du programme suivant:class TestCapacite (){ public static void main (String args[])
{ Capacite C1,C2;C1= new Capacite (10,'O');C2 = new Capacite (1,'K');Cl.Ajouter (C2);Cl.Afficher ();C2.Afficher();
}
2. Modifier la mthode Ajouter afin de consigner le rsultat de l'addition non plusdans l'objet sur lequel elle est applique, mais dans l'objet pass en paramtre.
___________________________________________________________________DI GALLO Frdric Page 24 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
25/88
121643316.doc______________________________________________________________________________
3. On dcide de surcharger le constructeur avec la mthode suivante:public Capacite (float V){ if ( V >= 1024*1024){ V = V / (1024*1024);
Unite = 'M';}
else if (V >=1024){ V = V / 1024;
Unite = 'K';}
else Unite = 'O';Valeur = V;}
Fournir le contenu des variables et de l'objet cr l'issue de l'excution du programme
suivant (la valeur 2048 est saisie au clavier):class TestCapacite 1{ public static void main (String args[]){ Capacite C;
float D;D = Lire.f();C = new Capacite (D);
}}
___________________________________________________________________DI GALLO Frdric Page 25 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
26/88
121643316.doc______________________________________________________________________________
4.4) La transmission de paramtres
En Java, la transmission des paramtres se fait toujours par valeur. Cela signifie que lors delappel dune fonction qui admet des paramtres dentre on devra communiquer pour chacunde ces paramtres une valeur. Celle-ci pourra tre soit le contenu dune variable, soit unlittral. En fait, on peut assimiler les paramtres formels des variables locales qui reoiventles valeurs des paramtres effectifs lors dun appel. Le schma suivant illustre ce principe surle constructeur de la classe Fraction :
Programme dutilisation
x=4
F = new Fraction(x,5) x 5
N DFonction Fraction (int N, intD){ Numerateur =N ;
Denominateur = D ;
} instructions de la mthode
De ce principe dcoule le fait que toute modification dun paramtre formel (de typeprimitif), ralise lintrieur dune mthode, naura aucun effet sur une variable passe enparamtre effectif. Cela signifie que si dans le constructeur de la classe Fraction , unemodification dun paramtre dentre a t ralise par erreur, la variable fournie en
paramtre effectif ne sera pas modifie.
Fonction Fraction (int N, intD)
{ Numerateur =N ;
N=N+1 ;
Denominateur = D ;
}
x = 4 ;
F = new Fraction(x,5) ;
Aprs excution du constructeur, x contient toujours la valeur 4.
Dans le cas o le paramtre formel est un objet, cest la rfrence lobjet qui est passeen paramtre effectif. Dans ce cas, toute modification ralise sur lobjet via sa rfrence seraeffectivement ralise sur lobjet pass en paramtre. Le schma ci-dessous illustre ce
principe :
Considrons, pour la classe Fraction , la mthode Diviser ci-dessous :
public Fraction Diviser (Fraction F)
{ F.Inverse() ; // on inverse l'objet (division de fraction = multiplication par l'inverse)
return this.Multiplier (F) ; // le mot cl this dsigne lobjet lui-mme
}
___________________________________________________________________DI GALLO Frdric Page 26 24/12/2012
4
4 5
7/30/2019 Programmation oriente Objet en JAVA
27/88
121643316.doc______________________________________________________________________________
et les deux objets F1 et F2 de la classe Fraction suivants :
Numerateur NumerateurF1 F2
Denominateur Denominateur
Lappel de la mthode F1.Diviser(F2) (par exemple F3= F1.Diviser(F2)) va provoquer :- laffectation dans la variable locale associe au paramtre F de la valeur 6544.- lexcution des instructions de cette mthode avec cette valeur ce qui aura pour
consquence de modifier le numrateur et le dnominateur de lobjet point par F2.
Inversion du numrateur etF du dnominateur
F.Inverse ()Return This.Multiplier (F);
On remarque que F2 nest pas modifi mais cest lobjet point qui est modifi.
4.5) Le mot cl this
Le mot cl this dans une mthode publique est une rfrence sur lobjet sur lequel estappliqu la mthode. Cette rfrence est en gnral implicite. Par exemple pour dfinirlaccesseur en consultation charg de retourner le numrateur on aurait pu crire :
public int SonNumerateur()
{ return this.Numerateur
}
Ce mot cl peut par exemple tre utilis lorsquil y ambigut entre le nom dun paramtre etle nom dune variable dinstance. Le constructeur associ la classe Fraction illustre ce cas:
public Fraction (int Numerateur, int Denominateur){ this.Numerateur = Numerateur ;
this.Denominateur = Denominateur ;
}
La mthode Diviser prsente dans le paragraphe prcdent prsente un autre intrt dumot cl this .
___________________________________________________________________DI GALLO Frdric Page 27 24/12/2012
45674
8
65444
8
6544
7/30/2019 Programmation oriente Objet en JAVA
28/88
121643316.doc______________________________________________________________________________
V. Les variables et mthodes de classe
On suppose que lon ait construire une classe permettant deffectuer des oprations sur des
puissances ayant la mme base. On rappelle que dans lexpression an
, a est appele base et nest appel exposant. La solution qui consiste dfinir pour la classe Puissance , deuxvariables dinstance reprsentant respectivement la base et lexposant nest pas satisfaisantecar aucun dispositif ne pourra tre mis en place pour garantir que tous les objets de cetteclasse auront la mme base. On pourra donc avoir la situation suivante qui empche laralisation de toute opration.
Base BaseP1 P2
Exposant Exposant
Pour pallier ce problme, on doit introduire une variable commune tous les objets de laclasse et qui mmorisera la base avec laquelle on souhaite travailler. Cette variable, appelevariable de classe, existe avant mme quun objet soit instanci. Elle est dclare au moyen dumodificateur static , et peut tre prive ou publique. Avec le statut Private , elle pourratre rfrence uniquement par les mthodes de la classe dans laquelle elle est dfinie, alorsquavec le statut Public , elle pourra tre rfrence depuis une autre classe. Le dbut de laclasse Puissance pourrait scrire ainsi :
class Puissance{ private static int base = 2 ;
private int exposant ;}
Compte tenu de linitialisation de la variable base , les objets de la classe Puissance reprsenteront des puissance de 2.
P1 P2Exposant Exposant
Base
Pour permettre lutilisateur de modifier la variable base , on doit dfinir la mthode declasse publique ChoisirBase de la manire suivante :
class Puissance{ private static int base = 2 ;private int exposant ;public static void ChoisirBase () // on suppose que la fonction Lire.i(){ base = Lire.i() ; } // permet dacqurir au clavier un entier
(int).
}
___________________________________________________________________DI GALLO Frdric Page 28 24/12/2012
45672
3
65444
2
4567 3 6544
2
2
7/30/2019 Programmation oriente Objet en JAVA
29/88
121643316.doc______________________________________________________________________________
Celle-ci pourra tre appele, sans quaucun objet existe, en utilisant la rfrence:Puissance.ChoisirBase. Il est important de remarquer que lexcution dune mthode de classe
pouvant tre ralise avant toute instanciation dobjet, il nest pas sens de rfrencer dansune mthode de classe une variable dinstance. Par exemple, le programme suivant naurait
pas de sens :class Puissance{ private static int base = 2 ;private int exposant ;public static void ChoisirBase(){ base = Lire.i() ; // exposant est une variable dinstance
dontexposant = Lire.i() ; } // lexistence est lier lexistence dun objet.
}
Par contre, il est possible de rfrencer dans une mthode dinstance, une variable declasse, comme lillustre le programme suivant :class Puissance{ private static int base = 2 ;private int exposant ;public static void ChoisirBase(){ base = Lire.i() ; }
exposant = Lire.i() ; }public void Afficher (){ System.out.println (base + ^ + exposant) ; }
}
VI. Travaux Pratiques
6.1) Utilisation de la classe String
Le langage Java admet les trois catgories suivantes de types primitifs : numrique : byte, short, int, long, float et double caractre : char boolen : boolean
Tous ces types primitifs permettent de manipuler directement des valeurs. Ainsi pourmmoriser un caractre, il suffira de laffecter dans une variable de type caractre. Toutes lesdonnes qui ne sont pas dun type primitif devront tre mmorises sous forme dobjets.Cest, par exemple, le cas des chanes de caractres pour lesquelles Java propose les deuxclasses suivantes :
String dont les objets sont des chanes de caractres de longueur fixe,
StringBuffer dont les objets sont des chanes dont la longueur peut tremodifie.
___________________________________________________________________DI GALLO Frdric Page 29 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
30/88
121643316.doc______________________________________________________________________________
___________________________________________________________________DI GALLO Frdric Page 30 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
31/88
121643316.doc______________________________________________________________________________
A partir de la liste des mthodes donne ci-dessous, et se rapportant la classe String ,crire le programme Java qui ralise les oprations suivantes :
dclare les variables Fichier et Extension destines pointer sur desobjets de la classe String .
instancie un objet de la classe String avec la valeur Test.xls .Le constructeur admet linterface suivante : public String (Chane).Lobjet ainsi cr devra tre point par la variable Fichier .
extrait, dans lobjet point par la variable Extension ,lextension contenue dans lobjet point par la variable Fichier .
affiche par linstruction System.out.println (lextension est : + Extension),lextension ainsi rcupre.
Remarque : le nombre de caractres de lextension est suppos quelconque
public class ManipChaine
{ public static void main (String args[]){ int Longueur, Point ;
String Fichier, Extension ;Fichier = New String ('Test.xls') ;Point = Fichier.indexOf ('.') ;Longueur = Fichier.length () ;Extension = Fichier.Substring (Point + 1, Longueur -1) ;System.out.println ("L'extension est : " + Extension) ;
}}
Annexe : mthodes de la classe String
int indexOf(Caractre) Localise le caractre fourni en paramtre dans lobjet et renvoiesa position. Le premier caractre a la position 0. La valeur -1 estrenvoye si le caractre ne se trouve pas dans lobjet chane.
String substring(Deb, Fin) Extrait, dans lobjet chane, une sous-chane de la position "Deb" la position "Fin".
int length() Renvoie le nombre de caractres de lobjet chane
Exemple:String ch, ch1; chch = New String ('Bonjour') ;System.out.println (ch.indexOf ('B') ) ; // affiche 0.ch1 = ch.Substring (2,4) ; ch1System.out.println (ch.length () ); // affiche 7.
___________________________________________________________________DI GALLO Frdric Page 31 24/12/2012
0 1 2 3 4 5 6
BONJOUR
2 3 4
NJO
7/30/2019 Programmation oriente Objet en JAVA
32/88
121643316.doc______________________________________________________________________________
6.2) Cration dune classe
Le programme de test suivant manipule des dures exprimes en heures et minutes.
Analyser les diffrentes mthodes rfrences et le rsultat de leur excution afin deproposer une dfinition de la classe Dure cohrente avec son utilisation.public class TestDure{ public static void main (String [] arg)
{ Dure D1,D2 ;D1=new Dure (1,30) ;D1.Afficher ;D2 = new Dure (2,30) ;D1.Ajouter (D2) ;
D1.Afficher ;System.out.println ("Valeur de la dure en minutes: "
+ D1.TotMinutes) ;}
}
Rsultat affich lcran:
1 :30
4 :0Valeur de la dure en minutes : 240
___________________________________________________________________DI GALLO Frdric Page 32 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
33/88
121643316.doc______________________________________________________________________________
VII. Annexe : les tapes de dveloppement en Java
Tout programme crit en langage volu doit tre compil afin dtre excut par
lordinateur. Cette opration consiste plus prcisment traduire chaque instruction duprogramme en une suite dlments binaires que lordinateur saura interprter et excuter.Par exemple lissue de la compilation dun programme crit en TURBOC C, on dispose
dun fichier excutable portant lextension .exe que lon peut lancer partir de
lenvironnement DOS par la commande : NomFichier. Il est important de savoir que le codebinaire est spcifique chaque machine ; cela signifie que le fichier issu dune compilationexcute sur une machine de type PC nest pas reconnu sur une station UNIX.
Pour remdier ce problme et rendre le langage Java indpendant de lordinateur, leconcepteur du langage Java (J. Gosling) a introduit une tape intermdiaire dans lacompilation. Le principe consiste traduire le programme crit en java en un pseudo-code(appel bytecode) indpendant de toute machine. Ce pseudo-code sera alors interprt et
excut par un programme spcifique chaque machine. Lensemble des interprteursconstitue la JVM : Java Virtual Machine.
Ce principe est illustr par le schma suivant extrait de louvrage Le livre de Javapremier langage de Anne Tasso (ditions Eyrolles):
Lavantage dun tel systme est que le dveloppeur est certain de crer un programmetotalement compatible avec les diffrents ordinateurs du march. Compte tenu du principe
prcdemment expos, la boite outils minimale pour raliser des dveloppements Java doitcomporter les deux logiciels suivants :
Le compilateur charg de traduire le programme crit en Java en pseudo-code:javac Fichier.java o le fichier ayant lextension java contient la description duneou plusieurs classes. Le rsultat est un fichier portant lextension class . Linterprteur, propre chaque machine, et destin interprter et excuter le
pseudo-code : java Fichier. Lors de lexcution de ce fichier, linterprteur Javadclenche lexcution de la mthode publique main() qui est le point dentre delapplication. Si dans cette mthode main() , dautres classes sont rfrences, il doit
disposer de leur dfinition pour russir lexcution
Ces deux outils sont disponibles dans le kit de dveloppement Java (JDK : JavaDevelopment Kit ou SDK Standard Development Kit) tlchargeables depuis le site Internetde Sun. Il existe des logiciels tels que Kawa ou J buider qui offrent, sous forme dinterfacegraphique conviviale, un ensemble doutils de dveloppement. Il est important de savoir queces derniers sont particulirement gourmands en ressources machines.
___________________________________________________________________DI GALLO Frdric Page 33 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
34/88
121643316.doc______________________________________________________________________________
PROGRAMMATIONPROGRAMMATION
ORIENTEEORIENTEEOBJETSOBJETS ::
Les CollectionsLes Collections
JAVAJAVA
___________________________________________________________________DI GALLO Frdric Page 34 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
35/88
121643316.doc______________________________________________________________________________
PROGRAMMATION JAVA: GNRALITS.....5
I. PROGRAMMATION
CLASSIQUE
ET
ORIENTE
OBJETS
..........................................................................5II. CLASSEETOBJET.....................................................................................................................6III. LESDONNESDUNECLASSE....................................................................................................8IV. LESMTHODESDUNECLASSE................................................................................................11
4.1) Mthodes publiques de type Constructeur ...........................................................14
4.2) Mthodes publiques de type Accesseur ...............................................................17
4.3) Les mthodes de type binaire.....................................................................................21
4.4) La transmission de paramtres.................................................................................26
4.5) Le mot cl this ......................................................................................................27
V. LESVARIABLESETMTHODESDECLASSE..................................................................................28VI. TRAVAUX PRATIQUES...........................................................................................................29
6.1) Utilisation de la classe String....................................................................................296.2) Cration dune classe................................................................................................32
VII. ANNEXE : LESTAPESDEDVELOPPEMENTEN JAVA.................................................................33
LES COLLECTIONS EN JAVA...........................37I. INTRODUCTION..............................................................................................................37II. LES TABLEAUX.............................................................................................................39III. LES VECTEURS............................................................................................................42
3.1) La classe gnrique Object .................................................................................42
3.2) Les mthodes de la classe Vector ........................................................................45
3.3) La classe Enumeration ........................................................................................473.4) Les packages..............................................................................................................48
IV. LESDICTIONNAIRES..............................................................................................................49V. LESFLUX.............................................................................................................................51
5.1) Oprations sur un fichier...........................................................................................51
5.2) La gestion des erreurs...............................................................................................53
L'HERITAGE EN JAVA........................................63I. INTRODUCTION..............................................................................................................63II. DFINITIONDEL'HRITAGE......................................................................................................65
2.1) Le constructeur d'une classe drive.........................................................................66
2.2) Les proprits d'une classe drive...........................................................................67
2.3) Les mthodes d'une classe drive............................................................................68
III. MANIPULATIONSD'OBJETSISSUSDECLASSEMREETFILLE.........................................................69
EXEMPLES DE CLASSES JAVA.........................78I. PUISSANCEDE10....................................................................................................................78II. CAPACITE.............................................................................................................................79III. PUISSANCE..........................................................................................................................80
IV. INVENTAIRE.........................................................................................................................80V. CONNEXION & LISTECONNEXION............................................................................................81
___________________________________________________________________DI GALLO Frdric Page 35 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
36/88
121643316.doc______________________________________________________________________________
VI. PRODUIT & PRODUITACHET................................................................................................83VII. COMPTE & COMPTEEPARGNE..............................................................................................84VIII. FACTURE & LISTEFACTURES..............................................................................................86IX. CLIENT & CLIENTPRO.........................................................................................................88
___________________________________________________________________DI GALLO Frdric Page 36 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
37/88
121643316.doc______________________________________________________________________________
INFORMATIQUE CNAM ANGOULEME 2000-2001INFORMATIQUE CNAM ANGOULEME 2000-2001
LES COLLECTIONS EN JAVALES COLLECTIONS EN JAVA
I. INTRODUCTION
Le chapitre prcdent a montr que laccs un objet dune classe, ncessite lexistencedune variable pointeur, dclare en dbut de traitement de la manire suivante :
NomClasse NomVariablePointeur ;
Dans le schma qui suit, la variable P permet daccder au produit de rfrence 34 et ainsi de lui appliquer diffrentes mthodes par la rfrence P.NomMthode.
Avec un tel principe laccs n instances dune classe, implique la dclaration de n
variables pointeurs de cette mme classe ce qui va entraner :- dune part limpossibilit dutiliser des structures itratives pour manipuler ces
objets du fait des noms de variables diffrents,- dautre part le risque dun nombre insuffisant de variables pour des problmes dont
on ne connat pas priori le nombre dinstances cres.
Application: On considre la classe Produit dfinie partiellement ci-dessous :class Produit{ private int Reference ;private String Designation ;private int Stock ;private int StockAlerte ;
public Produit () ; // demande toutes les caractristiques dun produit et cr lobjet associ{ System.out.print ("Rfrence du produit: ");Reference = Lire.i();System.out.print ("Dsignation du produit: ");Designation = Lire.S();System.out.print ("Stock: ");Stock = Lire.i();
System.out.print ("Stock alerte: ");StockAlerte = Lire.i(); }
___________________________________________________________________DI GALLO Frdric Page 37 24/12/2012
Rfrence34Dsi nation
Stock55StockAlerte15
P
Disquette
7/30/2019 Programmation oriente Objet en JAVA
38/88
121643316.doc______________________________________________________________________________
public boolean ACommander (){ // Renvoie true si le stock est infrieur au stock alerte et false sinonreturn (Stock < StocIcAlerte);
}public int SaRfrence (){ // Renvoie la rfrence du produitreturn this.Reference;
}public int SonStock (){ // Renvoie le stock du produitreturn this.Stock;
}
On suppose que les variables P1 , P2 et P3 pointent sur 3 instances de la classe Produit . Ecrire les instructions qui affichent, parmi ces trois produits, la rfrence de ceuxqui sont commander.
class TestProduit () ;{ public void static main (String args[]){ Produit P1, P2, P3;
P1 = new Produit();P2 = new Produit();P3 = new Produit();
if (P1.Acommander()) System.out.print (P1.SaRfrence());if (P2.Acommander()) System.out.print (P2.SaRfrence());if (P3.Acommander()) System.out.print (P3.SaRfrence());
}}
Pour faciliter la manipulation de plusieurs objets dune mme classe, le langage Javapropose diffrents concepts dont les caractristiques de stockage sont rcapitules ci-dessous :
Nom concept Type du stockage Nombre dobjets collectionnsTableau Volatile FixeVecteur Volatile IndterminDictionnaire (ou table de hachage) Volatile IndterminFlux (fichiers "normaux") Permanent Indtermin
___________________________________________________________________DI GALLO Frdric Page 38 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
39/88
121643316.doc______________________________________________________________________________
II. LES TABLEAUX
Pour crer un tableau destin mmoriser N pointeurs sur des objets dune classe il faut
procder aux deux tapes suivantes :- dclarer une variable qui sera destine pointer sur le tableau par la syntaxe suivante :
NomClasse [] NomVariable- crire linstruction charge de crer lobjet tableau par la syntaxe :
NomVariable = new NomClasse[N]
A lissue de cette dclaration, la variable spcifie dans le membre gauche de laffectationpointe sur un objet contenant N cases , destines chacune recevoir ladresse dun objet dela classe. Par exemple, pour crer un tableau pointant sur 5 produits on devra crire lesinstructions suivantes :
Produit[] ListeProduits ;
ListeProduits = new Produit[5] ;
Le contenu des variables aprs lexcution de ces instructions pourrait tre reprsent ainsi :
ListeProduits[i] rfrence l'adresse
Il est important de savoir que la taille dun tableau, dfinie lors de lexcution parloprateur new , ne peut plus tre modifie ultrieurement. Il est, par contre, possibledacqurir, lors de lexcution, la taille du tableau souhait et de communiquer cette valeur loprateur new comme lillustre lexemple suivant :
int N ;
Produit[] ListeProduits ;
System.out.println ( Nombre maximal de produits ? ) ;
N=Lire.i() ;
ListeProduits = new Produit[N] ;
Les oprations que lon peut mettre en uvre sur un tableau se rpartissent en 2 catgories :- la premire catgorie regroupe les traitements qui agissent sur le tableau dans sonintgralit.Par exemple linstruction ListeProduits.length renvoie le nombre de casesdu tableau. length est en fait une proprit publique de lobjet ListeProduits .- la seconde catgorie concerne les traitement qui agissent sur chaque composantdun tableau. Pour la programmation de ces traitements, il faut savoir que laccs auime lment du tableau est ralis par la rfrence : NomVariableTableau[i] (le
premier lment porte le numro 0).
Remarquons enfin que les tableaux permettent de mmoriser non seulement des adressesdobjets mais aussi des valeurs de type primitif.
___________________________________________________________________DI GALLO Frdric Page 39 24/12/2012
0 1 2 3 4null null null null null
objet
Produit
objet
Produit
ListeProduits
7/30/2019 Programmation oriente Objet en JAVA
40/88
121643316.doc______________________________________________________________________________
Application 1: On considre que le tableau ListeProduits est valoris :et pointe sur 5 objets de la classe Produits . Rcrire le traitement qui consiste afficher la
rfrence des produits commander.class TestProduit () ;{ public void static main (String args[]){ Produit [ ] ListeProduits;
int i = 0;ListeProduits = new Produit [5];
// Chargement du tableaufor (i = 0; i 4, i ++)
{ if (ListeProduits[i].Acommander())System.out.println(ListeProduits[i].SaRfrence());
}
// ou proprit publique// for (i = 0; i ListeProduits.length - 1; i ++)// { if
(ListeProduits[i].Acommander()) mthode// System.out.println(ListeProduits[i].SaRfrence());// }}
Application 2: On souhaite construire la classe Inventaire :destine grer lensemble des produits proposs par une entreprise. La description du dbut
de cette classe a la forme suivante :class Inventaire{ private Produit [] ListeProduits ;private int NbProduits = 0;public Inventaire(){ ListeProduits = new Produit[100] ; }
}a) Ecrire les trois mthodes suivantes :
AjouterUnProduit () qui doit provoquer la cration dun objet de la classe Produit en demandant lutilisateur les diffrentes caractristiques du produit. RechercherUnProduit (int RefProduit) qui renvoie le produit dont la rfrence est
spcifie en paramtre dentre. La valeur "null" est renvoye si le produit nexiste pas. AfficherProduitsACommander() qui affiche la rfrence de tous les produits dont lestock est infrieur au stock alerte.
class Inventaire{ private Produit [] ListeProduits;private int NbProduits = 0;
public Inventaire(){ ListeProduits = new Produit [100]; }
public void AjouterunProduit(){ ListeProduits[NbProduits] = new Produit;NbProduits ++;
___________________________________________________________________DI GALLO Frdric Page 40 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
41/88
121643316.doc______________________________________________________________________________
}public Produit RechercherUnProduit (int RefProduit){ int i=0;
Produit tmp=null;boolean Trouve = false;while (! Trouve && i
7/30/2019 Programmation oriente Objet en JAVA
42/88
121643316.doc______________________________________________________________________________
}
III. LES VECTEURS
Les vecteurs ont t introduits afin de remdier limpossibilit de redimensionner untableau une fois que celui-ci a t cr par loprateur new . Ainsi, les objets de la classe Inventaire prsente prcdemment, sont limits la mmorisation de 100 produits. Laclasse Vector est prdfinie (comme la classe String), et permet de grer (en mmoirecentrale) un nombre indtermin dobjets, qui appartiennent la classe gnrique Object .
Par exemple, le programme suivant cre un vecteur qui sera destin pointer sur un
ensemble dobjets de la classe Object . Seul le nom attribu ce vecteur laisse penser que
ce sont des objets de la classe Produit qui seront mmoriss dans cette structure. Audpart, aucune case nest affecte au vecteur et cest au fur et mesure des ajouts que levecteur va sagrandir. Les vecteurs ne sont pas typs, au dpart, on ne sait donc pas de quelsobjets il s'agit. En fait, on utilise une classe "gnrique".
Vector ListeProduits ;
ListeProduits = new Vector() ;
3.1) La classe gnrique Object
ou une premire approche de lhritage
Tout objet issu dune classe est un objet de la classe Object et ce titre, hrite desmthodes publiques de cette classe. Cette relation est un peut tre schmatise ainsi etmontre que les objets des classes Fraction ,. Produit ou dune classe quelconque C sont des objets de la classe Object . On dit que les classes Produit , Fraction et C sont des sous-classes de Object ou encore des classes drives de la classe Object . La
classe Object est une super-classe, ou c'est la classe de toutes les classes, ou encore uneclasse de base.
Super classeou classe de base
equalsest un
sous classeou classe drive
equals
Exemple:
___________________________________________________________________DI GALLO Frdric Page 42 24/12/2012
Object
Produit Fraction
objet de laclasse Object
ListeProduits
Classe C
Compte
Compte pargne Compte chque
7/30/2019 Programmation oriente Objet en JAVA
43/88
121643316.doc______________________________________________________________________________
___________________________________________________________________DI GALLO Frdric Page 43 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
44/88
121643316.doc______________________________________________________________________________
Compte tenu de cette hirarchie sur un produit de la classe Produit on peut appliquerles mthodes de la classe Produit mais aussi les mthodes de la classe Object . Parexemple la mthode clone() de la classe Object qui permet de crer le clone dun objet
peut tre appliqu aussi bien un objet de la classe Produit qu un objet de la classe
Fraction .
Fraction F1,F2 ;
Produit P1, P2 ;
P1 = new Produit() ;
P2 = P1.clone() ; // Deux fractions identiques et non pas une seule fraction
F1 = new Fraction(4,5) ;
F2 = F1.clone() ; // car Fraction "hrite" la mthode clone() de Object.
Il est possible de redfinir dans une sous-classe une mthode de la classe gnrique. Dansce cas, on dit que la mthode est polymorpohe cest--dire a plusieurs formes. A chaque appeldune telle mthode, la forme excuter est choisie en fonction de lobjet associ lappel.
Considrons par exemple la mthode equals de la classe Object . Cette mthodepermet de comparer les adresses de deux objets et renvoie true si ces adresses sont gales et
false sinon. Ainsi dans lexemple qui suit P1.equals(P2) renvoie false car P1 et P2
contiennent des adresses diffrentes.
On peut redfinir la mthode equals au niveau de la classe Produit afin de
renvoyer true si deux objets distincts contiennent les mmes valeurs. A lissue de cette
conception, la mthode equals a deux formes et le programme suivant montre la
puissance du polymorphisme :
Produit P1,P2 ;
Fraction F1,F2 ;
if (P1.equals(P2)) // cest la mthode equals de la classe Produit qui est excute
System.out.println (P1 et P2 sont deux objets diffrents mais contiennent les mmes valeurs ) ;
if (F1.equals(F2)) // cest la mthode equals de la classe Object qui est excute
System.out.println ( F1 et F2 dsignent le mme objet ) ;
___________________________________________________________________DI GALLO Frdric Page 44 24/12/2012
Rfrence34Dsi nation
Stock55StockAlerte15
P1
Disquette
Rfrence34Dsi nation
Stock55StockAlerte15
P2
Disquette
7/30/2019 Programmation oriente Objet en JAVA
45/88
121643316.doc______________________________________________________________________________
Cette hirarchie entre classes induit aussi la ncessit deffectuer des transtypages lorsdaffectation entre les variables de ces diffrentes classes. Le programme ci-dessous prsentece principe pour les classes Object et Produit ainsi que le mcanisme du
polymorphisme issu du transtypage.
Object O1, O2 ;
Produit P1, P2 ;
.
O1 = P1; // un produit est un objet donc laffectation est possible et le transtypage est implicite
O2 = P2 ;
P1 = (Produit) O1 ; // un objet nest pas forcment un produit donc il faut spcifier explicitement uncast //pour effectuer le transtypage ; si le cast nest pas spcifi, le compilateur
refusera //laffectation car un objet nest pas forcement un produit. A lexcution, il
peut y //avoir une erreur si la variable O1 nest pas un objet de la classe Produit.
if (O1.equals(O2)) //cest la mthode equals de la classe Produit qui est excute car lesobjets // O1 et O2 appartiennent la classe Produit
Mme si la notion de polymorphisme sera reprise et dtaille dans le chapitre suivant, ilest important de retenir dores et dj les lments suivants (extraits de louvrage "Java, lasynthse") :
- le polymorphisme est la capacit pour une mme mthode de correspondre plusieurs formes de traitement, selon les objets auxquels la mthode est applique,- une telle facilit, qui permet le choix dynamique entre plusieurs formes detraitement suppose que le choix de la mthode soit fait au moment de lexcution.Dans linstruction prcdente (if O1.equals(O2)), le choix de la forme de mthode equals ne peut pas se faire la compilation car on ne sait pas sur quel type dobjetles variables O1 et O2 pointent.
3.2) Les mthodes de la classe Vector
Rappelons que chaque composant dun vecteur est un pointeur sur un objet de la classe Object . Compte tenu de ce qui vient dtre dit, ce pointeur peut adresser nimporte quelobjet dune classe car Object est la super-classe de toutes les classes. Le schma suivantillustre ce principe bas sur un transtypage implicite.
___________________________________________________________________DI GALLO Frdric Page 45 24/12/2012
objet de laclasse Object
ListeProduitsProduit
Rfrence34Dsi nation
Stock55StockAlerte15
7/30/2019 Programmation oriente Objet en JAVA
46/88
121643316.doc______________________________________________________________________________
Quelques unes des mthodes de la classe "Vector" sont prsentes et commentes ci-dessous:
Nom de la mthode Rleadd(objet) Ajoute un lment objet en fin de listeadd(indice, objet) Ajoute un objet dans la liste lindice spcifi en paramtreelementAt(indice) Retourne lobjet stock lindice spcifi en paramtre. Le premier
lment porte le numro 0.clear() Supprime tous les lments de la listeIndexOf (Objet) Retourne lindice dans la liste du premier objet donn en paramtre
ou 1 dans la listeremove(indice) Supprime lobjet dont lindice est spcifi en paramtresetElementAt(Objet,i) Remplace llment situ en position i par lobjet spcifi en
paramtresize() Retourne le nombre dlments placs dans la liste
Ainsi, pour ajouter un produit dans le vecteur ListeProduits , il suffira dcrire
linstruction : ListeProduits.add(new Produit()) . Lappel de cette mthode induit untranstypage automatique entre une variable de classe Object et une variable de la classe
Produit . Un transtypage explicite devra tre par contre mis en place pour rcuprer dans
la variable pointeur P de la classe Produit , llment n i du vecteur ListeProduits.
P=(Produit) ListeProduits.elementAt(i)
Il faut souligner que la classe Vector ne permet pas de mmoriser des valeurs de typeprimitif. Pour remdier ce problme, le langage Java a dfini une classe pour chacun destypes primitifs.Par exemple la classe Int est associ au type int ( le nom de la classeest obtenu en crivant avec la premire lettre majuscule, le nom du type primitif). Chacune deces classes possde un constructeur qui instancie un objet partir du type primitif. Les
instructions suivantes crent un objet de la classe Int qui pourra ainsi tre mmoris par unvecteur.
int i = 4 ;Int ObjetEntier ;ObjetEntier = new Int(i) ;
Application: On suppose que lon modifie la classe Inventaire :de la manire suivante (la partie donnes ainsi que le constructeur) :
class Inventaire{ private Vector ListeProduits ;
public Inventaire()ListeProduits = new Vector() ;}
Rcrire les mthodes AjouterUnProduit, RechercherUnProduit, AfficherProduitsACommander
import java.util.Vector;class Inventaire{ Vector ListeProduits;public Inventaire()
{ ListeProduits = new Vector(); }
public void AjouterunProduit(){ ListeProduits.add (new Produit()); }
___________________________________________________________________DI GALLO Frdric Page 46 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
47/88
121643316.doc______________________________________________________________________________
public Produit RechercherUnProduit (int RefProduit){ int i=0;
Produit tmp=null;boolean Trouve = false;while (! Trouve && i
7/30/2019 Programmation oriente Objet en JAVA
48/88
121643316.doc______________________________________________________________________________
Les mthodes de cette classe repose sur lexistence dun curseur qui pointe tout momentsur un composant particulier de lnumration. La mthode nextElement renvoie lobjet
point par le curseur et dplace le curseur sur le composant suivant. La mthode hasMoreElement renvoie la valeur true si le curseur pointe sur un lment et false si la fin de lnumration est atteinte.
Cest en appliquant la mthode elements() sur un objet de la classe Vector que lonpeut obtenir un objet de la classe numration et donc utiliser ses facilits de parcours.Lexemple suivant illustre lemploi des mthodes de la classe Enumeration pour afficher
toutes les rfrences des produits contenus dans le vecteur ListeProduits .
Enumeration E ;
E=ListeProduits.elements()
while (E.hasMoreElements())
System.out. println (((Produit) E.nextElement()).SaReference())Produit
Application: Rcrire la mthode RechercherUnProduit() :de la classe inventaire en utilisant linterface Enumeration .
public Produit RechercherUnProduitBis (int RefProduit){ Produit tmp=null;boolean Trouve = false;Enumeration E;E = Listeproduits.elements();
while (! Trouve && E.hasMoreElements()){ tmp = (Produit) E.nextElement();
if (RefProduit = = tmp.SaReference()){ Trouve = true; }
}return tmp;
}
3.4) Les packagesPour pouvoir rfrencer la classe Vector dans un programme, il est ncessaire de
spcifier linstruction dimportation import java.util.Vector qui indique au compilateur et linterprteur la localisation de cette classe dans lorganisation fonctionnelle des classe java.De mme lutilisation de la classe Enumeration nest possible quen spcifiant en dbut de
programme linstruction import java.util.Enumeration . Cette organisation repose sur lanotion de package dont les grands principes sont donns dans ce qui suit.
Un package est un regroupement (au sein dun rpertoire) de plusieurs classes qui ont undnominateur fonctionnel commun. Les classes regroupes dans la package java.lang sontdirectement rfrenables depuis nimporte quelle autre classe sans avoir prciser quoi que
ce soit dans le programme appelant. Cest par exemple le cas de la classe String qui a tutilise dans la premire partie des travaux pratiques du chapitre prcdent. Pour une classe
___________________________________________________________________DI GALLO Frdric Page 48 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
49/88
121643316.doc______________________________________________________________________________
appartenant un package autre que java.lang , son niveau dutilisation dpend de sonmodificateur daccs :
- public : la classe est accessible depuis nimporte quelle autre classe appartenant aupackage ou non-
pas de modificateur : la classe est accessible seulement depuis les classesappartenant au mme package.Pour accder une classe dun package ayant le spcificateur public il est ncessaire de
mentionner, dans le programme dutilisation, linstruction : import NomPackage.NomClasse
Ainsi pour utiliser les classes Vector et Enumeration qui se trouvent dans le
package java.util , on crit en dbut de traitement : import java.util.*
Pour intgrer une classe un package, il est ncessaire de respecter la syntaxe ci-dessous :package NomPackage ;public class NomClasse
{.}
Quelques remarques :- Une classe ne peut appartenir qu un seul package.- Dans le cas o lon ne prcise pas la clause package lors de la cration dune classe, unpackage par dfaut, qui correspond au rpertoire courant, lui est automatiquement attribu.- Dans certains systmes, la variable systme CLASSPATH permet de dfinir tous les
rpertoires susceptibles de contenir des packages. Ces rpertoires sont alors visits par lecompilateur pour quil procde aux importations demandes. Laffectation de diffrentschemins daccs la variable CLASSPATH est ralise par la commande SET . Par
exemple, la commande suivante dfinit comme localisation possible des packages lerpertoire courant et le rpertoire Lib .
SET CLASSPATH = . ;C:\JAVA\JDK1.3\Lib
IV. Les dictionnaires
Dans un vecteur, laccs direct un composant nest possible que si lon connat sonindice. Si on ne dtient pas cette information on doit procder une recherche squentielle.Ainsi la mthode RechercherUnProduit (Refproduit) met en uvre un parcours squentiel du
vecteur ListeProduits afin de trouver le produit dont la rfrence est fournie en paramtre.Les objets de la classe Hashtable encore appels dictionnaires permettent de
mmoriser un nombre indtermin dobjets dune classe et mettent la disposition delutilisateur des mthodes capables de raliser des accs directs partir dune valeur de cl.Une cl est une donne de la classe qui est telle que tous les objets de cette classe ont desvaleurs diffrentes. Elle permet donc didentifier chaque instance de la classe. Dans la classe Produit la donne Reference peut tre considre comme une cl.
Pour crer un dictionnaire, il faut crire les deux instructions suivantes :Hashtable NomVariable ;
NomVariable= new Hashtable()
___________________________________________________________________DI GALLO Frdric Page 49 24/12/2012
7/30/2019 Programmation oriente Objet en JAVA
50/88
121643316.doc______________________________________________________________________________
A lissue de lexcution de ces instructions la structure du dictionnaire pourrait treschmatise ainsi :
Variable de la classeHastable
Les mthodes de la classe Hashtable les plus couramment utilises sont dcrites etcommentes dans le tableau ci-dessous :
Nom de la mthode Rleput(objetCl,Objet) Ajoute une cl et son objet dans le dictionnaireget(objetCl) Renvoie lobjet associ la cl spcifie en paramtreremove(ObjetCl) Supprime dans le dictionnaire llment ayant la cl spcifie en
paramtresize() Retourne le nombre dlments placs dans la listekeys () Renvoie sous forme dnumration la liste des cls mmorises.
Application: On souhaite implanter la classe Inventaire destine mmoriser un ensemble de produits au moyen dun dictionnaire. En supposant quetout produit est identifi par sa rfrence, le dbut de description de la classe Inventaire ala forme suivante :
import java.util.* ;public class Inventaire{ private Hashtable ListeProduits ;public Inventaire(){ ListeProduits = new Hashtable() ; }
1. Rcrire les mthodes AjouterUnProduit et RechercherUnProduit2. Ecrire la mthode AfficherTout qui affiche la liste de tous les produits (rf et dsignation).
___________________________________________________________________DI GALLO Frdric Page 50 24/12/2012
Cl Objet
Objet de laclasse Object
Objet de laclasse Object
7/30/2019 Programmation oriente Objet en JAVA
51/88
121643316.doc______________________________________________________________________________
V. Les flux
5.1) Oprations sur un fichier
Jusqu maintenant les objets crs taient stocks dans la mmoire vive de lordinateur etavaient de ce fait une dure de vie limite lexcution du programme. Pour mmoriser defaon permanente des objets, le langage Java propose les deux mcanismes suivants :
- la srialisation qui consiste crire des informations relatives un objet sur unfichier,- et la dsrialisation qui correspond lopration rciproque cest--dire lareconstitution de lobjet en mmoire vive partir des informations lues sur le fichier.
La mise en place de ces deux mcanismes est base sur lutilisation des classes
ObjectOutputStream et ObjectInputStream . Un objet de la classe ObjectOutputStream est appel flux sortant et sera utile pour effectuer une oprationdcriture sur un fichier. Un objet de la classe ObjectOutpuStream est appel flux entrantet sera utile pour raliser une opration de lecture sur un fichier. Lextrait de programmesuivant illustre la cration de ces deux objets.
ObjectInputStream FE ;ObjectOutputStream FS ;FE = new ObjectInputStream (new FileInputStream( Produits.DTA ) ;FS = new ObjectOutputStream (new FileOutputStream ( Produits.DTA ) ;
Remarques :
- la cration dun objet de type flux entrant choue si le fichier spcifi en paramtrenexiste pas dans larborescence. Dans ce cas, une erreur de type "File Not FoundException" est mise. Dans le cas contraire, la tte de lecture associ ce flux se
positionne sur le premier objet stock.- la cration dun objet de type flux sortant choue seulement dans le cas o lechemin daccs au fichier, spcifi en paramtre, nest pas cohrent avec larborescence.Dans le cas o le fichier existe dj son contenu est effac. Dans le cas o le fichiernexiste pas et que son chemin daccs est correct, il y a cration du fichier. Pour toutesces situations la tte dcriture se positionne en dbut de fichier.- une fois que tous les traitements ont t raliss, il faut fermer les flux en leurappliquant la mthode close() . Par exemple FE.close() ferme le flux entrant point
par la variable FE .
Les objets que lon peut crire ou lire sur un fichier peuvent tre issues de n