Vous êtes sur la page 1sur 113

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

I. INTRODUCTION

1.1. HISTORIQUE
1991: Concepts Java pour Sun -conception d'un langage pour des appareils embarqu) -syntaxe proche du C++ -concepts de machine virtuelle du langage Pascal.

lectroniques(code

1995: Logiciel HOTJAVA:un navigateur web crit en Java par Sun. 1996: Version 1.01 et 1.02 . . 2002: Version 1.4:disponible sur http:/ /java.sun.com Plusieurs kits de dveloppement logiciel Java2:J2SDK

1.2. PROGRAMMATION ORIENTEE OBJET (POO)


La POO est diffrente de la programmation structure (ex: Pascal): les programmes sont dcoups en fonctions indpendantes qui sont elles- mmes constitues de blocs d'instructions structures. PROGRAMME = STRUCTURE DE DONNEES + ALGORITHMES Les structures de donnes et les fonctions qui les utilisent sont spares. Les donnes sont gnralement en dbut de programme et donc visibles de toutes les fonctions qui suivent.

PROBLEMES LIES A CETTE ORGANISATION:

-effets de bords (tat inattendu des donnes dans une fonction suite leurs modifications par une autre fonction). -ncessit de reconstruire le programme lorsque les structures de donnes sont modifies. SOLUTIONS: POO -repose sur plusieurs principes : -l'objet -l' encapsulation des donnes -la classe -l'hritage -le polymorphisme

1.2.1. L'objet :
Un programme POO construit des objets. Chaque objet associe des donnes (aussi appeles champs, variables, attributs) et des mthodes (rarement appeles procdures, fonctions) agissant exclusivement sur les donnes de l'objet.

1.2.2. L'encapsulation des donnes:


L'encapsulation permet de protger les donnes d'un objet. En effet, il n'est pas possible d'agir directement sur les donnes d'un objet. Il est ncessaire de passer par ses mthodes qui jouent le rle d'interface obligatoire. L'appel de mthode est en fait l'envoi d'un message l'objet. Vu de l'extrieur, un objet se caractrise uniquement par les spcifications de ses mthodes . La manire dont sont rellement implantes les donnes est sans importance. Le fonctionnement interne de l'objet est cach au monde extrieur.

1.2.3. La classe :
La classe est l'lment fondamental contenant les lments de programme: une dclaration de donnes, une mthode ou une instruction appartenant une classe. Une classe est dclare avec le mot- cl class . Le concept de classe correspond la gnralisation de la notion de type des programmes structurs.

Dfinition : Une classe est une description d'un ensemble d'objets ayant une structure de donnes commune et disposant des mmes mthodes. Les dfinitions des classes doivent correspondre des units fonctionnelles indpendantes. Une classe est un modle d'objet. A l'inverse, un objet a une ralit matrielle car il possde des champs avec valeurs. Remarque: Une classe statique ne permet pas de construire d'objets. Les objets apparaissent alors comme des variables d'un tel type classe: un objet est une instance de sa classe (un objet possde un type classe). Les valeurs des champs sont propres chaque objet. Les mthodes sont communes l'ensemble des objets d'une mme classe.

JAVA possde des bibliothques de classe appeles API JAVA (Application Programmation Interfaces, Interface de Programmation d'Application).

PROGRAMMER EN JAVA = PROGRAMMER SES PROPRES CLASSES +

UTILISATION DES API

Avantages de crer ses propres classes: -connaissance exacte de son fonctionnement. Avantages d'utiliser des classes API ou des classes disponibles: -gain de temps (pas de conception, pas de dveloppement) -performance -portabilit

1.2.4.

L'hritage :

L'hritage permet de dfinir une nouvelle classe (une sous- classe) partir d'une classe existante (super- classe, classe- mre) laquelle on ajoute de nouvelles donnes, de nouvelles mthodes. L'hritage permet donc de spcialiser des classes anciennes parfaitement au point: -conomie du code. -structuration des fonctionnalits d'un programme (lisibilit). L'hritage peut- tre ritr: La classe C hrite de la classe B qui elle- mme hrite de la classe A. L'hritage s'applique aussi bien ses propres classes qu'aux classes API. Les classes sont organises en hirarchie.

JAVA NE PERMET PAS L' HERITAGE MULTIPLE (hritage de plusieurs super- classes) mais les mthodes d'interface permettent de traiter de faon simple des situations similaires.

1.2.5. Le Polymorphisme:
Il permet des mthodes (des fonctions) diffrentes dans des classes diffrentes d'avoir le mme nom. Il permet d'conomiser des identificateurs de fonctions (lisibilit).

1.2.6. Le langage de POO presque pur:


JAVA est un langage de POO: un programme est form d'au moins une classe dans laquelle des objets sont instancis. JAVA est un langage presque pur: -existence de types primitifs pour les boolens, les entiers, les rels, les caractres. Les valeurs correspondantes ne sont pas des objets mme si en gnral ces types primitifs sont utiliss pour dfinir les champs d'une classe, donc finalement un objet. -existence de mthodes particulires appeles mthodes statiques de classe (dclares avec le mot- cl static ) qui sont utilisables de faon indpendante d'un objet. Comme ces mthodes peuvent dclarer localement des variables d'un type primitif, on retrouve les possibilits de procdure et fonction d'un langage de programmation structur. Une telle mthode appele main joue le rle de programme principal. -encapsulation des donnes non absolue.

1.3: JAVA et la programmation vnementielle:


Interface console: une seule fentre avec un petit nombre de fonctionnalits (dplacement, fermeture, agrandissement,...) Interface graphique: fentre principale s'ouvrant au lancement du programme.

JAVA permet des applications (graphisme sans web) et des applets (graphisme sur le web) en utilisant pratiquement les mmes fonctionnalits graphiques.

1.4: JAVA et la portabilit:

Classiquement: Un programme est portable car un mme code source peut tre excut sur diffrentes machines aprs une nouvelle compilation. En JAVA: La compilation d'un code source produit, non pas des instructions machines, mais un code intermdiaire form de byte codes . D'une part, ce code est exactement le mme quelque soit le compilateur et la machine concerns. D'autre part, ces byte codes sont excutables sur toute machine disposant du logiciel d'interprtation appel machine virtuelle JVM (JAVA Virtual Machine).

1.5: D'autres particularits : (pas fait) 1.6: Phases de dveloppement d'un programme JAVA:
PHASE 1: EDITION:

-diteur:- vi et emacs sous UNIX -Bloc- Notes sous WINDOWS -Environnement de dvpt Intgr (EDI) Le nom de fichier d'un programme JAVA se termine toujours par l'extension .java Exemple: Programme.java

PHASE 2: COMPILATION:

-La comman de du compilateur JAVA pour compiler un programme JAVA et le traduire en byte codes est javac . -La compilation gnre un fichier possdant le mme nom que la classe et contenant les byte codes avec l'extension .class . Le compilateur gnre un fichier compil pour chaque classe. Ainsi, si le fichier source contient plusieurs classes, alors plusieurs fichiers ont l'extension .class . Exemple: javac Programme.java gnre un fichier Program me.class Mettre l'extension la suite du nom en respectant la casse du nom du fichier. JAVA est sensible la casse.

PHASE 3: CHARGEMENT: Une application peut tre charge est excute par la commande de l'interprteur JAVA: java Exemple: java Program me (pas d'extension .class la suite du nom) Une applet peut tre charge est excute par : -un chargeur de classe lanc par le navigateur Web
5

-ou par la commande appletviewer du J2SDK Exemple : appletviewer Programme.ht ml PHASE 4: VERIFICATION PHASE 5: EXECUTION

II.GENERALITES

2.1.:Programmation criture console:


Problme: Ecriture d'un texte dans une fentre console. Fichier: Ecriture.java _______________________________________________________________ public class Ecriture { public static void main(String[]args) { System.out.println("Un programme Java"); } } _______________________________________________________________ Execution: Un programme JAVA

Une classe publique, dclare avec le mot- cl public , est une classe qui est accessible n'importe quelle autre classe. Un fichier source peut contenir plusieurs classes condition qu'une seule classe au plus, soit publique. Cette classe publique est la classe contenant le main . Le code source d'une classe publique doit toujours se trouver dans un fichier portant le mme nom et possdant l'extension .java . Le nom du fichier source et le nom de la classe doivent avoir la mme casse.

Caractre dchappement : \ Squence de contrle = caractre dchappement + caractre spcial

Exemple :

\n :nouvelle ligne \r :retour chariot \f :nouvelle page \t :tabulation \ \ : \ \ : \ :

2.2. : PROGRAMME ECRITURE FENETRE :


Problme : Ecriture dun texte dans une fentre graphique Fichier : EcritureFenetre.java Import javax.swing.* ; Public class EcritureFenetre { Public static void main ( String[] args) { JoptionsPane.showMessageDialog(null,Fenetre Java); } } Excution: Message

Fentre Java OK

JAVA possde de nombreuses classes prdfinies. Ces classes sont regroupes en catgories de classes de mme genre appeles package (modules). Une rfrence gnrale aux packages existe sous lappellation de bibliothques de classes Java ou dinterface de programmation dapplication Java(API ou dapplications programming interface). Tous les packages de lAPI Java sont stocks dans un rpertoire java ou javax qui contiennent de nombreux sous- rpertoires. Un nom de package est associ un rpertoire. La classe JoptionPane dans le package javax.swing permet dafficher une bote de dialogue avec des informations. Ligne : import javax.swing.* Linstruction import permet didentifier et de charger les classes ncessaires au programme. La classe JoptionPane appartient au package javax.swing qui comporte de nombreuses classes permettant de dfinir des interfaces utilisateur graphique ou GUI (Graphical User Interface)

2 solutions : -importer uniquement la classe ncessaire du package javax.swing : javax.swing.* et chargement par le compilateur des classes effectivement utilises au programme. -invoquer toutes les classes du package javax.swing : javax.swing.* et chargement par le compilateur des classes effectivement utilises par le programme. Javax.swing.* ne concerne que les classes du rpertoire javax.swing Les classes des sous- rpertoires de javax.swing ne sont pas invoques. Pour les invoquer, il faut prciser le sous- rpertoire associ, par exemple javax.swing.event.*

Problme : Ecriture dun texte dans une applet Fichier : EcritureApplet.java import java.awt.* ; import javax.swing.* ; public class EcritureApplet extends Japplet { public void paint (Graphics g) { g.drawString(APPLET JAVA, 100,100) ; } } Execution:

APPLET JAVA

2.3. : Programmation LECTURE:


Problme : Lecture dun texte dune fentre console Fichier : Lecture.java Import java.io.* ; //Mthode de lecture au clavier public class Lecture { //Lecture dune chane public static String lireString() { String ligne_lue=null; try { InputStreamReader lecteur=new InputStreamReader(System.in);

BufferedReader entree=new BufferedReader (lecteur); Ligne_lue=entree.readLine(); } catch (IOException err) { System.exit(0); } return ligne_lue; } }

//Lecture dun rel double public static void double lireDouble() { double x=0 ; try { String ligne_lue=lireString() ; x=Double.parseDouble(ligne_lue) ; } catch (NumberFormatException err) { System.out.println(Erreur de donnes); System.exit (0) ; } return x ; } Ce type de lecture peut ou non mal se passer: pour cela, on utilise une construction de type try catch

//Lecture dun entier public static int LireInt() { int n=0 ; try { String ligne_lue=lireString() ; n=Integer.parseInt(ligne_lue) ; } catch (NumberFormatException err) { System.out.println(Erreur de donnes); System.exit (0) ; } return n; }

// Programme test de la classe Lecture public static void main(String[] args) { System.out.print(Donner un double:); Double x ; x=Lecture.lireDouble() System.out.println( Rsultat +x) ; System.out.print( Donner un entier ) ; int n ; n=Lecture.lireInt() ; System.out.println( Rsultat +n) ; Excution : Donner un Double : 10.01 Rsultat 10.01 Donner un entier :10 Rsultat 10 Le symbole daffectation est =

/*+x sert faire une conversion de type*/

Loprateur + possde une proprit intressante : Ds que lun des oprateurs est de type chane, lautre oprateur est converti en chane. -pour les variables de type primitif, la conversion en chane de caractres est automatique. -pour les objets, la conversion en chanes fait appel la mthode toString() de lobjet. Loprateur + dans System.out.println permet la concatnation de chanes conduisant limpression dune chane de caractres. La mthode print() diffre de println() par labsence de saut de ligne en fin dimpression.

2.4. : Rgles gnrales dcriture : 2.4.1 : Identificateurs :


Dans un langage de programmation, un identificateur est une suite de caractres pour dsigner les entits dans un programme :variables, mthodes, objets, classes, Cest une suite de lettres et de chiffres (sans espace), le premier caractre tant une lettre. Par convention : -les identificateurs de classe commencent toujours par une majuscule. - les identificateurs de variables et de mthodes commencent toujours par une minuscule. -les identificateurs forms par la concatnation de plusieurs mots comportent une majuscule chaque dbut de mot sauf pour le premier mot qui dpend du type de lidentificateur.
10

Exemple : public class ClasseNouvelle

2.4.2 : Mots-Cls
boolean, catch, continue, else, false, int, package,

2.4.3: Sparateurs
C.f. manuel JAVA

2.4.4.: Format libre:


JAVA permet le format libre : Une instruction stend sur plusieurs lignes et une mme ligne peut comporter plusieurs instructions Le point- virgule marque la fin de linstruction. Par convention : une instruction par ligne Une instruction peut tre : -un bloc dinstruction -linstruction vide :le point- virgule uniquement -une instruction de contrle -une expression suivie du point- virgule, une expression tant soit un oprateur daffectation(=), soit un oprateur de cration dobjet(new), soit un oprateur dincrmentation ou de dcrmentation, soit un appel une mthode .

2.4.5. : Commentaires
3 formes : Commentaire usuel : pouvant stendre sur plusieurs lignes : /**/ Commentaire de fin de ligne : sarrtant en fin de ligne : // Commentaire de documentation: /***/ : pouvant tre extraits automatiquement par des programmes utilitaires de cration de documentation tels que Javadoc qui gnre automatiquement une documentation au format HTML.

2.4.6 : Blocs :
Bloc dlimit par les accolades { et }. Il comporte : -aucune, une ou plusieurs dclarations de variables locales (connues que dans le bloc) - aucune, une ou plusieurs instructions

2.4.7. : Code Unicode

11

Java utilise le systme Unicode pour coder des caractres. Chaque caractre Unicode est cod sur 2 octets conduisant 2^16=65536 possibilits qui permettent de reprsenter la plupart des alphabets et des symboles mathmatiques et techniques. Le code source est toujours actuellement dit avec un diteur gnrant des caractres cods sur 1 octet. Il existe peu dditeurs de texte Unicode. Mais le compilateur Java traduit le fichier source en Unicode avant de gnrer les byte codes. Ainsi, mme les caractres Unicode du code source ne sont pas portables, il sont reprsents de faon portable dans les byte codes. La notation Java permettant dintroduire un caractre Unicode dans le code source est ralis avec les squences dchappeme nt Unicode qui nutilisent que des caractres ASCII : \uxxxx o u est le symbole pour Unicode , x est un chiffre hexadcimal et xxxx dsigne le caractre ayant comme Unicode la valeur xxxx. Il faut 4 chiffres hexadcimaux pour reprsenter des caractres cods sur 16 bits (16^4)= 2^16. Remarque : Certains diteurs de programme source permettent lutilisation des caractres nationaux qui sont les caractres Unicode.

III. TYPES PRIMITIFS


3.1. : Notion de type :
Les types primitifs permettent de manipuler des boolens, des entiers, des rels, des caractres. Ils sont les seuls types du langage qui ne soient pas des classes. Ils sont utiliss pour dfinir les champs de donnes de toutes les classes. La dclaration de variables est obligatoire avant leur utilisation. Dans une dclaration de variables, le type des variables est suivi de la liste des identificateurs de variables spars par des virgules. En JAVA, les dclarations peuvent apparatre nimporte quel endroit du programme. De prfrence, la dclaration de la variable se fait au moment de sont utilisation. Remarque: Les champs des objets possdent une initialisation implicite.

3.2. :Type boolen :


Dclaration dune variable boolenne : boolean test Une variable boolenne prend deux valeurs : false et true . Affectation dune variable boolenne : test = (n<m)

12

3.3. : Type entier :


Le type entier permet de reprsenter de faon exacte une partie des nombres entiers relatifs : TYPE Int long TAILLE (en Octets) 4 8 VALEUR MINIMALE VALEUR MAXIMALE Integer.MIN_VALUE Integer.MAX_VALUE Long.MIN_VALUE Long.MAX_VALUE

Par dfaut: une constante entire est de type int Une constante entire suffixe par I ou L est de type long Exemple : 452L Une constante peut- tre exprime en base 8(octale) en faisant prcder la valeur par 0 Exemple : 014(8+4=12 en base 10) Une constante entire peut- tre exprime en base 16 (hexadcimale) en faisant prcder la valeur par 0x ou 0X Exemple : 0X1A

3.4. :Type rel :


Le type rel permet de reprsenter de faon approche une partie des nombres rels. Ainsi, pour tester lgalit de deux nombres rels, il est prfrable de comparer la valeur absolue de leur diffrence un nombre trs petit. TYPE Float double TAILLE (en Octets) 4 8 PRECISION 7 15 VALEUR VALEUR MINIMALE MAXIMALE Float.MIN_VALUE Float.MAX_VALUE Double.MIN_VALU Double.MAX_VALU E E

Par dfaut: une constante relle est de type double . Une constante relle peut scrire en notation dcimale ou exponentielle. Exemple : Notation dcimale : 1.1 ; 1. ; .1 Notation exponentielle : 1.1 E10 ; 1.E10 ; .1 E10 Une constante relle suffixe par f ou F est de type float . Laffectation dune constante relle de type double une variable de type float ncessite une conversion de type ou transcryptage (cast). La conversion dun objet, dune variable ou dune constante dans un type donn se fait en les prcdant du type plac entre parenthses.

13

Exemple : float x ; x=(float)12.5 ; // et non x=12.5 ; Problme : Ecriture dune variable relle en utilisant un formatage Fichier : EcritureRel.java import java.awt.* ; public class EcritureReel { public class static void main (String[] args) { double x=10.123456789; System.out.println(x= +x); //au moins un chiffre gauche du point dcimal //2chiffres exactement droite du point dcimal DecimalFormat deuxDecimal = new DecimalFormat ( 0.00 ) ; System.out.println( x= +deuxDecimal.format(x)) ; } } Execution : x=10.123456789 x=10.12

3.5. : Type caractre :


Dclaration dune variable caractre : char c. Une constante caractre est note entre apostrophe. Exemple : a

3.6. : Initialisation :
Toute variable doit tre initialise avant dtre utilise (sinon erreur de compilation) Une variable peut tre initialise lors de sa dclaration par une constante ou une expression autre quune constante, par exemple par une instruction de lecture. Exemple : int n=10 ; n=Lecture.lireInt() Les situations de variables partiellement initialises sont dtectes la compilation, par exemple dans une structure conditionnelle si . Mais linitialisation dune variable dans une structure conditionnelle si-sinon , nentrane pas derreur de compilation. Exemple : int n ; if () n=0 ; =n ; // erreur de compilation

14

Exemple : int n ; if () n=0 ; else n=0 ; =n ; // pas derreur la compilation

3.7. :Constante :
Une constante est une variable initialise dont la valeur ne peut tre modifie dans la suite du programme en utilisant le mot- cl final (valeur connue la compilation) Une telle constante est appele constante symbolique . Exemple : final int N=10 Le mot- cl final peut tre utilis avec une expression dinitialisation de la valeur (valeur non connue la compilation mais lexcution) Exemple : final int N=2*m Les mots- cls static et public sont souvent associs au mot- cl final . Une constante dclare de type static appartient la classe ( sa place dans la classe et non dans lobjet). Exemple : static final int N=10

Une constante dclare publique est connue en dehors de la classe. Exemple : public final int N=10 Les constantes Pi et e sont accessibles par Math.Pi et Math.E (champs statiques) Par convention : Les identificateurs de constantes sont obligatoirement en majuscule. Il est toujours prfrable dutiliser des constantes symboliques plutt que des constantes littrales. En effet, pour changer la valeur dune constante symbolique, il suffit de changer sa valeur dans sa dclaration . Par ailleurs, il est difficile de localiser toutes les utilisations des constantes sans erreur, car une mme valeur peut avoir des significations diffrentes.

3.8. : Expression constante :


Le mot- cl final peut tre utilis avec une expression constante (valeur connue la compilation) Exemple : final int M=10 final int N=2*m

15

IV. Oprateurs et expressions.


4.1. : Originalit des notions doprateurs et dexpressions.
Une expression est une suite doprandes et doprateurs. Dans les langages classiques : -lexpression possde une valeur mais ne ralise aucune action, en particulier, elle jaffecte pas de valeur une variable. -laffectation donne une valeur une variable : ralise donc une action. En JAVA, les notions dexpression et daffectation ne sont pas disjointes : -des oprateurs dincrmentation particuliers par exemple i++ , intervenant au sein dune expression, conduisent la ralisation dune action. -une affectation par exemple, i=10 peut tre considre comme une expression puisque le symbole est un oprateur. En JAVA, linstruction est une expression se terminant par un point- virgule (instruction expression)

4.2. : Oprateurs arithmtiques : 4.2.1. : Oprateurs unaires :


+ et -

4.2.2 :Oprateurs binaires :


+ , - , * , / , %(modulo) Les oprateurs ne sont dfinis qu avec des oprandes de mme type. Loprateur % peut porter sur des entiers positifs et ngatifs mais galement sur des rels positifs et ngatifs. Il nexiste pas doprateur puissance : Il faut utiliser la mthode statique Math.pow. La class Math est une classe drive de java.lang qui est la classe charge par dfaut. Pow(double a, double b) pour a^b

4.2.3. : Priorit des oprateurs :


Les priorits des oprateurs en JAVA sont celles de lalgbre.

4.3. : Conversions implicites dans les expressions :


Une expression mixte est une expression avec des oprandes de type diffrent. Hirarchie des conversions dajustement de type :

16

Int ->long ->float ->double Les conversions sont effectues en considrant un un les oprandes concerns. Remarque : Il nexiste pas de conversion implicite de double en float. Promotions numriques : La promotion numrique est la conversion systmatique dun type apparaissant dans une expression en int sans considrer les types des autres oprandes. {byte, short,char} ->int Exemple : char c; c+1 ; | int : valeur numrique de c

Comportement en cas dexception pour le entiers : cf. manuel Comportement en cas dexception pour le rels : -aucune opration sur les rels, mme pas une division par 0, ne conduit un arrt dexcution. Mais, il existe des valeurs reprsentant linfini : -infinity avec les constantes Double.POSITIVE_INFINITY et Float.POSITIVE_INFINITY - infinity avec les constantes Double.NEGATIVE_INFINITY et Float.NEGATIVE_INFINITY -NaN (Not A Number) avec les constantes Double.NaN et Float.NaN

4.4. : Oprateurs relationnels (comparaison)


Ils sont : < ; <= ; > ;>= ; ==(gal) et !=(diffrent) Les valeurs reprsentant infini peuvent tre compares avec les valeurs relles. Exemple : double x=10E10 if (x=Double.POSITIVE_INFINITY ) : rsultat est vrai La comparaison des caractres est base sur le code Unicode avec les relations suivantes 0<1<<9<A<B<<Z<a<b<<z

4.5. : Oprateurs logiques : 4.5.1 : Oprateur unaire :


! (ngation)
17

4.5.2. : Oprateurs binaires :


&(et), |(ou), ^(ou exclusif), &&(et avec court- circuit) et ||(ou avec court- circuit) Avec les deux derniers oprateurs, le deuxime oprande nest valu que si sa valeur est ncessaire pour dcider si lexpression est vraie ou fausse. Cette proprit est indispensable dans certaines constructions comme les tableaux (cas dune condition comportant simultanment des tests sur lindice et les lments dun tableau) Avec loprateur && , la condition dpendante doit tre place aprs lautre condition. Dans les expressions utilisant && et si les conditions sont indpendantes des unes des autres, il faut placer gauche la condition susceptible dtre fausse. Dans les expressions utilisant || et si les conditions sont indpendantes des unes des autres, il faut placer gauche la condition susceptible dtre vraie.

4.6. : Oprateur daffectation :


Il impose que son premier oprande soit une rfrence un emplacement dont la valeur peut tre modifie. Par exemple, une variable non dclare avec le mot- cl final. Exemple : i=10 Cet oprateur possde une associativit de droite gauche. Exemple : j=i=10 Il a une priorit plus faible que les oprateurs arithmtiques et relationnels. Les conversions implicites dans laffectation sont : Byte -> short -> int -> long -> float -> double char -> int -> long -> float -> double

4.7.: Oprateurs dincrmentation et de dcrmentation :


Ces oprateurs unaires portant sur une variable, conduisent des expressions qui possdent une valeur et qui ralisent une action. Loprateur dincrmentation ++est : -un oprateur de pr- incrmentation quand il est plac gauche de son oprande -un oprateur de post- incrmentation quand il est plac droite de son oprande Loprateur de dcrmentation - - est :

18

- un oprateur de pr- dcrmentation quand il est plac gauche de son oprande - un oprateur de post- dcrmentation quand il est plac droite de son oprande Exemple : y=x++ y=x ; x=x+1 y=++x x=x+1 ; y=x Lorsque seul importe leffet dincrmentation (resp. dcrmentation), loprateur ++ (resp. --) peut tre indiffremment plac avant ou aprs la variable. Ainsi : i++ ++i Il nest pas possible dutiliser les oprateurs dincrmentation et de dcrmentation avec des expressions autre quune valeur Exemple : (n+1)++ : FAUX

4.8. : Oprateurs daffectation largie :


Ils permettent de condenser les affectations de la forme : Variable= variable oprateur expression en Variable oprateur = expression Liste des principaux oprateurs daffectation largie : += -= *= /= %= Exemple : a+=b a=a+b Les oprateurs relationnels et logiques ne sont pas concerns par cette possibilit.

4.9. :Oprateur cast :


Loprateur cast permet de forcer la conversion dune expression quelconque dans un type donn. Exemple : Soient n et p , 2 variables de type int (double)(n/p) Il existe autant dobjets de cast que de types diffrents, y compris les types classes. La conversion dun objet dune classe drive en un objet de classe de base est implicite. La conversion inverse, ie dun objet dune classe de base en un objet de classe drive est possible avec loprateur de cast.

19

La priorit dun oprateur de cast est leve. Il est ncessaire de placer entre parenthses lexpression concerne. La conversion par loprateur de cast ne produit jamais derreur dexcution.

4.10 : Oprateurs de manipulations de bits :


cf. manuel

4.11. : Oprateur conditionnel :


Loprateur conditionnel est un oprateur ternaire (3oprandes) permettant de traduire : si (expression_test) alors variable=expression_1 sinon variable= expression_2 par variable =(expresssion_test) ?expression_1 :expression_2 Exemple : x=(a>b) ?a :b Cette instruction affecte x, la plus grande des valeurs de a et b. Il est galement possible que lexpression conditionnelle soit value sans que la valeur soit utilise. Exemple : (a>b) ?i++:i- -

V. Instructions de contrle.
5.1. :Instruction if :
Linstruction if prsente deux formes : If (expression_boolenne) instruction_1 [else instruction_2] Exemple : If (++i<max) i=i+1 ; if (i<max) If (I++<max) i=i+1 ; if (I-1<max)

=> consquence: 1 boucle en plus.

Un else se rapporte toujours au dernier if rencontr auquel un else na pas encore t attribu.

5.2 : Instruction switch :


Est une instruction de slection multiple

20

switch (expression) { case cste_1 : [suite_instructions_1] .. case cste_n : [suite_instructions_n] [default : suite_instructions] }

expression : est une expression de type byte, short, int ou char ; les expressions de type byre, short ou char ne peuvent tre que de simples variables (sauf avec loprateur cast) ; le type long nest pas autoris. Cste_i : expression constante dun type compatible par affectation avec le type de expression. Suite_instructions_i : suite dinstructions quelconques. Si expression vaut cste_i, suite_instructions_i est excute et toutes les suites dinstructions suivantes peuvent tre hirarchises. Pour sortir du switch immdiatement, les suites dinstructions doivent se terminer par un break.

5.3. : Instruction while :


de la forme while (expression_boolenne) instruction rpte linstruction tant que la condition de poursuite est vraie. La condition est teste avant chaque parcours de la boucle. Cette condition doit tre initialise.

.. int compteur=1 ; while (compteur<=10) { instruction_unique ; compteur++ ; }

compteur : 1,.10

21

.. int compteur=0 ; while (++compteur<=10) instruction_unique ;

compteur :1,.,10

int compteur=0 ; while (compteur++<=10) compteur : 1,..,11 Choisir en priorit des indices de boucles de type entier.

5.4. : Instruction dowhile :


do (instruction) while (expression_boolenne); Linstruction do while rpte linstruction tant que la condition de poursuite est vraie. Une telle boucle est parcourue au moins une fois.

5.5. : Instruction for :


for ([initialisation] ;[expression_boolenne] ;[incrmentation]) instruction initialisation : est une dclaration ou une suite dexpression quelconques spares par des virgules. La dclaration est locale au bloc. incrmentations : sont une suite dexpression quelconques spares par des virgules.

Problme : Exemple dune instruction for Fichier : InstructionFor.java Public class InstructionFor { public static void main (String[ ] args) { for (int i=1,j=1;(i<=5); I++,j++) { System.out.println (I=+I+ j=+j); } }
22

} Execution :

i=1 j=1 i=2 j=3 i=3 j=6 i=4 j=10 i=5 j=15

Soit le programme partiel suivant: .. for (int i=1 ; i<=100 ; i+=2) j+=i ; .

.. for (int i=1 ; i<=100 ; j+= i, i+=2) ; .

5.6.: Instruction break:


ne doit tre utilise que dans une instruction switch

VI. Classes et objets .


6.1. : CLASSES :
La notion de classe gnralise la notion de type. La classe comporte des champs (donnes) et des mthodes. La notion dobjet gnralise la notion de variable. Un type classe donn permet de crer (dinstancier) un ou plusieurs objets du type, chaque objet comportant son propre jeu de donnes.

6.1.1. : Dfinition dune classe :


Une classe contient un en- tte et un corps comportant les dfinitions de ses champs et mthodes. Class Equation { // Dfinition des champs et mthodes de la classe.
23

} En labsence du mot- cl public , laccs la classe Equation est limit aux seules classes du mme package.

(i)

Dfinition des champs :

private double coeffX2 ; .. Le mot- cl private prcise que les champs de la classe Equation ne sont pas accessibles lextrieur de la classe, ie en dehors de ses propres mthodes. encapsulation des donnes. (ii) Dfinition des mthodes :

-initialisation -rsolution -affichage Dfinition mthode= similaire la mthode main


public void initialisation (double X2, double X1, double X0)

{ coeffX2=X2 ; }

6.1.2. : Utilisation dune classe :


La classe Equation permet dinstancier des objets de type Equation et de leur appliquer les mthodes publiques initialisation, rsolution et affichage. Elle ne peut tre utilise directement. Il faut crer une variable de type Equation (uneEquation) appele instance de la classe Equation.
Cette utilisation se fait dans une autre mthode quelconque, en particulier la mthode main.

La dclaration est similaire une variable de type primitif Equation uneEquation rserve un emplacement mmoire pour une rfrence un objet de type Equation (pas de rservation pour un emplacement mmoire pour un objet de type Equation) Dit autrement, lidentificateur dobjet uneEquation est une rfrence lobjet et non une variable contenant directement une valeur, comme pour les variables de type primitif.

La rservation dun emplacement mmoire pour un objet de type Equation ou allocation, se fait en appelant loprateur unaire new Equation() qui fournit en rsultat la rfrence cet emplacement. Ainsi, laffectation UneEquation=new Equation() Cre (construit) un objet de type Equation et place sa rfrence dans uneEquation qui doit avoir t dclare au pralable. Loprateur new fait appel Equation() qui est le constructeur par dfaut de la classe Equation .
Il est possible de regrouper dclaration et cration.

Equation uneEquation = new Equation() Aprs avoir dclar et cr un objet, il est possible dappliquer les mthodes lobjet correspondant, ie rfrenc par uneEquation . Une Equation.initialisation (1.0,5.0,1.0) Cette instruction appelle la mthode initialisation du type Equation en lappliquant lobjet de rfrence uneEquation et en lui transmettant les arguments 1.0, 5.0, 1.0 , Le prfixe uneEquation prcise la mthode sur quel objet elle doit oprer. Ainsi, linstruction coeffX2=X2 de la mthode initialisation() place la valeur reue pour X2 dans le champ coeffX2 de lobjet uneEquation . Lappel dune mthode se fait en prfixant le nom de la mthode par le nom de lobjet suivi dun point : NomObjet.nomMthode (liste_arguments) Une mthode est toujours suivie de () (permettant la distinction avec un champ) Avec une mthode utilisant des arguments , la liste des arguments rels spars par des virgules est mise entre () Par convention, lobjet uneEquation est appel une variable de classe.

6.1.3. : Plusieurs classes dans un mme fichier source :


Un fichier source peut contenir plusieurs classes mais obligatoirement une seule classe publique. La classe contenant la mthode main doit obligatoirement tre publique (pour laccs la machine virtuelle).
Une classe peut avoir 2 attributs daccs :

-publique -sans attribut (accs de package) : classe reste accessible toutes les classes du mme package, donc en particulier du mme fichier source.
25

La compilation cre un fichier .class par classe.

Problme :Rsolution dune quation du 2nd degr Fichier : EquationSecondDegre.java Import java.text.DecimalFormat ; //Classe Equation class Equation { //Les coefficients et les racines sont sous forme de champs. private double coeffX2 ; private double coeffX1 ; private double coeffX0 ; private double racine1 ; private double racine2 ;

//Mthode dinitialisation public void initialisation(double X2, double X1, double X0) { coeffX2=X2 ; . . . }

//Mthode rsolution public void rsolution() { double discri ; discri=(coeffX1*coeffX1-4*coeffX2*coeffX0) ; racine1= ; racine2= ; }

//Mthode daffichage public void affichage() { DecimalFormat deuxDecimal=new DecimalFormat( 0.00 ) ; System.out.println( Racine1= +deuxDecimal.format(racine1) ;

System.out.println( Racine2= +deuxDecimal.format(racine2) ; } }

//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation; // Dclaration de lobjet uneEquation uneEquation=new Equation() ; uneEquation.initialisation(1.0,5.0,1.0); uneEquation.rsolution(); uneEquation.affichage(); } } Excution : Racine1= -0,21 Racine2= -4,79

6.1.4. : Une classe par fichier source :


(1)Sauvegarder la classe Equation dans un fichier Equation.java Fichier : Equation.java import java.test.DecimalFormat ; public class Equation { . } (2)Compiler le fichier Equation.java. Gnration dun fichier Equation.class (3) Sauvegarder la classe EquationSecondDegre dans un fichier EquationSecondDegre.java (4)Compiler le fichier EquationSecondDegre.java

6.2. :CONSTRUCTEURS 6.2.1. : Principe :

27

La mthode dinitialisation permet dattribuer des valeurs aux champs dun objet de type Equation . Cette mthode doit donc tre imprativement appele. Le constructeur permet : -dautomatiser le mcanisme dinitialisation -dattribuer des valeurs initiales mais galement des actions Le constructeur est une mthode portant le mme nom que la classe et sans valeur de retour Transformation de la mthode dinitialisation de la classe Equation

//Mthode dinitialisation public void initialisation(doubleX2, double X1, doubleX0) { coeffX2=X2 ; coeffX1=X1 ; coeffX0=X0 ; }

..en un constructeur :

//co nstructeur public Equation (double X2, double X1, double X0) { coeffX2=X2 ; coeffX1=X1 ; coeffX0=X0 ; }

Transformation de lappel de la mthode dinitialisation de la classe Equation.

//Appel de la mthode dinitialisation Equation uneEquation ; UneEquation=new Equation() ; UneEquation.initialisation(1.0,5.0,1.0);

.en un appel du constructeur

//ap pel du constructeur Equation uneEquation ; UneEquation=new Equation(1.0,5.0,1.0) ;

Remarque: Linstruction uneEquation=new Equation() est impossible (erreur de compilation) car la classe Equation dispose dun constructeur qui, dans cet exemple a besoin de 3 arguments rels. Il existe une solution avec le constructeur vide.

6.2.2. :Quelques rgles :


Un constructeur porte obligatoirement le nom de la classe quil instancie.

Par dfinition, un constructeur ne fournit aucune valeur. Aucun type ne doit figurer dans son en- tte, mme pas le type void. Si par erreur un type est donn un constructeur, on cr une mthode et non un constructeur. Une classe peut navoir aucun constructeur (constructeur par dfaut sans argument galement appel constructeur vide implicite). Par exemple : Equation une Equation = new Equation() Une classe peut avoir plusieurs constructeurs. Quand une classe possde au moins un constructeur, un constructeur par dfaut ne peut plus tre utilis. Le constructeur par dfaut ne se distingue pas dun constructeur sans argument. Un constructeur ne peut pas tre appel directement depuis une autre mthode. EquationConstructeur une Equation ; UneEquation.EquationConstructeur(1.0,5.0,1.0) ; //impossible Un constructeur peut appeler un autre constructeur de la mme classe en utilisant le mot- cl super . Un constructeur peut tre dclar priv : il ne peut plus tre appel de lextrieur de la classe et donc, ne peut tre utilis pour instancier des objets. Cette possibilit na dintrt que si la classe possde au moins un autre constructeur public faisant appel ce constructeur priv.

6.2.3. : Cration dun objet :


La cration dun objet entrane toujours par ordre chronologique les oprations suivantes :

29

-initialisation par dfaut de tous les champs par objet. -initialisation explicite des champs de lobjet. -excution des instruction du corps du constructeur.

//Constructeur public Equation (double X2, double X1, double X0) { system.out.println ( coeffX2= +coeffX2) ; coeffX2=X2 ; system.out.println( coeffx2= +coeffX2) ; Excution : coeffX2=0.0 coeffX2=1.0

Initialisation par dfaut des champs dun objet : Type Type Type Type Type boolean :false char : caractre de code nul entier :0 rel (double, flottant) : 0. et 0.f Objet (champ dune classe rfrenant un objet) : null

Initialisation explicite des champs dun objet : Comme pour une variable locale, une initialisation de champ peut comparer une constante ou une expression courante. Excution des instructions du corps du constructeur : Les initialisations des champs doivent tre effectues dans le constructeur (fonction du constructeur). La fonction dun constructeur est de raliser lallocation dynamique de la mmoire ncessaire la cration de lobjet qui est ralis lexcution. Par opposition, lallocation statique de la mmoire est ralise la compilation. Cas des champs dclars avec lattribut final : Comme une variable locale, un champ peut tre dclar avec lattribut final afin dimposer une seule initialisation.
Alors quune variable peut tre initialise tardivement, nimporte o dans une mthode, un champ dclar avec lattribut final doit tre initialis au plus tard par le constructeur. Par ailleurs, il nexiste pas dinitialisation par dfaut, il faut donner une valeur.

6.2.4. : Initialisation avec les champs dun objet :


Comme pour les mthodes, pour utiliser les champs dun objet, il suffit de prfixer le nom du champ par le nom de lobjet suivi par le champ :

NomObjet.nomChamp Fortement dconseill !! (ne respecte pas lencapsulation des donnes)

6.3 . : CONCEPTION DES CLASSES :


Les mthodes de classe sont de 3 types : -les constructeurs -les mthodes daccs(accessor) de la forme getxxx qui fournissent des informations relatives ltat dun objet, ie des valeurs de certains champs sans les modifier :

//Classe Equation class Equation { public double getRacine1() { return racine1; }

public double getRacine2() { return racine2; } } //Classe test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { System.out.println (sol1= +uneEquation.getRacine1(); System.out.println (sol2= +uneEquation.getRacine2(); } } Excution Sol1= -0.20871215252208009 Sol2= -4.1912878474779195

-Les mthodes daltration (mutation) de la forme setxxx, qui modifient ltat dun objet, ie les valeurs de certains champs :

31

//Classe Equation class Equation { public void setRacine1(double rac1) { racine1=rac1; } public void getRacine1(double rac1) { racine2=rac2; } . }

//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { uneEquation.affichage(); uneEquation.setRacine1(1.0); uneEquation.setRacine2(2.0); uneEquation.affichage(); } } Excution : Racine1= -0,21 Racine1=1.0 Racine2=- 4,79 Racine2=2.0

6.4. :AFFECTATION ET COMPARAISON DOBJETS :


Soient deux variables E1 et E2 de type Equation. Equation E1, E2 ; Soient 2 objets E1 et E2 de type Equation. E1=new Equation (1.0,5.0,1.0) ; E2=new Equation (2.0,6.0,2.0);

Soient 3 variables E1, E2, E3 de type Equation.

Soient 2 objets E1 et E2

Equation E1, E2, E3 ; E1 et E2 de type Equation E1=new Equation (1.0,5.0,1.0) ; E2=new Equation (2.0,6.0,2.0);

Les instructions E3=E1 , E1=E2 , E2=E3 conduisent aux affectations suivantes: -la variable E1 dsigne lobjet Equation (2.0,6.0,2.0) -les variables E2 et E3 dsignent le mme objet Equation(1.0,5.0,1.0)

Il est impossible de dfinir une variable locale dun type primitif sans linitialiser. Cette rgle dinitialisation sapplique galement aux variables locales de type classe.

//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation; //u neEquation=new Equation (1.0,5.0,1.0); uneEquation.rsolution(); .. } } Un champ dun objet est toujours initialis : -soit implicitement une valeur nulle, sauf les champs avec attribut final qui doivent recevoir explicitement une valeur
-soit explicitement (lors de la dclaration)

-soit au niveau du constructeur.

33

Cette rgle sapplique galement aux champs de type classe (objets) pour lesquels cette valeur nulle correspond une valeur particulire de rfrence note par le mot- cl null. Une telle rfrence null ne dsigne aucun objet.
Alors quune rfrence non dfinie est dtecte la compilation (cf exemple ci-dessous), une rfrence null nest dtecte qu lexcution.

//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation=null; //u neEquation=new Equation (1.0,5.0,1.0); uneEquation.rsolution(); .. } } Cette rfrence null peut tre utilise dans une comparaison.

//Classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation=null; if (uneEquation==null) System.out.println(Rfrence null); .. } } Tant quun objet na pas t cr par new, la rfrence sur cet objet vaut null . La rfrence null ne pointe sur aucun objet. Une tentative daccs un objet non cr provoque la leve dune exception de type NullPointerException . Il est parfois ncessaire dinitialiser des rfrences null.
Laffectation de variables de type objet se limite la recopie de rfrences. Elle nentrane pas la recopie de la valeur des objets.

Les oprateurs == et != portent sur les rfrences des objets et non pas sur les valeurs de leurs champs. Leur intrt est limit. Exemple: Pour comparer 2 objets de type chane, il faut comparer le contenu, donc utiliser la mthode Equals().

6.5. : RAMASSE-MIETTES :
Loprateur de cration dun objet est new . Il nexiste pas doprateur de destruction dun objet, comme on en dispose en Pascal. Java utilise un mcanisme de gestion automatique de la mmoire. Possibilit de crer un objet sans rfrence. Avec la mthode principale : //Mthode principale public static void main (String[ ] args) { Equation uneEquation=new Equation (1.0,5.0,1.0); uneEquation.rsolution(); .. } } La rfrence uneEquation est supprime.

//Mthode principale public static void main (String[ ] args) { (new Equation (1.0,5.0,1.0)).rsolution(); .. } } Cet objet non rfrenc devient candidat au ramasse- miettes.

6.6. : PROPRIETES DE METHODES : 6.6.1. : Mthodes ne fournissant aucun rsultat :


Mthode avec le mot-cl void dans son en-tte.

Mthode appele : Objet.mthode (liste arguments) ;

6.6.2. : Mthodes fonction fournissant un rsultat :


Mthode avec le type du rsultat dans son en- tte. //Mthode somme

35

public double somme() { double som ; som=racine1+racine2 ; return som ; } Mthode appele :

//do uble som=0.0 ;

//Mthode principale public static void main (String[ ] args) { System.out.println( Somme= +uneEquation.som me() } Possibilit dutiliser le rsultat dune mthode fonction dans une expression de la classe Equation.

//Classe Equation classe Equation { private double sommeSquare=0.0 ; .. //Mthode somme public double somme() { }

6.6.3. : Arguments formels et effectifs : Arguments formels (muets) : arguments dans len- tte de la dfinition dune mthode.
La valeur est fournie la mthode lors de son appel (contrairement une variable locale la mthode).

Possibilit de dclarer son argument formel avec un attribut final . Dans ce cas, la valeur de cet argument ne peut plus tre modifie par la mthode. Exemple : cf. //Mthode dinitialisation/ /

Utiliser des arguments effectifs de mme type que les arguments formels.

Eviter les possibilits de conversion implicite lgale. Java respecte lordre des arguments.
Eviter la dpendance des arguments f(n++,n) et f(n, n++) conduisent des appels diffrents.

Arguments effectifs : arguments fournis lors de lappel de la mthode. Ces arguments peuvent tre des expressions (la transmission se fait par valeur).

6.6.4. : Variables locales :


La porte dune variable locale est limite au bloc de la mthode o elle est dclare. Une variable locale ne peut pas avoir le mme nom quun argument formel. Lemplacement dune variable locale est allou lentre de la mthode et est libr la sortie de la mthode (variable non rmanente). Une variable locale est obligatoirement dun type primitif ou dun type classe. Une variable locale de type classe contient la rfrence un objet. Toute variable locale, y compris une rfrence un objet, doit tre imprativement initialise avant dtre utilise. Il est possible de dfinir des variables locales un bloc : for, if, bloc artificiel, etc.,

6.7. : CHAMPS ET METHODES DE CLASSE : 6.7.1. : Champs de classe (Champs Statiques) :


Un champ de classe est un champ unique pour toutes les instances dune mme classe (champ global partag par toutes les instances de classe). Le champ de classe existe indpendam me nt de tout objet de sa classe. Un champ de classe est dclar avec lattribut statique. Lappel dun champ de classe se fait en prcisant le nom du champ par le nom de la classe suivi dun point : NomClasse.nomChamp

Problme :Champ statique pour compter le nombre de rsolution : Class Equation { .. private static int nbRsolution=0 ; //Constructeur. Public Equation(double X2, double X1, double X0) { nbRsolution++ ; }

37

//Mthode de rsolution public void rsolution() { } //Mthode affichage public void affichage() { system.out.println( nbRsolution= +nbRsolution() ; } }

//classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); UneEquation.rsolution(); UneEquation.affichage; Equation uneEquation = new Equation (2.0,6.0,2.0); . Excution: nbRsolution=1 Racine1=- 0,21 Racine2=- 4,79 NbRsolution=2 Racine1=- 0,38 Racine2=- 2,62

Mme programme sans lattribut static : Class Equation { private int nbRsolution=0 ; } //Classe test public class EquationSecondDegre { .. }

EXECUTION: nbRsolution=1 Racine1=- 0,21 Racine2=- 4,79 NbRsolution=2 Racine1=- 0,38 Racine2=- 2,62

6.7.2. : Mthodes de classe (mthodes statiques) :


Une mthode de classe est une mthode indpendante de tout objet dune classe. Une mthode de classe agit uniquement sur les champs de classe et non sur les champs non statiques. Une mthode de classe est dclare avec lattribut statique. Lappel dune mthode de classe se fait en prfixant le nom de la mthode par le nom de la classe suivi dun point : NomClasse.nomMthode . Problme :Mthode statique pour compter le nombre de rsolution : Class Equation { .. private static int nbRsolution=0 ; //Constructeur. Public Equation(double X2, double X1, double X0) { nbRsolution++ ; } //Mthode de rsolution public void rsolution() { } //Mthode de nbSolution public static int nbSolution() { return nbRsolution ; } //Mthode affichage public void affichage() { system.out.println( nbRsolution= +nbRsolution() ;

39

} } //classe Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); UneEquation.rsolution(); UneEquation.affichage; Equation uneEquation = new Equation (2.0,6.0,2.0); System.out.println( nbSolution= +Eq.nbSolution()) ; .

Excution: nbRsolution=1 Racine1=- 0,21 Racine2=- 4,79 NbRsolution=2 Racine1=- 0,38 Racine2=- 2,62

Les mthodes objets peuvent utiliser des champs statiques. De prfrence, les mthodes qui noprent que sur des champs statiques doivent tre dclares statiques. Utilisation : Les mthodes de classe sont utilises pour : -le comptage des objets dune classe. -la description de la classe -le regroupement de fonctionnalits, par exemple la classe Math.

6.7.3. : Initialisation des champs de classe :


Linitialisation des champs usuels (non statiques) est faite la cration dun objet de la classe en 3 tapes : -initialisation par dfaut (int i ;) -initialisation explicite ventuelle lors de la dclaration (int i=0 ;) -initialisation par le constructeur.

Linitialisation des champs statiques est faite avant la cration dun objet de la classe puisquun champ statique ne dpend pas des objets de la classe. Cette

initialisation se fait donc soit la dclaration dun objet de la classe , soit lors de lappel dune mthode statique de la classe et se limite donc aux 2 tapes : -initialisation par dfaut -initialisation explicite ventuelle lors de la dclaration Un champ statique avec lattribut final doit obligatoirement recevoir une valeur initiale au moment de sa dclaration puisquil ne peut tre initialis implicitement, ni tre initialis par un constructeur. Les champs statiques et les mthodes statiques sont allous lexcution. Bloc dinitialisation statique : Dans la dfinition dune classe, il est possible dintroduire un ou plusieurs blocs dinstructions prcds du mot- cl static .

static { .. } Ce bloc statique permet de faire des initialisations de champs statiques qui ne peuvent pas tre faites en une seule expression. En effet, il nest pas possible dutiliser un constructeur qui nest pas concern par linitialisation des champs. Les instructions dun bloc statique nont accs quaux champs statiques de la classe.

6.8. SURDEFINITION (SURCHAGE) DE METHODES : 6.8.1. : Dfinition :


La surdfinition (surcharge) dun symbole conduit plusieurs significations diffrentes du symbole entre lesquelles on choisit en fonction du contexte. Le symbole peut tre un oprateur +(addition, concatnation, etc. ) mais galement en JAVA des mthodes. Les mthodes usuelles et statiques peuvent tre redfinies. Une mthode publique ou prive peut tre redfinie. Plusieurs mthodes peuvent avoir le mme nom condition que le nombre et le type de leurs arguments permettent au compilateur deffectuer un choix, ie condition quelles aient des signatures diffrentes (polymorphismes).
La signature dune mthode est constitue du nom de la mthode suivi de la liste ordonne des types de ses arguments. Le nom des arguments et le type de retour ne sont pas considrs dans la signature.

Les mthodes avec mme signature mais de types de retour diffrents sont interdites.

41

6.9. : TRANSMISSION DINFORMATIONS AVEC LES METHODES : 6.9.1. : Transmission par valeur :
La transmission dun argument une mthode et la transmission du rsultat dune mthode se fait par valeur : la mthode reoit une copie de la valeur de largument effectif.
Cependant, avec une variable de type objet, la mthode reoit une copie de la rfrence. Ainsi, la mthode peut modifier lobjet initial qui na pas t recopi par le biais de ses champs ou de ses mthodes. La mthode appele a accs lobjet par sa rfrence.

Une modification de la rfrence lintrieur de la mthode appele, par exemple une nouvelle instance, nest pas transmise la mthode appelante par ses arguments, il faut utiliser sa valeur de retour.

En conclusion : -la transmission des types primitifs se fait par valeur. -la transmission des objets se fait par rfrence (adresse). Ainsi, une mthode ne peut pas modifier la valeur dun argument effectif dun type primitif (aprs lappel dune mthode).

Moyens pour transmettre la valeur dune variable de type primitif lextrieur de la mthode appele : -retourner la variable pour la mthode elle- mme. -crer un objet et le passer en argument car les mthodes peuvent oprer sur les champs directement ou par le biais de mthodes daccs.

6.9.2. : Transmission dobjet en argument :


Il est possible dutiliser des arguments de type classe.

Excution: Racine1=- 0,21 Racine2=- 4,79 Racine1=- 0,21 Racine2=- 4,79 Nombre de systmes=2 Facteur multiplicatif des coefficients des deux systmes=2.0 ->Crer une mthode statique qui va tester sil y a un facteur multiplicatif entre les coefficients des deux quations. Import java.txt.DecimalFormat ; Class Equation

{ //Mthode de test des coefficients dans deux systmes. //Mthode de classe (indpendante des objets) public static double tesCoefficients(Equation E1, Equation E2) { final double eps=1 E-10 ; double facteur=0.0; facteur=E2.coeffX2/E1.coeffX2; if ((((E2.coeffX1/E1.coeffX1)-facteur)>eps)|| (E2.coeffX0/E1.coeffX0)-facteur)>eps) facteur=0 .0 ; return facteur ; } }

//classe test public class EquationSecondDegre { public { equation uneEquation= new Equation (1.0;5.0,1.0); uneEquation.Rsolution(); uneEquation.affichage(); .. Equation uneEquation1 = new Equation (2.0,10.0,2.0) ; UneEquation1.Rsolution(); UneEquation1.affichage(): . System.out.println( Nombre de systmes= +Equation.nbSystme()) ; .. } }

Une mthode dun objet ou dune classe t (mthode appele pour un objet o) recevant en argument un objet p de la mme classe t, a accs aux champs et mthodes privs de p : lunit d encapsulation est la classe et non lobjet.
Lautorisation daccs concerne tous les objets de la classe et non, seulement, lobjet courant. Une mthode dune classe A recevant en argument un objet de classe B?A, na pas accs aux champs et mthodes privs de B.

6.9.3. :Transmission par valeur de types primitifs :


1re version : class Equation {

43

//Mthode de doublement des coeffs ax^2+bx+c (ne marche pas) public void doublementCoeffs(double a, double b, double c) { a=2*a ; b=2*b ; c=2*c; .

//Mthode principale double cX2=1.0; double cX1=5.0; double cX0=1.0; uneEquation.doublementCoeffs(cX2,cX1,cX0) ; //Transmission par valeur cX2, cX1, cX0 nont pas leurs valeurs doubles. Excution : Equation=1.00*2+5.00+1.00 Racine1=-0,21 Racine2=-4.79 Equation=1.00*2+5.00+1.00 2me version : . a=2*a ; . System.out.println( a= +a+ b= +b+ c= +c) ; Retun a; } }

6.9.4.: Transmission par adresse de la rfrence dun objet :


1 re version avec un seul objet modifi class Equation { public void doublementCoeffs() { coeffX2=2*coeffX2; coeffX1=2*coeffX1; coeffX0=2*coeffX0; }

} Dans le main : uneEquation.doublmentCoeff() ;

2me version avec deux objets : class Equation { public Equation doublementCoeff() { Equation E= new Equation(); E.coeffX2=2*coeffX2; E.coeffX1=2*coeffX1; E.coeffX0=2*coeffX0; Return E ; } } Dans le main : Equation uneEquation1 = uneEquation.doublementCoeff() ;

6.9.5. : Valeur de retour dune mthode :


Linstruction return est suivie dune expression de mme type que celui de la mthode. De plus, elle termine lexcution dune mthode et provoque un retour la mthode dappel (mthode appelante). Il est possible davoir plusieurs return dans une mthode, par exemple en cas dinstructions conditionnelles . De prfrence, un seul return.

Le retour dune mthode se fait par copie : -par valeur pour un type primitif. -par adresse pour un objet (copie de la rfrence).

6.9.6. :Autorfrence this :

45

3 proprits : (1) Le mot-cl this est une rfrence lobjet courant dans sa globalit. (2) this remplace le nom de linstance courante. Exemple :E.coeffX2=2*this.coeffX2 ; (3) utilisation de noms darguments identiques des noms de champs. Cette utilisation permet dviter de crer de nouveau identificateurs. Exemple :this.coeffX2=coeffX2 ; (4) appel dun constructeur au sein dun autre constructeur : Un constructeur peut appeler un autre constructeur de la mme clase ( et portant alors sur lobjet courant), mme le constructeur vide mais pas le constructeur implicite qui disparat ds quun constructeur est cr. Ce constructeur est appel avec un nom de mthode this(), donc suivi de parenthses entourant les arguments dans la premire instruction du constructeur.
This() est remplac par le nom de la classe, donc par un constructeur.

Simplification du programme prcdent en utilisant lappel dun constructeur dans un constructeur : Class Equation { //Constructeur vide public Equation() { this(0.0,0.0,0.0) ; } //Constructeur 3 arguments pour ax2+bx+c public Equation(double X2, double X1, double X0) { coeffX2=X2 ; coeffX1=X1 ; coeffX0=X0 ; nbresolution++ ; } //Constructeur 2 arguments pour ax2+c public Equation (double X2, double X1, double X0) { this(X2,0.0,X0) ; } .. } .

6.10. : RECURSIVITE DES METHODES :


2 types de rcursivit : -rcursivit directe : une mthode comporte au moins un appel elle-mme -rcursivit croise : lappel dune mthode entrane lappel dune autre mthode qui son tour appelle la mthode initiale.
Possibilit de cycles faisant intervenir plus de 2 mthodes.

La rcursivit sapplique aux mthodes usuelles et aux mthodes statiques( de classe).

Programme Factoriel : Package coursjava ; Class util { public static long fac(long n) { if (n>1) return (fac(n-1)*n); else return 1; } } public class Factoriel { public static void main(String[ ] args) { int n; System.out.print(Donner un entier positif); n=Lecture.lireInt() ; System.out.println( Rsultat= +util.fac(n)) ; } } Excution : Donner un entier positif : 10 Rsultat=3628880

/*NON ETUDIE CETTE ANNEE*/

6.11. : CLASSES INTERNES :


Les classes internes sont principalement, mais non exclusivement, utilises en programmation vnementielle. Une classe est interne lorsque sa dfinition est situe lintrieur dune autre classe.
47

class Externe { class Interne { //champs et mthodes de la classe interne } //champs et mthodes de la classe interne } Utilisation de la classe interne dans une mthode de la classe externe : Class Externe { class interne { //Champs et mthodes de la classe interne } //champs et mthodes de la classe externe //mthode de la classe externe public void methodeExterne() { interne i= new interne(); } } Utilisation de la classe interne comme champ de la classe externe: Class externe { class interne { //champs et mthodes de la classe interne //champ de la classe externe private interne i ; }

Liens entre objet interne et objet externe : (1) Un objet dune classe interne est toujours associ au moment de son instanciation un objet dune classe interne qui lui a donn naissance.

(2) Un objet dune classe interne a toujours accs aux champs et aux mthodes (mme privs) de lobjet externe lui ayant donn naissance. (3) Un objet dune classe externe a toujours accs aux champs et aux mthodes (mme privs) de lobjet interne auquel il a donn naissance. Une mthode statique dune classe externe ne peut crer aucun objet dune classe interne car une mthode statique nest associe aucun objet. Une classe interne ne peut pas contenir des champs statiques et des mthodes statiques. Utilisation de la classe interne en dehors de la classe externe. Rfrence un objet de type interne Externe Interne i Cration dun objet de type interne : Externe e= new Externe() I = new e.Interne() Ou Externe.Interne I= new Externe.Interne() // syntaxe particulire de new. Utilisation dune classe interne dans une mthode de la classe externe : Linstanciation dobjet de type interne ne peut se faire que dans la mthode. Utilisation de classe interne statique : La classe interne na plus accs aux champs et mthodes de la classe externe sauf aux champs statiques et mthodes statiques.

6.12. : PACKAGES : 6.12.1. : Dfinition :


Un package est un regroupement logique sous un identificateur commun dun ensemble de classes (bibliothque). Le package permet un classement hirarchique des classes pour : -ranger les classes selon des fonctionnalits communes. -scuriser lutilisation des classes :le risque de crer 2 classes de mme nom se trouve limit aux seules classes dun mme package. Deux classes de mme nom peuvent tre dans 2 packages diffrents. Un package contient des classes et des sous-packages. Le nom du package est en relation avec le nom du rpertoire qui le contient, les niveaux suprieurs pouvant tre quelconques. Exemples :

49

-le package coursjava est plac dans un rpertoire coursjava, par exemple D:\ \coursjava -le sous-package chapitre1 du coursjava est plac dans un rpertoire D:\ \coursjava\chapitre1

6.12.2. :Attribution dune classe un package :


Un package est caractris par un nom qui est : -soit un identificateur, par exemple coursjava -soit une suite didentificateurs spars par des points, par exemple coursjava.chapitre1 Lattribution dune classe un package se fait dans la 1re ligne du fichier source package nom_package Exemples : Package coursjava Package coursjava.chapitre1 Par convention, les noms de package sont en lettres minuscules. La hirarchie des packages se fait du gnral au particulier. Toutes les classes dun mme fichier source appartiennent donc toujours un mme package. Si aucun package nest dclar, les classes du fichier source appartiennent au package par dfaut.

6.12.3. :Utilisation dune classe dun package :


Lors de la rfrence dune classe dans un programme, le compilateur recherche la classe dans le package par dfaut. Pour utiliser une classe appartenant un autre package, il existe 3 possibilits : (1)Donner le nom du package avec le nom de la classe. nom_package.Nom_Classe //classe test public class EquationSecondDegre { //mthode principale public static void main (String [ ] args) { coursjava.Equation uneEquation= new coursjava.Equation(1.0,5.0,1.0); uneEquation.rsolution();

uneEquation.affichage(); . } } Il est inutile de prciser le nom du package pour les champs et les mthodes aprs la cration de lobjet. (2) Importer la classe import nom_package .Nom_Classe en dbut du fichier source. Import coursjava.Equation; //classe Test public class EquationSecondDegre { //mthode principale public static void main (String [ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); } }

(3) Importer le package import nom_package.* en dbut du fichier source import coursjava.Equation; //classe Test import coursjava.*; public class EquationSecondDegre { //mthode principale public static void main (String [ ] args) { Equation uneEquation = new Equation(1.0,5.0,1.0); } } Remarques: (1) import coursjava.* (sans le caractre de substitution*) nimporte que les classes de coursjava et pas les classes des sous-packages ventuels.

51

(2) il nest pas possible dutiliser le caractre de substitution * pour des packages (uniquement pour des classes).

(3) Le compilateur ne compile que les classes utilises dans un package comportant galement des classes inutilises.

6.12.4. : Packages standards :


Packages standards : java.lang, java.awt, java.awt.event, java.swing, etc., Le package standard java.lang est automatiquement import la compilation permettant davoir des classes standards : Math, System, Integer, Double, etc.,

6.12.5. : Porte des classes :


La porte dune classe est dfinie comme la zone dans laquelle la classe est accessible. Cette porte est dtermine par lattribut de porte lors de la dclaration de la classe : -avec lattribut public : la classe est accessible toutes les autres classes. -avec labsence dattribut, la classe nest accessible quaux classes du mme package. Les classes non publiques sont gnralement des classes auxiliaires du package. Lattribut public na pas dimportance quand les classes du projet utilisant le package par dfaut, lexception de la classe contenant main qui doit tre publique pour pouvoir tre reconnue par la machine virtuelle.

6.12.6. : Porte des champs et des mthodes :


-avec lattribut public : les champs et les mthodes sont accessibles depuis lintrieur de la classe. -avec lattribut private : les champs et les mthodes ne sont accessibles quaux mthodes de la classe. -avec labsence dattribut : les champs et les mthodes ne sont accessibles quaux classes du mme package (accs de package). A noter : -avec lattribut protected : les champs et les mthodes sont accessibles aux classes du mme package ainsi qu ses classes drives quelles appartiennent ou non au mme package.

VII. TABLEAUX
7.1. :DECLARATION ET CREATION DE TABLEAUX : 7.1.1 Introduction :
Un tableau est un ensemble dlments de mmes types, dsign par un nom unique. Chaque lment tant obtenu par un indice de position sur cet ensemble. Un tableau est un objet.

7.1.2. : Dclaration dun tableau :


La dclaration consiste donner la rfrence u, tableau. La rfrence un tableau prcise le type des lments du tableau, sans donner de dimension au tableau.(Ceci se fera la cration) La valeur de cette rfrence est nulle. Plusieurs possibilits de dclaration : int t[ ] ou int[ ] t int[ ] t1, t2 est quivalent int t1[ ], t2[ ] Les lments dun tableau peuvent tre de type primitif ou de type objet. Exemple : Equation t[ ] Remarque : Int t[10] est rejet la compilation : Interdiction de donner une dimension.

7.1.3. : CREATION DUN TABLEAU :


i) Cration par loprateur new.

La valeur de lexpression fournie loprateur new nest calcule qu au moment de lexcution (non fixe la compilation) System.out.println( Donner la dimension du tableau : ) ; Int n = Lecture.lireInt() ;

53

Int t[ ] = new int [n] ; Ou Int t[ ]; T= new int [n]; Ou Final int DIM_TAB=5; int[ ]t= new int [DIM_TAB];

La dimension du tableau peut varier dune excution lautre. Une fois lobjet tableau cr, sa taille ne peut plus tre modifie mais sa rfrence peut tre modifie en dsignant dautres tableaux. ii) Cration par initialisation :

Int t[ ] = {1,2,3,4,5} ;

Cration dun tableau de 5 entiers de valeurs respectives 1, 2, 3, 4, 5 et placement de la rfrence dans t.

Double t[ ] = {1.1, 2.2, 3.3 } ; Cration dun tableau de trois rels.

7.2. : UTILISATION DE TABLEAUX : 7.2.1. : Accs individuel aux lments du tableau :


Le premier lment dun tableau a obligatoirement lindice 0. Le dernier lment a pour indice la dimension du tableau diminue de 1. On accde un lment du tableau en suffixant son nom par lindice entre crochets. Lindice peut tre une expression entire. T[i]

Quand la valeur de lindice dpasse lintervalle de la taille du tableau, une exception du type ArrayOutOfBoundsException est dclenche (leve). Accs aux lments du tableau : System.out.println( Donner la dimension du tableau : ) ; Int n= Lecture.lireInt() ; Int t[ ] = new int [n] ; For (int I=0; I<n;I++) =t[I];

7.2.2. : Accs global au tableau (affectation de rfrences) :


Laffectation t1=t2 recopie dans t1 la rfrence contenue dans t2. Les rfrences t1 et t2 dsignent le mme tableau qui tait initialement associ t2. La modification dun lment de ce tableau par la rfrence t1 se retrouvera avec la rfrence t2. Le tableau anciennement rfrenc par t1 est candidat au ramasse-miettes. Laffectation de rfrences de tableaux nentrane aucune recopie des valeurs des lments au tableau, mme situation avec laffectation des objets.

7.2.3. : Taille dun tableau :


Le champ length permet de connatre le nombre d lments dun tableau de rfrence qui volue au cours de lexcution du programme. Length nest pas une mthode. Aucun champ ne devrait tre public. Mais il est impossible de le modifier parce quil est dclar avec le modificateur final. Exemple : For (int i=0 ;i<t.length;I++)

7.3.: TABLEAU DOBJETS:


Programme avec tableau : //classe test public class EquationSecondDegre { //Mthode principale public static void main (String [ ] args)
55

{ Equation systeme [ ] = new Equation [2]; Systme [0]= new Equation (1.0,5.0,1.0); Systme [1]= new Equation (1.0,10.0,1.0);

For (int i=0 ;i<systeme.length;i++) { systeme[i].rsolution(); systeme[i].affichage(); System.out.println(); } System.out.println(Nombre de systmes=+Equation.nbSysteme()); } }

7.4. : TABLEAU EN ARGUMENT :


Comme avec les objets, lorsquon transmet un nom de tableau en argument dune mthode, on transmet une copie de la rfrence au tableau. La mthode agit alors directement sur le tableau (transmission par adresse).

Programme tableau en argument : Package coursjava ; Import java.text.DecimalFormat ; //classe Equation { //Mthode de doublement des coeffs aX^2+bX+c public static void doublementCoeffs(double Coeff[ ]) { for (int i=0 ;i<systeme.length;i++) { coeff[i]=2*Coeff[i]; } }

//class Test public class EquationSecondDegre { //Mthode principale public static void main (String[ ] args) { double coeff[ ]={1.0,5.0,1.0}; Equation systeme[ ]= new Equation[2]; Systeme[0]=new Equation(coeff[0],coeff[1],coeff[2]); Equation.doublementCoeff(coeff); Systeme[1]= new Equation (coeff[0].);

for (int i=0 ;i<systeme.length;i++) { systeme[i].rsolution(); systeme[i].affichage(); System.out.println(); } System.out.println(Nombre de systmes=+Equation.nbSysteme()); } }

7.5.: TABLEAUX MULTIDIMENSIONNELS:


Java ne possde pas la notion de tableaux plusieurs indices. Il simule cette notion avec des tableaux de tableaux, ie des tableaux dont les lments sont des tableaux. Cette possibilit permet de crer des tableaux irrguliers . Par exemple : une matrice triangulaire. Dclaration dune rfrence t un tableau deux dimensions Int t[ ] [ ] Ou Int [ ] t[ ] Ou Int [ ] [ ] t

t est une rfrence un tableau dans lequel chaque lment est lui-mme une rfrence un tableau dentiers.

57

Cration dun tableau deux dimensions : Final int DIM1=3 Final int DIM2=4 t= {new int[DIM1], new int [DIM2]} T[0] est la rfrence au 1er tableau de trois entiers. T[1] est la rfrence au 2me tableau de 4 entiers. T[0] [0] est le 1er entier du 1er tableau. T[1] [0] est le 1er entier du 2me tableau. Un tableau a un champ length qui est gal sa dimension sil est mono dimensionnel et sa premire dimension sil est multidimensionnel. t.length=2 t[0].length=3 t[1].length=4

Exemple : Cration dune matrice triangulaire: Int t[ ] [ ] = new int [NLIG] [ ] For (int I=0; I<T.length;I++) { t[I]= new int [I+1];

Initialisation dun tableau multidimensionnel: Int t[ ] [ ] = { { 1,2,3},{1,2,3,4}} ;

Accs aux lments dun tableau multidimensionnel : For (int I=0; I<T.length;I++) { For (int j=0; j<t[I].length;j++) { t[I] [j]; } }

Dclaration et cration dun tableau rgulier deux dimensions:

Int t[ ] [ ] = new int [NLIG] [NCOL] Ou Int t[ ]; T=new int [NLIG] [NCOL] Ou Int t[ ] [ ] = new int [NLIG] [ ] ; For (int I=0; I<length;I++) { t[I]= new int [NCOL]; }

VIII. HERITAGE:
8.1.: INTRODUCTION:
Lhritage permet dutiliser des classes, rendant ainsi le dveloppement des programmes plus rapide, sr et lisible. Il permet de dfinir une nouvelle classe dite classe drive (sous-classe ou classe descendante), partir dune classe existante dite classe de base (super-classe ou classe ascendante). /*Cette classe drive hrite des champs et des mthodes privs et publics.*/ Elle ne peut modifier que les champs et mthodes publics. Elle peut possder de nouveaux champs et mthodes. Le mot-cl extends permet de dfinir une sous-classe.

8.2. ACCES DUNE CLASSE DERIVEE AUX MEMBRES DE SA CLASSE DE BASE :


Les membres (champs et mthodes) publics de la classe de base restent des membres publics de la classe drive. Une mthode dune classe drive a accs aux membres publics de sa classe de base. Une mthode dune classe drive na pas accs aux membres privs de sa classe de base (principe dencapsulation). Possibilit davoir une classe de base sans constructeur et avec une classe drive sans/avec constructeur.

59

8.3. :CONSTRUCTION ET INITIALISATION DES OBJETS DERIVES : 8.3.1. : Appel du constructeur :

(i)

Rappel de lappel du constructeur dans le cas dune classe simple (non drive)

-cration dun objet par new sans argument : appel du pseudo-constructeur par dfaut (la classe ne comporte aucun constructeur) -cration dun objet par new avec argument : appel du constructeur ayant la mme signature (nombre et type des arguments).

(ii)

Cas dune classe de base avec un constructeur et une classe drive avec un constructeur :

Pour initialiser des champs de la classe de base encapsuls (attibut private), la classe drive doit possder des mthodes daltration ou utiliser le constructeur de la classe de base. Le constructeur de la classe drive doit prendre en charge lintgralit de la construction de lobjet.

Un constructeur dune classe drive appelle un constructeur dune classe de base avec sa 1re instruction. Le constructeur appel est dsign par le mot-cl super suivi ventuellement de ses arguments entre parenthses. //classe drive class ClasseDerivee extends Equation { public ClasseDerivee(double a, double b, double c) { super(a,b,c) ; } } Le mot-cl this permet dappeler dans un autre constructeur de la mme classe. Comme this et super doivent correspondre la 1re instruction du constructeur, il nest pas possible dutiliser simultanment this et super.

Lappel par super ne concerne que le constructeur de la classe de base de niveau immdiatement suprieur. Classe de base sans constructeur : Class A { //sans constructeur .. } class B extends A { public B() { super(); . } } Lappel super() est non obligatoire. Classe drive sans constructeur Il y a appel du pseudo-constructeur par dfaut sans argument . Dans le cas dune classe simple, ce pseudo-constructeur ne fait rien. Dans le cas dune classe drive, ce pseudo-constructeur appelles un constructeur sans argument de la classe de base.

Soit le pseudo-constructeur par dfaut sans argument de la classe de base : Class A { //Pas de constructeur .. } class B { // Pas de constructeur } La construction dun objet de type B, B b=new B(), entrane lappel du constructeur par dfaut de A.

Soit le constructeur public sans argument de la classe de base : Class A { // constructeur1


61

public A() {} //constructeur2 public A(int n) {.} } class B extends A { // pas de constructeur } Le constructeur dun objet de type B, B b=new B() entrane lappel du constructeur sans argument de A.

Class A { //constructeur2 public A (int n) {..} .. } class B extends A { // pas de constructeur } La construction dun objet de type B entrane une erreur de compilation car le consructeur par dfaut cherche appeler un constructeur sans argument de A qui nexiste pas. Il ne peut galement pas appeler le constructeur par dfaut de A puisquil existe un constructeur avec argument. De prfrence, dfinir systmatiquement un constructeur vide dans chaque classe.

8.3.2. : Initialisation dun objet driv :

Rappel sur les phases de cration dun objet de classe simple : -allocation mmoire -initialisation par dfaut des champs -initialisation explicite des champs -excution des instructions du constructeur.

Phases de cration dun objet de classe drive avec class B extends class A : -allocation mmoire de lobjet de type B : champs hrits et champs propres. -initialisation par dfaut de tous les champs (hrits de A et propres B) de B aux valeurs nulles . -initialisation explicite des champs hrits. -excution des instructions du constructeur de A -initialisation explicite des champs propres -excution des instructions du constructeur de B

8.4. : DERIVATION SUCCESSIVES :


Chaque classe ne peut avoir quune super-classe (pas dhritage multiple) mais peut avoir plusieurs sous-classes.

63

Class Point { private int x,y ; public Point(int x, int y) { this.x=x ; y=y; } public Point() { this(0.0); } } class Cercle extends Point { .; }

public class Test {

public static void main(String [ ] args) { Point p,p1; Cercle c, c1 ; P=new Point(10,20) ; C=new Cercle(30,40,50); P1=c; //affecte la rf. De la classe drive Cercle la rf. De la super-classe Point

C1=(Cercle)p1 ; // remplacement du type de la rf. De la super classe Point par la rf. De la classe drive Cercle. C1=(Cercle)p ; //Erreur dexcution. If (p instanceof Cercle) c1=(Cercle) p ; Else System.out.println( p ne rfrence pas un cercle ) ; }

8.5. :REDEFINITION ET SURDEFINITION DE MEMBRES : 8.5.1. : Redfinition de mthodes :


Surdfinition de mthodes lintrieur de la mme classe= mthodes de mme nom mais de signatures diffrentes.

La surdfinition permet de cumuler plusieurs mthodes de mme nom.

Redfinition de mthodes dans une classe drive = mthodes de mme nom ( surdfinition), de mme signature et de mme type de valeur de retour. La redfinition permet de substituer une mthode par une autre. Une classe drive permet de redfinir une mthode de sa classe de base ou plus gnralement dune classe ascendante, en masquant la mthode de la classe de base. La redfinition dune mthode sapplique une classe et toutes ses descendantes jusqu ce que lune dentre elles redfinisse ventuellement, nouveau, la mthode.

Exemple :

65

Pour appeler la mthode affichage de la classe de base, il faut prfixer affichage par le mot super.

8.5.2. :Surdfinition (surcharge ) de mthodes :


Une classe drive peut surdfinir une mthode de sa classe de base ou plus gnralement dune classe ascendante.

Class A { public void m (int n) { .. } . } class B extends A { public void m(double x) { . } }

A a; B b; int n; double x; a.m(n); appel de m(int n) a.m(x) ; arreur de compilation b.m(n) ; appel de m(int n) b.m(x) ;appel de m(double x).

8.5.3. : Utilisation simultane de redfinition et de surdfinition :


Peut conduire des rsultats complexes.

8.5.4. :Contraintes portant sur la redfinition :


Valeur de retour : Lors de la surdfinition dune mthode, il nest pas ncessaire de respecter le type de la valeur de retour. Lors de la redfinition dune mthode, il faut respecter le type de la valeur de retour.

Droits daccs : La redfinition dune mthode ne doit pas diminuer les droits daccs cette mthode. Elle peut les augmenter, ie tendre sa zone de lisibilit.

8.5.5. : Rgles surdfinition :

gnrales

de

redfinition

et

de

Rgles de redfinition dune mthode dune classe ascendante par une classe drive. -mme signature. -valeurs de retour des deux mthodes de mme type. -droits daccs de la mthode de la classe drive au moins suprieure .

8.5.6. :Duplication des champs :


Une classe drive peut dfinir un champ portant le mme nom quun champ dune classe ascendante.

8.6. : POLYMORPHISME : 8.6.1. : Dfinition :


Le polymorphisme permet de manipuler des objets sans en connatre totalement leur type dans un contexte dhritage.(de classes drives) Chaque objet ragit en fonction de son propre type. A une variable objet peut tre affecte une rfrence un objet du type correspondant mais galement une rfrence un objet de type driv. conversion implicite dune rfrence un type classe T en une rfrence un type ascendant de T.

67

Le choix dune mthode lors de lexcution sappelle ligature dynamique (liaison dynamique). Le polymorphisme se gnralise une hirarchie de plusieurs classes.

8.6.2. :Polymorphisme et gestion dun htrogne :

tableau

Le polymorphisme permet de grer un tableau htrogne, ie dans lequel les lments peuvent tre de types diffrents. Package coursjava ; Class Equation { ... public void affichage() { .. } } //Classe drive class ClasseDrive extends Equation. { .. //Mthode daffichage public void affichage() .. //Classe Test public static void main (String[ ] args) { Equation systme[ ]=new Equation [2]; Systeme[0]=new Equation(1.0,5.0,1.0); Systeme[1]=new ClasseDerivee(2.0,10.0,2.0); For(i==0;i<systeme.legth;i++) { systeme[i].rsolution; systeme[i].affichage; System.out.println(...); Execution: Equation=1.00*x2+5.00x+1.OO Racine1=-0,21

Racine2=-4,79

8.6.3. : Polymorphisme et absence de mthode dans une classe drive.


Package coursjava ; Class Equation { ... public void affichage() { } } class ClasseDerivee extends Equation { //public void affichage() //{ //System .out.println( Equation 2nd degre); //super.affichage(); //} } Pour classe Test pareil quavant

8.6.4. : Polymorphisme et structuration des objets :


Le polymorphisme permet de structurer les objets avec des mthodes communes au niveau des classes ascendantes et des mthodes spcifiques au niveau de toutes les classes (ascendantes et descendantes). Les mthodes communes qui ne sont pas redfinies dans les classes descendantes, appellent les mthodes spcifiques. Mais, seule la mthode spcifique de la classe correspondant lobjet est effectivement appele (celui de rfrence this).

Package coursjava ; Import java.text ;DecimalFormat ; //Classe Equation class Equation

69

{ public void affichageCommun() { affichageSpcifique; ... } public void affichageSfcifique() { System.out.println( Equation du 2nd degr ) ; } } class ClasseDrive extends Equation { public ClasseDrive (double a, double b, double c) { super(a,b,c) ; } public void affichageSpcifique() { System.out.println( Equation du second degr de la classe drive ) ; . }

8.6.5. : Polymorphisme et surdfinition :


Le polymorphisme se fonde classiquement sur la redfinition de mthodes. Mais, il peut galement se baser sur la modification de mthodes pouvant conduire des situations complexes. /*NE PAS APPRENDRE

8.6.6. : Rgles du polymorphisme :


Compatibilit : Il existe une conversion dune rfrence un objet de classe T en une rfrence un objet dune classe ascendante de T. Cette conversion intervient aussi bien dans les affectations que les arguments effectifs. Ligature dynamique : Dans un appel de la forme x.f() o x est suppos de classe T, le choix de f est dtermin de la faon suivante :

-A la compilation : On dtermine dans la classe T ou ses ascendantes, la signature de la meilleure mthode f convenant lappel, dfinissant ainsi le type de la valeur de retour.

-A lexcution : On recherche la mthode f de signature et de type de retour voulus, partir de la classe correspondant au type effectif de lobjet, rfrenc par x. Cet objet est obligatoirement de type T ou descendant. Si cette classe ne comporte pas de mthode approprie, on remonte dans la hirarchie jusqu ce que lon en trouve une, la limite on remonte jusqu T. */

8.6.7. : Oprateur instanceof :


Loprateur binaire instanceof prend un objet comme 1er oprande et une classe comme 2e oprande. Le rsultat vaut true si lobjet est une instance de la classe et false dans le cas contraire.

Exemple : Equation p =new Equation(1.0,5.0,1.0); If (p instanceof Equation) System.out.println(OK);

8.6.8.: Mot-cl super:


Le mot-cl super permet daccder une mthode dune classe de base.

8.7. : SUPER CLASSE OBJET : 8.7.1. : Dfinition :


Il existe 3 types de classe : -les classes simples : -les classes drives -la super classe Objet dont drive implicitement toutes les classes simples. Class Equation { } est quivalent : class Equation extends Objet { . }

71

8.7.2.: Utilisation dune rfrence de type Object:


Une variable de type Object peut tre utilise pour rfrencer un objet de type quelconque. Equation uneEquation =new Equation(1.0,5.0,1.0) ; Object o; o=uneEquation; Cette particularit peut tre utilise pour manipuler des objets dont on ne connat pas le type exact un certain moment. Cependant, pour appliquer une mthode prcise un objet rfrenc par une variable de type Object, il faut effectuer une conversion puisque la mthode nexiste pas dans la classe Object. Equation uneEquation =new Equation(1.0,5.0,1.0) ; Object 0; 0=uneEquation; ((Equation)0).affichage() ; //OU Equation uneAutreEquation = (Equation)0 ; UneAutreEquation.affichage() ;

8.7.3. : Utilisation de la mthode toString de la classe Object :


La mthode toString fournit un objet de type String avec une chane de caractres contenant : -le nom de la classe concerne (correspondant lobjet rfrenc) mme si la mthode toString na pas t redfinie. -ladresse de lobjet en hexadcimal prcde de @. //Classe Test public class EquationSecondDegre { //Mthode principale public static void main(String[ ] args)

{ Equation systeme[ ]= new Equation[2]; Systeme[0]=new Equation(1.0,5.0,1.0); Systeme[1]=new ClasseDrive(2.0,10.0,2.0); System.out.println(Sysqteme[0]=+Systeme[0].toString()); System.out.println(Sysqteme[1]=+Systeme[1].toString()); . Excution : Systeme[0]=coursjava.Equation@310d42 Systeme[1]=coursjava.ClasseDrive@5d87b2 Il est possible de redfinir la mthode toString dans une classe donne. La mthode toString dune classe possde galement la proprit dtre automatiquement appele en cas dune conversion implicite en chane avec loprateur+ comportant un oprande de type chane. Cette conversion est indpendante du type de la rfrence o et du type de lobjet effectivement rfrenc par o. Class ClasseDrive extends Equation { .. public String toString() { return Redfinition de la mthode toString; }

8.7.4. : Utilisation de la mthode equals de la classe Object :


La mthode equals compare les adresses de 2 objets : 01equals(02) Il est possible de redfinir la mthode equals dans une classe donne. System.out.println( Egalit des adresses= +systeme[0].equals(systeme[1]) ; Class Equation { .. public boolean equals(classeDrive e) { return ((coeffX2==e.coeffX2) && (coeffX1==e.coeffX1)

73

&& (coeffX0==e.coeffX0); } } ......

8.7.5. : autres mthodes de la classe Object :


protected Object . protected void finalize() public final class getclass()

8.7.6.: Tableaux et classe Object:


Les tableaux ne possdent quune partie des proprits des objets. Un tableau peut tre considr comme appartenant une classe drive de Object.

Object o ; o=new int[5] ; Le polymorphisme sapplique aux tableaux : Si la classe B drive de la classe A, un tableau de B est compatible avec un tableau de A. Class B extends A { } A=tA[ ]; B=tB[ ]; tA=tB ; //La rciproque est fausse Il est impossible de driver une classe dune hypothtique classe tableau Class impossible extends int[ ]

8.8.: CLASSES ET METHODES FINALES:


Rappel :

Le mot-cl final appliqu des variables locales ou des champs dune classe, interdit la modification de leur valeur. Une mthode dclare final ne peut pas tre redfinie dans une classe. Une classe dclare final ne peut plus tre drive. Classe non finale + mthode finale # classe finale

Avantages :

-dtection derreur la compilation et non lexcution. -optimisation du code


Inconvnients :

-impossibilit de modification du code.

8.9. :CLASSES ABSTRAITES : 8.9.1. : Dfinition :


Une classe abstraite est une classe qui ne permet par dinstancier des objets. Elle sert de classe de base pour une drivation Abstract class A { .. } Une classe abstraite comporte des champs et des mthodes. Certaines mthodes peuvent tre abstraites. Une mthode abstraite comporte uniquement un en-tte. Le corps de sa mthode nest pas dfini et est remplac par un point-virgule. Abstract class A { public void rsolution() { } public abstract void affichage() ; .. } Dclaration : A a ; Instanciation impossible. A=new A() ; //pas possible

75

Pour crer des objets, il faut crer une sous-classe dans laquelle toutes les mthodes abstraites sont dfinies.

Cette classe qui nest plus abstraite peut tre instancie.

Drivation : Class B extends A { public void affichage() { } } Instanciation : B b= new B(..) ; Egalement possible: A a = new B(..);

8.9.2.: Proprits:
Une classe qui possde au moins une mthode abstraite est abstraite : Linstanciation est impossible. Elle devrait tre dclare avec le mot-cl abstract mme si cette dclaration nest pas obligatoire. Une mthode abstraite doit obligatoirement tre dclare publique.
Dans len-tte dune mthode abstraite, les arguments formels doivent tre prsents mme sils nont aucune utilit.

Une classe drive dune classe abstraite ne doit pas obligatoirement redfinir toutes les mthodes abstraites de la classe de base. Une classe drive qui comporte des mthodes abstraites de la classe de base non redfinies, reste abstraite.

Une classe drive dune classe non abstraite peut tre dclare abstraite et/ou contenir des mthodes abstraites. Cette proprit est utilise implicitement puisque toutes les classes drivent de Object.

8.9.3. : Objectifs des classes abstraites :


Les classes abstraites constituent une technique importante en POO. Une classe abstraite permet de dfinir dans une classe de base, les mthodes communes aux diffrentes sous-classes tout en leur imposant de redfinir les mthodes spcifiques. (sous-entendu dans les classes drives). Linstanciation de cette super classe abstraite nest pas possible, garantissant la scurit davoir toutes les mthodes compltement dfinies.

8.10. : INTERFACES : 8.10.1. : Introduction :


Linterface possde un niveau dabstraction suprieur la classe abstraite. Contrairement la classe abstraite, linterface est caractris par : -des mthodes uniquement abstraites (aucune implmentation de mthodes). -aucun champ, lexception des constantes.

8.10.2. : Proprits :
Une classe peut implmenter plusieurs interfaces alors quune classe ne peut driver que dune seule classe abstraite. Le concept dinterface se superpose celui de drivation et non sy substitue. Une interface peut se driver. Il est possible dutiliser des variables dinterface. Il est impossible de crer des objets de type interface.

8.10.3. : Dfinition dune interface :


La dfinition dune interface utilise le mot-cl interface la place de class. -les mthodes des interfaces sont abstraites(pas de dfinition de mthodes), et publiques.(redfinitions ultrieures) Ainsi, les mot-cls public et abstract peuvent tre omis. Exemple :

77

Public interface I { public abstract void rsolution() ; public abstract void affichage() ; } Une interface a les mmes droits daccs quune classe. En gnral, une interface est publique.

8.10.4 : Implmentation dune interface :


Une classe implmente une interface en utilisant le mot-cl implements Class A implements I { //Redfinition de rsolution(); //Redfinition de affichage() ; } Il est impossible de diffrer les dfinitions de rsolution et affichage, comme on pourrait le faire avec une classe abstraite. Une mme classe peut implmenter plusieurs interfaces. Public interface I1 { void rsolution() ; } public interface I2 { void affichage(); } class A implements I1,I2 { //Redfinition de rsolution(); //Redfinition de affichage() ; }

8.10.5. :Variable de type interface et polymorphisme :


Il est possible de dfinir des variables de type interface. Public interface I { .

} Ii ; Il est impossible dinstancier une interface, comme avec la classe abstraite. Ainsi, il est impossible daffecter i une rfrence un objet de type I. Il est possible daffecter nimporte quelle rfrence un objet dune classe implmentant linterface I. Cette classe peut tre quelconque, non ncessairement lie par lhritage, du moment qu elle implmente linterface I. Public interface I { } class A implements I { . } I i = new A ();

8.10.6.: Interface et classe drive :


Le concept dinterface est indpendant du concept dhritage. Une classe drive peut implmenter une ou plusieurs interfaces.

8.10.7. : Interface et constante :


Une interface peut contenir des expressions constantes qui seront accessibles toutes les classes implmentant linterface. Par dfinition, les expressions constantes sont static et final. Ainsi, les mot-cls static et final peuvent tre omis. //Interface interface EquationGeneral { static final int N=10; } //Interface interface EquationGeneral { int N=100;

79

} Evidemment, les constantes sont galement accessibles en dehors de toute classe implmentant linterface. EquationGeneral N Dans une interface, les mthodes doivent tre implmentes dans les classes alors que les constantes sont utilisables par les classes.

/*NE SERA PAS UTILISE*/

8.10.8. : Drivation dune interface :


Une interface peut tre une gnralisation dune autre interface en utilisant le motcl extends : drivation dinterface ou hritage dinterface. Interface I1 { static final int N=1 ; void rsolution(); } interface I2 extends I1 { static final int M=100; void affichage(); } La drivation des interfaces revient concatner les dclarations des interfaces . La dfinition de I2 est donc quivalente. interface I2 { static final int N=10 ; static final int M=100; void rsolution(); void affichage(); }

8.10.9. : Conflits de nom (lors de la drivation dinterface)


interface I1 {

void f(int n) ; void g(); } interface I2 extends I1 { void f(double x); void g() ; } class A implements I1, I2 { .. } La classe A peut implmenter les 2 interfaces en redfinissant les 2 mthodes void f(int) et void f(double) mais une seule mthode void g(). interface I1 { void f(int n) ; void g(); } interface I2 extends I1 { void f(double x); int g() ; } class A implements I1, I2 { .. } IMPOSSIBLE : on ne peut pas avoir dans la mme classe 2 mthodes g() : une dfinissant void et lautre int. -> Question de polymorphisme.

8.11. CLASSES ENVELOPPES :


Les classes enveloppes permettent de convertir les types simples en type objets. Elles permettent davoir des mthodes et de compenser le fait que les types primitifs ne soient pas des classes. Les classes enveloppes sont les suivantes : Boolean, Byte, Character, Short, Integer, Long, Float et Double.
81

Construction dune classe enveloppe : ClasseEnveloppe(typeSimple) Exemples : Integer iObj= new Integer(10) ; Double dObj= new Double(10.1) iObj contient la rfrence un objet de type Integer encapsulant lentier 10.

Mthode permettant de retrouver la valeur dans le type primitif mthode rciproque) TypeSimpleValue()

Exemples : int i= iObj.intValue(); //i=10 double d= dObj.doubleValue(); //d=10.1

La mthode typeSimpleValue() permet de faire des conversions entre les diffrents types numriques (pas le boolen) Integer iObj= new Integer(10) Double d=iObj.doubleValue() ; Int i=iObj.intValue(10)

8.12. : QUELQUES REGLES POUR LA CONCEPTION DE CLASSES :


Lhritage cre une relation de type est : Si T drive de T, alors un objet de type T peut tre considr comme un objet de type T. public->private La classe cr une relation de type a : Si la classe T possde un champ de type U, alors un objet de type T possde un champ qui est un objet de type U. /*Pas tudi*/

8.13.CLASSES ANONYMES :
Une classe anonyme est une classe sans nom temporaire.

Les classes anonymes sont principalement utilises avec la gestion des vnements (couteurs dvnements).

(i) Classe anonyme drive dune classe Aa; A=new A() { //Champs de la classe anonyme drive de A //Mthodes de la classe anonyme drives de A. .. }; quivalent : class A1 extends A { } A1 a =new A1(); Une classe anonyme ne peut pas introduire de nouvelles mthodes Il est impossible de dfinir plusieurs rfrences classe anonyme. (ii) Classe anonyme implmentant une interface.

IX . CHAINES DE CARACTERES.
9.1. : CHAINES DE CARACTERES (OBJET DE TYPE STRING) : 9.1.1. :Introduction :
La classe standard String permet de manipuler des chanes de caractres (cdc). Les cdc sont des objets de type String : Elles ne sont pas des variables de type primitif. Dclaration : String ch Ch est destine contenir une rfrence un objet de type String. Cration automatique :

83

La notation Java dsigne un objet de type String cr automatiquement par le compilateur. String ch= java ; La classe String possde 2 constructeurs: -un constructeur vide crant une chane vide : String ch1 =new String() -un constructeur avec un argument de type String : String ch2=new ( java ) ; String ch3=new String(ch2) : ch3 contient la rfrence une chane copie de ch2. Bien que les chanes soient des objets, elles se manipulent comme des donnes de type primitif. Il nest donc pas ncessaire dutiliser loprateur new.

9.1.2. : Valeur dun objet de type String :


Un objet de type String nest pas modifiable.(jamais) Les rfrences des objets de type String peuvent tre modifies. on peut modifier les rfrences mais jamais le contenu. On recopie la chane (avec StringBuffer) quand on a une grande chane ; on nutilise jamais la classe String. ChTemp=ch1 ; Ch1=ch2 ; Ch2=chTemp;

9.1.3.: Entres/Sorties de chanes :


La mthode println permet dafficher des chanes. System.out.println( java ) ; System.out.println( ch ) ; Comme pour les autres types primitifs, il nexiste pas de mthode standard permettant de lire une chane au clavier.

9.1.4. : La mthode de longueur de chane : length() :


La mthode length() retourne le nombre de caractres de la chane. Int i=ch.length() ; Int i=ch.length( ) ; // i donne la longuer de ch dfini. // i=0;

Int I=ch.length(java);

// i=1;

La longueur dun tableau est donne par le champ length.

9.1.5. : La mthode d accs aux caractres dune chane :charAt :


Les caractres dune chane sont indics de 0 (ch.length()-1) , String ch= java ; C=ch.carAt(0); //c=j C=ch.charAt(ch.length()-1) ; c=a

9.1.6.: Loprateur de concatnation de chanes + :


Loprateur + permet la concatnation de 2 chanes (objet de type String ou constante chane) en crant une nouvelle chane (un nouvel objet de type String). Loprateur + est associatif : .+..+

9.1.7. :Conversion des oprandes de loprateur + :


Loprateur + peut tre utilis avec un oprande de type primitif et un oprande de type chane. La valeur de loprande de type primitif est automatiquement convertie en chane.

9.1.8. : Loprateur de concatnation de chane +=.


Loprateur de concatnation de chane += sapplique quand le 1er oprande est de type chane. String ch= langage; Ch+= java;

// ch=langage java

9.2. :METHODE DE RECHERCHE DANS UNE CHAINE : INDEXOF()


85

La mthode indexOf() de la classe String permet de trouver la 1re occurrence dun caractre ou dune sous-chane donne en argument, dans une chane.

Elle retourne : -lentier associ lindice du 1er caractre de la sous-chane si elle est trouve. -la valeur 1 sinon. Public int indexOf(String str) String ch=java; Int I=ch.indexOf(j); //I=0 String Int I=ch.indexOf(j); //I=0

on peut passer java en type chane ou en type

Public int indexOf(String str, int fromIndex) Cette mthode permet de trouver la 1re occurrence dun caractre ou dune sous-chane donne en argument, partir dune position donne en 2 argument dune chane. String ch=java; Int I=ch.indexOf(v); //I=2 Int I=ch.indexOf(v,3); //I=-1

La mthode lastIndexOf() effectue les mmes recherches que la mthode indexOf() mais en analysant la chane depuis sa fin. Public int lastIndexOf (String str) Public int lastIndexOf (String str, int fromIndex)

9.3.: METHODES DE COMPARAISON DE CHAINES :

9.3.1. : Les oprateurs == et != :


voir manuel
Comme les chanes sont des objets, les oprateurs == et != comparent les rfrences donnes comme oprandes..

Remarque (QUESTION EXAM ??) : == et != ne fonctionnent pas pour comparer 2 chanes -> utiliser alors la mthode equals(). Equals sur quelque chose qui nest pas un objet de type String, il faut alors redfinir la mthode equals de la super classe objet comme on le fait pour la mthode toString().

9.3.2. : La mthode de comparaison de 2chanes : equals() :


La mthode equals() de la classe String compare le contenu de 2 chanes. Public boolean equals(String anotherString) Ch1.equals(ch2); Ch1.equals(java); La mthode equalsIgnoreCase() compare le contenu de 2 chanes sans distinguer les majuscules des minuscules. Public boolean equalsIgnoreCase(String anotherString)

Remarque: Object o; o.equals() ; //mthode equals de Object. // comparaison de rfrences. String ch ; Ch.equals() //mthode equals de String. //comparaison de valeurs.

9.9.3. : La mthode de comparaison de 2 chanes compareTo() :


La mthode compareTo() de la classe String compare lexicographiquement le contenu de 2 chanes. Elle retourne : - un entier ngatif si la chane prcde largument chane. - Un entier nul si la chane et largument chane sont gaux. - Un entier positif si la chane suit largument chane. Public int compareTo(String anotherString)

87

9.4.: MODIFICATION DE CHAINES:


->elle est modifie, mais cration dune nouvelle chane : il y aura 2 chanes

9.4.1. : La mthode de remplacement de caractres replace() :


La mthode replace de la classe String remplace toutes les occurrences dun caractre donn par un autre en crant une nouvelle chane. Public String replace(char oldChar, char newChar)

9.4.2.: La mthode dextraction de sous- chane : subString() :


La mthode subString() de la classe String cr une nouvelle chane en extrayant de la chane courant : -soit tous les caractres depuis une position donne public String subString (int beginIndex) -soit tous les caractres compris entre 2 positions donnes, la 1re position tant incluse et la 2me position tant exclue. Public String subString(int beginIndex, int endIndex)

9.4.3.:La mthode de passage en majuscule ou minuscule : toLowerCase() et toUpperCase() :


La mthode toLowerCase de la classe String cr une nouvelle chane en remplaant toutes les majuscules par leur quivalent en minuscules. Public String toLowerCase()

La mthode toUpperCase() de la classe String cr une nouvelle chane en remplaant toutes les minuscules par leur quivalent en majuscules. Public String toUpperCase()

9.5.TABLEAU DE CHAINES:
Il est possible de crer des tableaux dobjets, donc en particulier des tableaux de chanes. Public static void main(String args [ ]) { String tabCh [ ]={Fortran,Pl1,....); for(int i=0;i<tabCh.length;i++) System.out.println(tabCh[i]); } Excution: Fortran Pl1 ....

Public static void main(String args [ ]) { String tabCh [ ]={Fortran,Pl1,....); for(int i=0;i<tabCh.length;i++) { for(int j=0;j<tabCh[i].length(); j++) System.out.println(tabCh[i].charAt(j)); System.out.println(); } }

Mme excution
Remarque : (QUESTION EXAM ??) Si on a un tableau de chanes (de type char) ou une chane. ->Quelle version choisir. Si oui pourquoi ? on ne prend en aucun cas, PLUS un tableau de caractres (car limit) -> remplac par le type chane (grce toutes les mthodes dj implmentes et pas de problme de limite).

9.6. : CONVERSIONS ENTRE CHAINES ET TYPES PRIMITIFS :

89

9.6.1 : Conversions dun type primitif ou objet, en une chane :


Loprateur + convertit nimporte quel type primitif ou objet, en une chane . Une telle conversion peut tre effectue directement par la mthode statique ValueOf de la classe String : Public static String valueOf(Type_primitif p) Public static String valueOf( Object obj) Exemples: String ch=String.valueOf(p); String ch=String.valueOf(obj);

cest une mthode statique.Donc on appelle String.

Laffectation : ch=String.valueOf(n) est quivalente : ch= +n ; (utilisation artificielle dune chane vide pour la conversion de loprateur +)

Lexpression : String.valueOf(obj) est quivalente : Obj.toString()

Comme les types primitifs possdent des classes enveloppes, lexpression String.valueOf(n) Est quivalente Integer(n).toString(n)
Remarques :

La conversion dun type primitif ou objet, en une chane, aboutit toujours . La conversion dun rel flottant en chane peut conduire garder ou perdre le symbole puissance E.

9.7. :CONVERSIONS ENTRE CHAINES ET TABLEAUX DE CARACTERES :

9.7.1. : Conversion dun tableau de caractres en chane :


On utilise le constructeur de la classe String Public String(char[ ] value)

Exemple: Char tab[ ] ={j,a,V,a};

String ch= new String(tab); Autre constructeur de la classe String qui ne considre quun certain nombre de caractres partir dune position donne. Public String (char[ ] value, int offset, int count)

9.6.2.: Conversion dune chane en type primitif:


La conversion dune chane de type primitif fait appel une mthode de la classe enveloppe associe au type primitif. La conversion naboutit pas systmatiquement (exception de type NumberFormatException).

Pour la classe enveloppe Integer : Public static int parseInt(String s) throws NumberFormatException Exemple: int n = Integer.parseInt(s); Pour la classe enveloppe Long: Public static long parseLong(String s) throws NumberFormatException Pour la classe enveloppe Double: Public static double parseDouble(String s) throws NumberFormatException

Remarques:

-Le signe + nest pas accept par les mthodes de conversion en entier. -le signe + est accept par les mthodes de conversion en rel.

9.7.2. : Conversion dune chane en tableau de caractres :


On utilise une mthode de la classe String : Public char[ ] toCharArray()

Exemple: String ch;

91

Char tab[ ] = ch.toCharArray(); Autre mthode de la classe String: Public void getChars(int scrbegin, int scrEnd, char[ ] dst, int dstBegin)

9.8.:ARGUMENTS DE LA LIGNE DE COMMANDE:


Len-tte de la mthode main se prsente de la faon suivante : Public static void main(String[ ] args) { ; }

La mthode main reoit un argument de type tableau de chanes, destin contenir les ventuels arguments fournis au programme lors de son lancement partir dune ligne de commande. Technique utilise avec les environnements de dveloppement intgr.

9.9. :LA CLASSE StringBuffer :


->utilise quand on a une longue chane. Les objets de type String ne sont pas modifiables. Leur manipulation conduit la cration de nouvelles chanes. Dans les programmes manipulant intensivement les chanes, il existe une perte de temps importante. La classe StringBuffer permet de manipuler les chanes en modifiant les objets

3 constructeurs : public StringBuffer() public StringBuffer(int length) public StringBuffer(String s) Cration dun objet de type StringBuffer partir dun objet de type String: String ch ; StringBuffer chBuf=new StringBuffer(ch) ; |->pour le rendre modifiable Principales mthodes de la classe StringBuffer :

-append() : -charAt() : -delete() : -deleteCharAt() : -getChars() : -insert() : -length() : -replace() : -reverse() : -setCharAt() : -setLength() : -subString() : -toString() :

ajout dune chane en fin. accs un caractre de rang donn. suppression dune sous-chane. suppression dun caractre. copie dune sous-chane dans un tableau de caractres.. insertion dune chane une position donne. longueur de la chane de type StringBuffer. remplacement dune sous-chane par une autre. renverse la chane. modification dun caractre de rang donn. fixe la longueur de la chane de type StringBuffer. retourne une sous-chane. conversion en objet de type String.

XI. LES FLUX

11.1 : INTRODUCTION :
Java utilise la notion de flux (canal) Un flux de sortie est un canal quelconque capable de recevoir de linformation sous forme dune suite doctets : priphrique daffichage, fichier, connections un site distant, un emplacement en mmoire centrale. Un flux dentre est un canal quelconque capable de dlivrer de linformation sous forme dune suite doctets : priphrique de saisie, fichier, connexion un site distant, un emplacement en mmoire centrale. Un flux binaire transmet linformation sans modification de la mmoire au flux et rciproquement. Un flux texte transmet linformation avec modification appele formatage pour que le flux reoive ou transmette une suite de caractres, par exemple la mthode println ralise un tel formatage.

11.2. : LES FLUX TEXTE.


93

11.2.1. : Gnralits :
Un fichier texte peut tre : -cr ou lu avec un diteur de texte ou un traitement de texte en mode texte. -list par une commande de lenvironnement, type sous DOS, more ou pr sous UNIX. Chaque caractre dans un fichier texte est cod sur un seul octet et suivant un code dpendant de lenvironnement.
Le caractre de fin de ligne est reprsent par 2 caractres : CR(code hxadcimal 13) et LF (code hxadcimal 10) dans lenvironnement PC, et un caractre LF (code hxadcimal 10) dans lenvironnement UNIX.

Les flux texte doivent subir des transformations : -pour un flux teste de sortie : conversion de 2 octets reprsentant un caractre Unicode en un octet correspondant au code local de ce caractre dans lenvironnement. -pour un flux texte en entre : conversion dun octet reprsentant un caractre dans le code local de l environnement en 2 octets correspondant au caractre Unicode. -transformation du caractre de fin de ligne selon leur reprsentation locale.

11.2.2. : Ecriture dun fichier texte :


La classe abstraite Writer est la classe de base toutes les classes relatives un flux texte de sortie. La classe FileWriter , drive de OutputStreamWriter qui drive de Writer, est la classe pour la cration dun flux texte de sortie associ un fichier.
Ouverture dun fichier texte en criture :

Un constructeur : Public FileWriter(String fileName) throws IOException ; FileWriter fw= new FileWriter(fichier.txt);
Lobjet fw est associ un fichier de nom fichier.txt. Si le fichier nexiste pas, alors il est cr. Sil existe, son ancien contenu est dtruit.

Ouverture dun fichier texte en criture avec formatage avec la classe PrintWriter qui possde des mthodes println et print :

Un constructeur :

Public PrintWriter(FileWrtiter fw) PrintWriter f= new PrintWriter(fw) OU PrintWriter f = new PrintWriter(new FileWriter(fichier.txrt));
Fermeture dun fichier texte en criture:

Avec import.java.io.* ; Mthode : public void close() //Mthode daffichage public void affichage() { DecimalFormat deuxDecimal = new DecimalFormat ( 0.00 ) ; System.out.println( Equation= +deuxDecimal.format(coeffX2)+ x2 + +deuxDecimal.format(coeffX1)+ x + +deuxDecimal.format(coeffX0) ; System.out.println( Racine1= +deuxDecimal.format(racine1)) ; System.out.println( Racine2= +deuxDecimal.format(racine2)) ; }

//Mthode daffichage dans un fichier public void affichageFichier() { PrintWriter f=null ; Try { f= new PrintWriter (new FileWriter(Equation.txt); DecimalFormat deuxDecimal= new DecimalFormat(0.00); f.println(Equation= +deuxDecimal.format(coeffX2)+ x2 + +deuxDecimal.format(coeffX1)+ x + +deuxDecimal.format(coeffX0)) ; f.println( Racine1= +deuxDecimal.format(racine1)) ; f.println( Racine2= +deuxDecimal.format(racine2)) ; } catch (IoException e) { System.out.println(Erreur: +e);
95

} f.close(); } }

11.2.3.: Lecture dun fichier texte sans accs linformation :


Il nexiste pas de classe de lecture symtrique la classe PrintWriter. Il faut utiliser la classe FileReader.
Ouverture dun fichier texte en lecture :

Un constructeur : Public FileReader(String fileName) throws FileNotFoundException ; FileReader fr = new FileReader(fichier.txt); FileReader ne peut accder qu des caractres et ncessite la gestion de la fin de ligne. Il faut lassocier la classe BufferReader qui possde une mthode readLine.

Un constructeur : Public BufferedReader(FileReade fr) BufferedReader f =new BufferedReader(fr) OU BufferedReader f = new BufferedReader (new FileReader(fichier.txt)) La mthode readLine de la classe BufferedReader fournit une rfrence une chane correspondant une ligne de fichier.
Fermeture dun fichier texte en lecture :

Mthode : public void close( ) throws IOException. La mthode close doit tre incluse dans un bloc try- catch. Package coursjava ; Import java.io.* ; Public class LectureFichier { //Mthode principale public static void main(String[ ] args) {

String ligne; BufferedReader fr; Try { fr= new BufferedReader( new FileReader(Equation.txt)); while((ligne=f.redline()) !=null) { System.out.println(ligne); } f.close(); } catch(IOException e) { System.out.println(ERREUR:+e); } } }

11.2.4.: Lecture dun fichier texte avec accs linformation:


La classe StringTokenizer permet de dcouper une chane en diffrents tokens (souschane) en se basant sur des caractres sparateurs choisis. Il est possible dappliquer ces diffrents tokens des conversions en type primitif. Constructeur : Public String Tokenizer(String str,String delim) Mthodes: (dans les boucles) -countTokens : compte le nombre de tokens. -nextToken : donne le token suivant sil existe en retournant le type chane. -nextElement : donne le token suivant sil existe en retournant le type objet.

Package coursjava ; Import java.io.* ; Import java.util.* ; Public class LectureFichier { public static void main(String[ ] args) { int nbTok=0;
97

double x; String ligne= ; BufferedReader f; Try { f= new BufferedReader (new FileReader(Equation.txt)); while((ligne=f.readline())!=null) { System.out.println(Fichier: +ligne); StringTokenizer tok = new StringTokenizer(ligne, ); NbTok = tok.countTokens(); For (int i=0;i<nbTok;i++) { x=Double.parseDouble(tok.nextToken()); System.out.println(Token:+x+ ); } Syqtem.out;println(); } f.close(); } catch (IOException e) { System.out.println(ERREUR: +e);
} } }

Excution: Fichier: 1.1 Token:1.1 Fichier 2.22 3.333 Token:2.22 Token :3.333 Fichier 4.4444 5.55555 6.666666 Token:4.4444 Token :5.55555 Token :6.666666

11.3.: DES FLUX BINAIRES 11.4.: GESTION DES FICHIERS AVEC LA CLASSE FILE 11.5. :DESCRIPTION DES CLASSES FLUX

XII. LA CLASSE java.lang.Math : La classe ne comporte que des champs statiques et des mthodes statiques. Il ne faut pas confondre la classe java.lang.Math avec le paquet java.math qui permet de travailler avec des nombres importants et de grande prcision.

12.1. : CHAMPS STATIQUES DE LA CLASSE java.lang.math. :


-E -PI

12.2. : METHODES STATIQUES DE LA CLASSE java.lang.math. :


Sauf exception, le type de retour des mthodes est identique celui des arguments. -abs(double a) -abs(float a) -abs(float a) -abs(int a) -abs(long a) -acos(double a) -asin(double a) -atan(double a) -floor(double a) -exp(double a) -max(double a, double b) -max(float a, float b) -max(int a, int b) -max(int a, int b) -max(long a, long b) -min(double a, double b) -min(float a, float b) -min(int a, int b) -min(long a, long b) -pow(double a, double b) -random( )

12.3.: CLASSE RANDOM DE java.util:


La classe Random de java.util permet des possibilits tendues de gnration de nombres alatoires. Constructeur : -Random( ) :gnration de nombres alatoires en fonction de lhorloge interne (squences alatoires diffrentes) -Random (long seed) : gnration de nombres alatoires dune valeur damorce (squences alatoires identiques). Mthodes : -int next (int bits) : generates the next pseudorandom number. -boolean nextBoolean(): returns the next pseudorandom, uniformly distributed boolean value from this random bytes and places them into a user supplied byte array. -double nextDouble(); -double nextGaussian():returns the next pseudorandom, Gaussian(normally) distributed double value with mean 0.0 and standard deviation 1.0 from this random number generators sequence. -int nextInt(int n)
99

-void setSeed(long seed);

XIII. STRUCTURES DES DONNEES DYNAMIQUES :


13.1. : Les structures de donnes :
Les structures de donnes dynamiques diffrentes des structures de tailles fixe, ont une taille qui se modifie au cours de lexcution. Ces structures dynamiques sont particulirement adaptes aux cas o le nombre dlments de donnes reprsenter dans la structure de donnes est inconnu. Il existe diffrents types de structures de donnes : -Les listes chanes : collection dlments de donnes qui sont chanes, permettant linsertion et les suppressions en nimporte quelle position. La classe LinkedList du package java.util permet de manipuler les listes chanes. -les piles : -les files : (queues, FIFO :First In First Out) : cas particulier des listes chanes avec des insertions une extrmit appele fin de la file et des suppressions lautre extrmit appele tte de la file. -les arbres, en particulier binaires : structure de donnes non linaire. Le principe de programmation de ces structures de donnes repose sur le concept de classe autorfrentielle.

13.2. : Classe autorfrentielle :


Une classe autorfrentielle contient un membre qui consiste en une rfrence un objet dune classe de mme type de classe. //Classe autorfrentielle class Nud { private int donnee ; private Nud suivant ; . . .

Cette classe dfinit un Nud avec 2 variables dinstance private : lentier donne et une rfrence un Nud nomm suivant . Classe autorfrentielle lautomate ptales : Class Nud { final int DIM=4 ; Object sommet; //tiquette des noeuds Object arc[ ] = new Object[DIM]; //tableau darc(il y en a 4 : A C G T) Nud succ[ ] = new Nud [DIM] ; //tableau de successeurs Public Nud (Object o) { sommet=o ; for(int i=0,i<DIM ;i++) {arc[I]=null; succ[I]=null; } } public String toString() { return sommet.toString(); } }

13.3.: Liste Chane:


101

La liste chane est une collection linaire dobjets dune classe autorfrentielle appels nuds et relis par des liens. Laccs une liste chane seffectue par une rfrence au 1er nud de la liste. Chaque nud successif est accessible par le membre de rfrence de lien stock dans le nud prcdent.
La rfrence de lien dans le dernier nud est mise null et marque la fin de la liste.

Un nud contient des donnes de tout type, y compris des objets dautres classes.

Programme qui prsente des sous- chanes dune chane en lments dune liste chane. Package coursjava ; //- ------class NoeudListe { Object element ; NoeudListe suivant ; Public NoeudListe (Object lment, NoeudListe suivant) { this.lment=lment ; this.suivant=suivant ; }

public NoeudListe (Object lment) { this (lment, null) ; } public NoeudListe() { this(null,null) ; } //Mthode qui retourne une rfrence llment de ce nud. public Object getElement( ) { return lment; } //- --------class Liste { private NoeudListe premierNoeud; private NoeudListe dernierNoeud; private String nomListe; public Liste (String nomListe)

{ this.nomListe=nomListe; } public Liste() {this(Liste); } public boolean listeEstVide { return (premierNoeud = = null); } public void ajouterEnQueue (Object element) { if (listeEstVide()) { premierNoeud =dernierNoeud= new NoeudListe (element) ; } else { dernierNoeud = dernierNoeud.suivant= new NoeudListe (element) ; } }

//Mthode de suppression dun lment quelconque de la liste. Public void suppressionElement(Object element) { NoeudListe courant=premierNoeud ; NoeudListe precedentCourant=premierNoeud ;

while((courant.suivant !=null)&&( !(courant.element.equals(element))) ; { precedentCourant=courant ; courant=courant.suivant ; }

//Sup pression de llment. if((courant.element.equals(element))&&(courant !=premierNoeud)) { precedentCourant.suivant=courant.suivant; } else {

103

//su p pression du 1er elment if (courant==premierNoeud) { premierNoeud=courant.suivant; } else { System.out.println(element+ nexiste pas dans la liste +nomListe) ; } //Mthode pour insrer en tte de liste public void insererEnTete(Object element) { if (listeEstVide()) premierNoeud=dernierNoeud=new NoeudListe(element) ; else premierNoeud=new NoeudListe(element,premierNoeud) ; }

//Mthode pour insrer en queue de liste : public void insererEnQueue(Object element) { if (listeEstVide()) premierNoeud=dernierNoeud=new NoeudListe (element) ; else dernierNoeud=dernierNoeud.suivant= new NoeudListe(element) ; }

13.4. : PILE :
2 mthodes qui interviennent dans une pile : -push( ) -pop( )

13.5. : FILE :
2 mthodes qui interviennent dans une pile : -enQueue( ) : ajoute un nouveau nud en fin de file -deQueue( ) : supprime un nud en tte de file.

13.6. :ARBRE BINAIRE :


Un arbre binaire est un arbre dont tous les nuds comportent au plus deux liens. Le 1 nud de larbre est appele racine.
er

-Chaque lien du nud racine fait rfrence un enfant. -Lenfant gauche est le tout 1er nud du sous- arbre gauche et lenfant droit est le tout 1er nud su sous- arbre droit. -Les enfants dun nud dont appeles frres. -Un nud sans enfant est appel feuille. Larbre de recherche binaire est un arbre binaire particulier tel que : -les valeurs de tout sous- arbre gauche sont < la valeur de leur nud parent, et que -les valeurs de tout sous- arbre droit sont > la valeur de leur nud parent. On suppose galement quil nexiste pas de valeurs identiques. Remarque : Larbre de recherche binaire correspond une srie de donnes qui peut varier selon lordre dinsertion des valeurs.

3 TYPES DE PARCOURS :
Parcours en ordre.

-parcourir le sous- arbre gauche avec un appel parcours en ordre. -traiter le nud. -parcourir le sous- arbre droit avec un appel parcours en ordre. Le parcours en ordre dun arbre de recherche binaire affiche les valeurs des nuds dans lordre croissant : tri par arbre binaire.
Parcours en pr- ordre.

-traiter le nud. -parcourir le sous- arbre gauche avec un appel parcours en pr- ordre. -parcourir le sous- arbre droit avec un appel parcours en pr- ordre.
Parcours en post- ordre.

-parcourir le sous- arbre gauche avec un appel parcours en post- ordre. -parcourir le sous- arbre droit avec un appel parcours en post- ordre. -traiter le nud.

Class NoeudArbre {
105

int element ; NoeudArbre gauche ; NudArbre droit ;

public NoeudArbre(int element) { this.element=element ; gauche=droit=null ; }

public void insrer(int element) { if (element < this .element) { if (gauche= =null) { gauche= new NoeudArbre(element); } else { gauche.inserer(element) ; } } else { if (element>this.element) { if(droit= =null) { droit= new NoeudArbre(element); } else { droit.inserer(element) ; } } } class Arbre { private NoeudArbre racine; public Arbre() {racine=null; }

public void insererNoeud(int element) { if (racine= = null) { racine= new NoeudArbre(element); } else { racine.insere(element); } } public void enOrdre(NoeudArbre nud) { if (nud= =null) { return; } enOrdre(noeud.gauche); System.out ;println(n ud.element+ ) ; EnOrdre(nud.droit) : } Il existe encore dautres mthodes mais elles fonctionnent selon le mme principe.

13.7. : CLASSE VECTOR :


La classe Vector de java.util drive de lInterface List. Elle permet de crer des objets du type tableau qui croissent et dcroissent dynamiquement en fonction des besoins, contrairement aux tableaux statiques dont la taille est fixe la compilation. Les lments dans Vector sont des objets. Ainsi, avec des types primitifs, il faut utiliser les classes enveloppes.
Constructeurs :

-Vector( ) -
Mthodes :

-void add(int index, Object elem) -.. Programme avec la classe Vector: import.java.util.* ; public class TestVector { public static void main (String [ ] args)
107

{ Vector vect = new Vector( ); for (int i=0; i<10; i++) { vect.add(new Integer(i)); } System.out.println(Suite dentiers dans le vecteur:); for (int i=0; i<vect.size( ); i++) { System.out.println(vect.elementAt(i)+ ); } System.out.println( ) ; System.out.println(firstElement( ):+vect.firstElement( )); System.out.println(lastElement( ):+vect.lastElement( )); vect.remove(o); System.out.println(Suite dentiers dans le vecteur: );

for (int i=0; i<vect.size( ); i++) { System.out.println(vect.elementAt(i)+ ); } System.out.println( ); Vect.removeElement(new Integer(5)); System.out.println(Suite dentiers dans le vecteur: ); for (int i=0; i<vect.size( ); i++) { System.out.println(vect.elementAt(i)+ ); } } EXECUTION: Suite dentiers dans le vecteur: 0 1 2 3 4 5 6 7 8 9 FirstElement( ) : 0 LastElement( ) :9 .

13.8. : CLASSE STACK :

La classe Stack de java.util qui drive de Vector permet de manipuler la pile. Elle tend la classe Vector. Les lments de Stack sont des objets. Avec des types primitifs, il faut alors utiliser les classes enveloppes.
Constructeurs :

-Stack( ) -.
Mthodes :

-boolean empty( ) -Object peek( )

Programme utilisant la classe Stack : Import.java.util.* Public class TestStack { public static void main (String [ ] args) { Stack pile = new Stack( ); for (int i=0; i<10; i++) { pile.push(new Integer(i)); } System.out.println(Suite dentiers dans la pile:); for (int i=0; i<pile.size( ); i++) { System.out.println(pile.elementAt(i)+ ); } System.out.println( ) ; System.out.println(peek( ):+pile.peek( ));
109

Object elementEnleve= new object( )); ElementEnleve=pile.pop( ); . . . .

13.10.2. : Classe Arrays:


La classe Arrays fournit des mthodes de manipulation de tableaux : -tri( sort) , -recherche dans un tableau tri (binarySearch), -comparaison de tableaux (equals), - placement dlments dans un tableau (fill) -asList( ) qui permet de voir un tableau comme une liste (vue de liste) import.java.util.* public class TestArrays { public static void main (String [ ] args) { Object t[ ] = new Object [10]; Random r= new Random (99); Arrays.fill(t, new integer(0)); for (int I=0; I< t.length; I++) { t[I] = new Integer (r. nextInt(100)); } . . . Arrays.sort(t); System.out.print( Suite dentiers dans le tableau : ) ; For(int i =0 ; i< t.length ; i+=) { System.out.print(t[I]+ ); } . //Mthode binarySearch utilisable uniquement aprs la mthode sort.

Int rechercheInt = Arrays.binarySearch (t, new Integer(74)) ; System.out.print(Position : +rechercheInt) ; //Cration dune liste de taille fixe : List laListe = Arrays.asList(t) ; System.out.println( ) ; For(int i=0 ;i< laListe.size( ) ; i++) { System.out.println(laListe.get(i)+ ) ; System.out.println( ) ; } } EXECUTION : Suite dentiers dans le tableau : 0 0 0 0 0 0 0 0 :87 58 29 11 0 ..

13.10.3. : Interface Collection : (non trait) 13.10.4. : Classe Collections :


Elle fournit des mthodes de manipulation de collections : algorithme de recherche, tri,
Mthodes :

-int binarySearch(List liste, Object key) -void copy (List dest, ______)

13.10.5.: Interface List:


Une List est une Collection ordonne pouvant contenir des lments en double. LInterface List est implmente par les classes ArrayList,

13.10.6. : Classe ArrayList :


Elle drive de List . Cest une liste de tableau. Les mthodes de cette classe sont similaires aux mthodes de Vector mais sans le concept de synchronisation. Constructeurs : -ArrayList( ) ;

111

-.. Programme utilisant la classe ArrayList : Import.java.util.* ; Class EnsembleConstruction { public ArrayList ens ; public EnsembleConstruction (String numEns) { ens = new ArrayList() ; Syqtem.out.println(Ensemble+numEns+cr); } public boolean ensembleContientElement (string numEns, Object elem) { boolean elementExiste ; elementExiste= ens.contains(element) ; System.out.println() ; }

13.10.7. : Classe LinkedList :


Elle drive de List et permet de manipuler des listes chanes.
Constructeurs :

-LinkedList( ) ; -LinketList(Collection c) ..

13.10.8.: Classe Set:


Cest une Collection ne comportant que des lments uniques. 2 implmentations : -HashSet : stocke ses lments dans une table -treeSet

13.10.9. : Interface Map : (non trait).

113