Sie sind auf Seite 1von 275

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.

util : Conteneurs et autres utilitaires

www.cours-ista.com
Support de cours Java
Structures de donnes et Programmation Oriente Objet

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Plan
1 2 3 4 5

www.cours-ista.com

Bases procdurales de Java Notions de programmation oriente objet Bases orientes objet de Java Exceptions Classes utilitaires de base

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Plan (suite)
6

java.util : Conteneurs et autres utilitaires

www.cours-ista.com
3

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Bases procdurales de Java

Rfrences : The Java Language Specication, J. Gosling, B. Joy et G. Steele Java in a Nutshell, D. Flanagan

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Variables et types de donnes Identicateurs Constantes Types primitifs (entiers, ottants, boolens) Tableaux

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Identicateurs
1

Identicateur : suite de
lettres minuscules ou majuscules, chires, underscore (_) et dollar ($).

2 3

Un identicateur ne doit pas commencer par un chire. Java distingue minuscules et majuscules (Valeur dire de VALEUR). Conventions

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Identicateurs (suite)
Toute mthode publique et variable dinstance commence par une minuscule. Tout changement de mot descriptif se fait via une majuscule. Exs. : nextItem, getTimeOfDay. Variables locales et prives : lettres minuscules avec des underscores. Exs. : next_val, temp_val. Variables dites final reprsentant des constantes : lettres majuscules avec underscores. Exs. : DAY_FRIDAY, GREEN. Tout nom de classe ou dinterface commence par une majuscule. Tout changement de mot descriptif se fait via une majuscule. Exs. : StringTokenizer, FileInputStream. 7

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Reprsentation littrale
1

Entiers :
les valeurs octales commencent avec un 0. Ainsi 09 gnre une erreur : 9 en dehors de la gamme octale 0 7. Ajouter un l ou L pour avoir un entier long. Nombres virgules : par dfaut des double. Ajouter un f ou F pour avoir un float. boolens : 2 valeurs possibles, true et false. true (resp. false) nest pas gal 1 (resp. 0).

Chanes de caractres : doivent commencer et se terminer sur la mme ligne . . .


8

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Types entiers et ottants


1

Toute assignation, explicite ou par passage de paramtres, fait lobjet dune vrication de type. Pas de coercition ou de conversion systmatique. Une dirence de type est une erreur de compilation, pas un avertissement (warning). Types de donnes entiers :
byte : nutiliser que pour des manipulations de bits. short : relativement peu utilis car sur 16 bits. int : dans toute expression avec des byte, short, int, tous sont promus des int avant calcul.

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Plages de variation
Nom long int short byte double float Taille 64 bits 32 bits 16 8 64 32 bits bits bits bits Plage de variation -9 223 372 036 854 775 808. . . 9 223 372 036 854 775 807 -2 147 483 648 . . . 2 147 483 647 -32 768 . . . 32 767 -128 . . . 127 1.7e-308 . . . 1.7e308 3.4e-38 . . . 3.4e+38

10

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Transtypage (ou conversions, cast)


1 2

Conversions possibles en java. Conversion automatique seulement possible lorsque le compilateur sait que la variable destination est assez grande. Si des bytes, short, int et long font partie dune expression, tout le monde est promu long. Si une expression contient un float et pas de double, tout le monde est promu float. Sil y a un double, tout le monde est promu double. Tout littral virgule est considr comme double.

11

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Caractres
1

Un caractre est cod par un entier allant de 0 65536 (selon le standard unicode). On peut se servir des caractres comme entiers :
int trois = 3; char un = 1; char quatre = (char) (trois + un);

Dans quatre : 4. un a t promu int dans lexpression, do la conversion en char avant lassignation.

12

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Boolens

Type renvoy par tous les oprateurs de comparaison, comme (a < b). Type requis par tous les oprateurs de contrle de ux, comme if, while et do.

13

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Tableaux
1

Cration pouvant tre faite en deux temps :


Dclaration de type, les [] dsignant le type dun tableau int tableau_entiers[] ; Allocation mmoire, via new tableau_entiers = new int[5] ; Pour les tableaux, la valeur spciale null reprsente un

tableau sans aucune valeur. Initialisation


int tableau_initialise[] = { 12, 34, 786 };

Vrication par le compilateur de stockage ou de rfrence en dehors des bornes du tableau.


14

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Tableaux multidimensionnels (I)


1

Tableaux multidimensionnels cres comme


double matrice[][] = new double[4][4];

Ce qui revient
double matrice[][] = new double[4][]; matrice[0] = new double[4]; matrice[1] = new double[4]; matrice[2] = new double[4]; matrice[3] = new double[4];

15

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Tableaux multidimensionnels (II)


1 2

Initialisation par dfaut de tous les lments zro. Des expressions sont permises dans les initialisations de tableaux
double m[][] { { { }; = { 0*0, 1*0, 2*0 }, 0*1, 1*1, 2*1 }, 0*2, 1*2, 2*2 }

16

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Oprateurs Oprateurs arithmtiques Oprateurs relationnels Oprateurs logiques

17

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Oprateurs arithmtiques
Op. + * / % ++ Rsultat addition soustraction multiplication division modulo incrmentation Op. += -= *= /= %= Rsultat assignation additive assignation soustractive assignation multiplicative assignation divisionnelle assignation modulo dcrmentation

1 2

Les oprateurs arithmtiques fonctionnent comme en C. Une dirence : le modulo agit galement sur les nombres virgule.
18

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Oprateurs arithmtiques (suite)


Exemple dincrmentation
class IncDec { public static void main(String args[]) { int a = 1; int b = 2; int c = ++b; int d = a++; c++; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); System.out.println("d = " + d); } }

19

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Oprateurs arithmtiques (suite)


La sortie du programme est
Prompt > javac IncDec Prompt > java IncDec a = 2 b = 3 c = 4 d = 1

20

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Oprateurs relationnels
Op. == != > < >= <= Rsultat gal dirent de strictement suprieur strictement infrieur suprieur ou gal infrieur ou gal

Tout type java, y compris les types primitifs et les rfrences des instances dobjets peuvent tre compars avec == et !=
21

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Oprateurs relationnels (suite)

Seuls les types numriques peuvent tre compars avec les oprateurs dordre. Les entiers, ottants et caractres peuvent tre compars avec les oprateurs dordre strict. Chaque oprateur renvoie un type boolean.

22

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Oprateurs boolens logiques


Les oprateurs suivants agissent uniquement sur des oprandes
boolean Op. ^ ^= || == && != ! ? : Rsultat OU exclusif logique assignation avec OU exclusif OU avec court cricuit gal ET avec court circuit dirent de NON unitaire logique if-then-else ternaire 23

Voir exemple des || et && dans les notes de cours

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Contrle de ux
if/else switch/break return while/do while/for

24

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Instruction if-else
1

Forme strictement analogue celle du C


if ( expression-booleenne ) expression1; [ else expression2; ]

expressioni peut tre une expression compose entoure

de {}.
3

expression-booleenne est toute expression renvoyant un boolean.

Il est de BONNE PRATIQUE dentourer daccolades une expression mme si elle nest pas compose. Ce qui permet, lorsque lon veut rajouter une expression, de ne rien oublier, comme cest le cas ci-aprs
25

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Instruction if-else
int octetsDisponibles; if (octetsDisponibles > 0) { CalculDonnees(); octetsDisponibles -= n; } else attendreDautresDonnees(); octetsDisponibles = n;

o la dernire ligne devrait, daprs lindentation, faire partie du bloc else.


26

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

www.cours-ista.com

Instruction break

Utilisation courante strictement analogue celle du C : pour sortir dun case lintrieur dun switch.

27

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

Instruction switch (I)


1

Forme strictement analogue celle du C


switch ( expression ) { case valeur1 : break; case valeurN : break; default : }

expression : tout type primitif (valeuri du mme type quexpression)


3 2

Erreur rpandue que doublier un break commentaires du type // CONTINUER. Exemple dquivalent de wc (word count)
28

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

Instruction switch (II)


class WordCount { static String texte = "Trente rayons convergent au moyeu "mais cest le vide median "qui fait marcher le char. "On faconne largile pour en faire des vases, "mais cest du vide interne "que depend leur usage. " + " + " +"\n"+ " + " + " +"\n"+

"Une maison est percee de portes et de fenetres, " + "cest encore le vide " + "qui permet lhabitat. " +"\n"+ "LEtre donne des possibilites, "cest par le non-etre quon les utilise. "Tao-to king, Lao-tseu, XI static int long = text.length(); " + " +"\n"+ \n";

29

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

Instruction switch (III)


public static void main(String args[]) { booelan dansMot = false; int nbreCars = 0, nbreMots = 0, nbreLignes = 0; for (int i = 0; i < long; i++) { char c = texte.charAt(i); nbreCars++; switch (c) { case \n : nbreLignes++; // CONTINUER case \t : // CONTINUER case : if (dansMot) { nbreMots++; dansMot = false; } break; default : dansMot = true; } } System.out.println("\t" + nbreLignes + "\t" + nbreMots + "\t" + nbreCars); } // main()

30

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

Instruction return

1 2

Mme usage quen C. Cest une erreur de compilation que davoir du code inatteignable en java.

31

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

Instructions while/do-while/for
1

Mmes usages et syntaxe quen C. while


[ initialisation; ] while ( terminaison ) { corps; [ iteration; ] }

do-while
[ initialisation; ] do { corps; [ iteration; ] } while ( terminaison );

for 32

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Variables & Types Oprateurs Contrle de ux

Instructions while/do-while/for (suite)

for (initialisation; terminaison; iteration) corps;

33

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Notions de programmation oriente objet

Rfrences : Object-Oriented Analysis and Design with Applications, G. Booch, Data Structures, M.A. Weiss.

34

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

POO, Objets, Classes Notions gnrales de Programmation Oriente Objet (POO) Notion dobjet et de classe

35

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Conception oriente objets


1

2 3

Dans une dcomposition oriente objets, on partitionne le systme selon les entits fondamentales du domaine du problme. Sujet : objet verbe : opration. On utilise la conception oriente objets parce quelle nous aide mieux organiser la complexit inhrente aux logiciels et celle caractristique du monde rel modliser.

36

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Notion dobjet, de classe

2 3

Nous verrons quun objet a un tat, un comportement et une identit ; Les termes instance et objet sont interchangeables. Une classe est un squelette pour un ensemble dobjets qui partagent une structure commune et un comportement commun.

37

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Type ou classe ; objet


1

Classe :
Notion de type, ou classe Attribut, ou champ Dclaration dopration Description dopration

Objet :
tat Comportement Identit Objet Java

38

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Notion de type ou de classe


1

Un type (ou une classe) est constitue


dattributs (ou champs), de dclarations doprations (signatures de mthodes) de descriptions extensives doprations (corps de mthodes)

Ce que lon peut rsumer par la formule suivante


TYPE (Champ1 , . . . , Champn sig_meth1 , corps_meth1 ,

...,

sig_methn , corps_methn )

o sig_methi dsigne la signature de mthode n i et corps_methi dsigne le corps de mthode n i .


39

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Notion de type ou de classe (suite)

Un type est par essence une entit statique, par opposition un objet, de nature dynamique. Dune certaine manire, le type est un squelette, lobjet son incarnation.

40

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Exemple de classe
Classe (type) dcrivant un cercle
class Cercle { // champs : rayon du cercle double r; // Constructeur : initialisation des champs Cercle(double nouvRayon) { r = nouvRayon; } // methode de calcul dune surface double calculeSurface() { return(3.1416*r*r); } }// Fin de class Cercle

41

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Notion dtat dun objet


1

Ltat dun objet englobe toutes les proprits (habituellement statiques) de lobjet plus les valeurs courantes (gnralement dynamiques) de chacune de ces proprits. Une proprit est une caractristique naturelle ou discrminante, un trait, une qualit ou une particularit qui contribue rendre un objet unique. Par exemple, dans un distributeur, un numro de srie est une proprit statique et la quantit de pices quil contient est une valeur dynamique.

42

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Notion de comportement dun objet


1

2 3

Le comportement est la faon dont un objet agit et ragit, en termes de changement dtat et de transmission de messages. Message, opration et mthode sont interchangeables. Par exemple, dans le cas dun distributeur de boissons, nous pouvons dclencher une action (appuyer sur un bouton) pour raliser notre slection.
Si nous navons pas introduit susamment dargent, il ne se passera probablement rien. Si nous avons mis assez dargent, la machine lencaissera et nous servira une boisson (modiant ainsi son tat).

43

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Comportement dun objet : les oprations


1

Une opration dsigne un service quune classe ore ses clients. En pratique, nous avons constat quun client eectuait typiquement 5 sortes doprations sur un objet. Les 3 les plus courantes sont les suivantes : Modicateur une opration qui altre ltat dun objet Slecteur une opration qui accde ltat dun objet, mais qui naltre pas celui-ci. Itrateur une opration qui permet daccder toutes les parties dun objet dans un ordre bien dni.
44

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Comportement dun objet : les oprations (II)


Deux autres types dopration sont courants : Constructeur une opration qui cre un objet et/ou initialise son tat. Destructeur Une opration qui libre ltat dun objet et/ou dtruit lobjet lui-mme.

45

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Notion didentit dun objet


1

2 3

Lidentit est cette proprit dun objet qui le distingue de tous les autres objets. Deux objets peuvent tre dclars gaux en 2 sens dirents. Ils peuvent tre gaux au sens de leur rfrences (les pointeurs internes qui rfrencent les donnes de lobjet en mmoire) ou au sens de leur contenu (galit de leur tat), bien quils soient situs des emplacements mmoire dirents.

46

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Nature dun objet en Java


1

Un objet Java peut tre dcrit par la formule suivante :


OBJET (tat,op1 , . . . , opn , ref)

o etat
opi ref

ensemble des variables dinstance (pointeur sur) la mthode dinstance n i (pointeur sur) un emplacement mmoire contenant ltat et des rfrences internes vers les oprations (pointeurs sur les mthodes)
47

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Nature dun objet en Java (II)


1 2

Exemple dobjet, de type tasse caf. Des attributs dune tasse caf pourront tre :
sa couleur, la quantit de caf quelle contient, sa position dans le caf (la brasserie ou le bar)

Tasse caf est un type et la tasse caf rouge qui contient actuellement 38 millilitres de caf et qui se trouve sur la dernire table du fond est un objet. Rouge, 38 millilitres et sur la dernire table du fond constituent ltat de cet objet. Un type, ou une classe sert de modle partir duquel on peut instancier (crer) des objets contenant des variables dinstance et des mthodes dnies dans la classe.
48

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations Sparation interface/implantation Relations dhritage

49

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Sparation de linterface et de limplantation


1

Une ide cl est de sparer linterface externe dun objet de son implantation. Linterface dun objet est constitue des messages quil peut accepter dautres objets. Autrement dit, cest la dclaration des oprations associes lobjet. Limplantation dun objet se traduit par la valeur de ses attributs et son comportement en rponse aux messages reus.

50

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Sparation interface/implantation (II)


1

2 3

Dans un monde orient-objets, un objet expose son interface aux autres objets, mais garde son implantation prive. Limplantation doit donc tre spare de linterface. De lextrieur, le seul moyen pour interagir avec un objet est de lui envoyer un message (dexcuter lune de ses oprations). La sparation de linterface et de limplantation permet aux objets davoir la responsabilit de grer leur propre tat.

51

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Sparation interface/implantation (III)


1

Les autres objets ne peuvent manipuler cet tat directement et doivent passer par des messages (ou oprations). Lobjet qui reoit un message peut dcider de changer ou non son tat. Par contre, il ne contrle pas quel instant il va recevoir des messages. Un aspect fondamental de la programmation oriente objet est que chaque objet dune classe particulire peut recevoir les mmes messages. Linterface externe dun objet ne dpend donc que de sa classe.

52

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations entre classes


1

Il existe trois types fondamentaux de relations entre classes :


La gnralisation/spcialisation, dsignant une relation est un. Par exemple, une rose est une sorte de eur : une rose est une sous-classe plus spcialise de la classe plus gnrale de eur. Lensemble/composant, dnotant une relation partie de. Par exemple, un ptale est une partie dune eur. Lassociation, traduisant une dpendance smantique entre des classes qui ne sont pas relies autrement. Par exemple, une eur et une bougie peuvent ensemble servir de dcoration sur une table. 53

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations dhritage entre classes


1

Lhritage est une relation entre les classes dont lune partage la structure ou le comportement dni dans une (hritage simple) ou plusieurs (hritage multiple) autres classes. On nomme super-classe la classe de laquelle une autre classe hrite. On appelle une classe qui hrite dune ou plusieurs classes une sous-classe.

54

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations dhritage (II)


Par exemple, prenons une classe Surface2DSymetrique. Considrons les classes Pave2D et Disque hritant de Surface2DSymetrique. Lhritage dnit donc une hirarchie de la forme est un entre classes. Cest le test de vrit de lhritage. Dans une relation dhritage, les sous-classes hritent de la structure de leur super-classe.

55

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations dhritage (III)


1

Par exemple, la classe Surface2DSymetrique peut avoir comme champs : labscisse de son centre de symtrie x lordonne de son centre de symtrie y sa taille size sa couleur color Et les classes Pave2D et Disque hriteront de ces champs. Une sous-classe peut dnir dautres champs qui viennent sajouter ceux hrits des super-classes. De plus, toujours dans une relation dhritage, les sous-classes hritent du comportement de leur super-classe.
56

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations dhritage (IV)


Par exemple, la classe Surface2DSymetrique peut avoir comme oprations : getSize() pour obtenir la taille de la surface getX() pour obtenir labscisse du centre de gravit getY() pour obtenir lordonne du centre de gravit setXY() pour xer la position de la surface setColor() pour xer la couleur de la surface

57

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations dhritage (V)

1 2

Et les classes Pave2D et Disque hriteront de ces champs. Une sous-classe peut dnir dautres oprations qui viennent sajouter celles hrites des super-classes. Une sous-classe peut rednir tout ou partie des oprations hrites des super-classes.

58

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

POO, Objets & Classes Classe & Objets Relations

Relations dhritage (VI)

Le polymorphisme est un mcanisme par lequel un nom peut dsigner des objets de nombreuses classes direntes, tant quelles sont relies par une super-classe commune. Tout objet dsign par ce nom est alors capable de rpondre de direntes manires un ensemble commun doprations.

59

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Bases orientes objet de Java

Rfrences : The Java Language Specication, J. Gosling, B. Joy et G. Steele Java in a Nutshell, D. Flanagan

60

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Classes et objets Java Classe et objet Java mthode main() Compilation, excution Rfrence, new Variables & mthode dinstance Constructeurs, this Hritage

61

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Constitution dune classe


1

Rappel des notions de classe et dobjet, en deux mots


Classe : squelette ; structure de donnes et code des mthodes ; statique, sur disque Objet : incarnation ; tat, comportement, identit ; dynamique, en mmoire

Une classe dnit :


Les Structures de donnes associes aux objets
variables dsignant ces donnes : champs.

Les services rendus par les objets : mthodes


3

Une Classe est dclare par le mot cl class.


62

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Champs et mthodes
1 2

Champ dclaration de variable Nom de variable suit la dclaration du type :


class Point { int x; int y; ... }

Une mthode est constitue de :


Un nom Des paramtres, en nombre xe Dun type de retour : soit void, 63

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Champs et mthodes (suite)


soit un type primitif soit une rfrence vers un objet.

Du corps (instructions java) de la mthode.


4

Exemple de classe dcrivant un cercle


class Cercle { // champs : rayon du cercle double r; // methode de calcul dune surface double calculeSurface() { return(3.1416*r*r); } }// Fin de class Cercle

64

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Dclaration de classe
1 2

Un chier source java doit porter le mme nom que celui de la classe publique qui y est dnie. Syntaxe gnrique
class NomClasse { type variableInstance1; type variableInstanceN; type nomMethode1(liste-parametres) { corps-methode; } type nomMethodeN(liste-parametres) { corps-methode; } }

Exemple
65

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Dclaration de classe (suite)


class Chat String int float { nom; // nom du fauve age; // en annees tauxRonronnement; // entre 0 et 1

void viellir() { age += 1; } int retournerAge() { return(age); } }

66

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Dclaration de classe (suite)

Les dclaration et implantation dune mthode sont


dans le mme chier.

67

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Point dentre dun programme (main())


1

Un programme Java est constitu dune ou de plusieurs classes. Au moins une classe contenant le main(), mthode statique et publique. Est le point dentre de lexcution du programme.
// Fichier Bonjour.java public class Bonjour { public static void main(String args[]) { System.out.println("Bonjour ! ") ; }

68

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Point dentre dun programme (main()) (suite)


4

Cette classe dnit une classe Bonjour qui ne possde quune seule mthode. La mthode main() doit tre dclare static et public pour quelle puisse tre invoque par linterprteur Java. Largument args est un tableau de String qui correspond aux arguments de la ligne de commande lors du lancement du programme. args[0] est le 1er argument, args[1] est le 2ime argument, ...

69

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Compilation
1

Avant de pouvoir excuter ce programme, il faut tout dabord le compiler, par exemple avec la commande javac .
javac Bonjour.java

La commande javac traduit le code source en code intermdiaire (p-code) java. Ce code (une forme dassembleur gnrique) est videmment indpendant de la plate forme sur laquelle il a t compil.

70

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Excution
1

2 3

Autant de chiers que de classes qui ont t dnies dans le chier source sont produits. Les chiers compils ont lextension .class. Enn, pour excuter ce programme, il faut utiliser linterprteur de code Java et lui fournir le nom de la classe contenant le main(...) (sans lextension).
java Bonjour

71

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rfrence un objet
1

En Java, on ne peut accder aux objets qu travers une rfrence vers celui-ci. Dclaration dune variable p avec pour type un nom de classe :
Point p;

p : rfrence un objet de la classe Point.


3

Lorsque lon dclare une classe comme type dune variable, cette dernire a, par dfaut, la valeur null. null est une rfrence un Object (mre de toutes les classes Java), qui na pas de valeur (distinct de 0) ; par ex. dans
72

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rfrence un objet (suite)


Point p;

p a la valeur null.
5 6 7

En fait, rfrence un objet : pointeur. Mais larithmtique sur les pointeurs est impossible en java. Seule chose permise : changer la valeur de la rfrence pour pouvoir faire rfrence un autre objet. Plus prcisment, une rfrence pointe sur une structure o se trouve
des informations sur le type ladresse relle des donnes (instance dobjet)

73

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Oprateur new
1

new : cration dune instance dobjet dune classe ; retourne

une rfrence cette instance dobjet.


Point p = new Point(); Point p2 = p; p = null; // ligne 1 // ligne 2 // ligne 3

Ligne 2 : tout changement p2 aecte lobjet rfrenc par p. p2 = p : aucune copie de lobjet ou allocation mmoire. Ligne 3 : dcrochage de p de lobjet originel. p2 permet toujours dy accder.
2

Objet qui nest plus rfrenc le ramasse-miettes (garbage collector) rcupre automatiquement la mmoire associe.
74

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instance dobjet
1

3 4

Instance : copie individuelle de prototype de la classe, avec ses propres donnes : variables dinstance. Une fois la classe dclare, pour pouvoir utiliser un objet de cette classe, il faut dnir une instance (dobjet) de cette classe. Or les objets ne sont accessibles qu travers des rfrences . Donc une dnition qui spcie un objet comme une variable ayant le type de la classe choisie ne fait que dnir une rfrence vers un ventuel objet de cette classe.
Date d;

75

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instance dobjet (suite)


5 6

La variable d reprsente une rfrence vers un objet de type Date. En interne, cela rserve de la place pour le pointeur sous-jacent la rfrence d. Mais cela ne rserve pas de place mmoire pour une variable de type Date. Si lon veut une instance dobjet eective, il faut la crer explicitement avec le mot cl new et le constructeur de la classe Date.
Date d; d = new Date();

76

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Mthode dinstance

On peut voir une mthode comme un message envoy une instance dobjet. Pour acher la date contenue dans lobjet d, on lui envoie le message imprimer :
d.imprimer() ;

De telles mthodes sont appeles mthodes dinstance.

77

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Variables dinstance

Les Variables dinstance sont dclares en dehors de toute mthode


class Point { int x, y; }

78

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Op. point (.) Dclaration de mthode


1

Oprateur . : accder des variables dinstance et des mthodes dun(e instance dun) objet. Ex. de dclaration de mthode
class Point { int x, y; void init(int a, int b) { x = a; y = b; } }

79

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Op. point (.) Dclaration de mthode (suite)


3

5 6

En C, mthode sans paramtre : nommethode(void). illgal en java. Les objets sont passs par rfrence (rfrences dinstances un objet passs par valeur). Les types primitifs sont passs par valeur. Les mthodes java sont donc similaires aux fonctions virtuelles du C++.

80

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction this
1 2

this : rfrence linstance dobjet courante. Il est permis une variable locale de porter le mme nom quune variable dinstance . . . Exemple dutilisation de this vitant cela
void init(int x, int y) { this.x = x; this.y = x; }

81

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Constructeurs
1

Mme nom que celui de la classe. Pas de type de retour (pas mme void). Classe dcrivant un cercle
class Cercle { double r; // champs : rayon du cercle // Constructeur : initialisation des champs Cercle(double nouvRayon) { r = nouvRayon; } double calculeSurface() { return(3.1416*r*r); // methode de calcul } }// Fin de class Cercle

82

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Constructeurs (suite)
3

Exemple animalier
class Chat String int float { nom; // nom du fauve age; // en annees tauxRonronnement; // entre 0 et 1

public Chat(String sonNom, int sonAge, float sonTauxRonron) { nom = sonNom; age = sonAge; tauxRonronnement = sonTauxRonron; } }

83

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Constructeurs (suite)
1

this peut-tre galement un appel un constructeur


class Point { int x, y; // constructeur exhaustif Point(int x, int y) { this.x = x; // var dinstance Point.x this.y = y; } // Appel du constructeur exhaustif Point() { this(-1, -1); // Point(int x, int y) } }

84

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Exemple de constructeurs
1

Exemple animalier
class Chat { String nom; int age; Color[] couleurPelage; float tauxRonronnement; // // // // nom du fauve en annees ses differentes couleurs entre 0 et 1

public Chat(String sonNom, int sonAge, float sonTauxRonron, Color[] sesCouleurs) { nom = sonNom; age = sonAge; tauxRonronnement = sonTauxRonron; couleurPelage = sesCouleurs; } public Chat() { this(new String("minou"), 1, 0.5, {Color.black, Color.white}); }

85

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Exemple de constructeurs (suite)

Technique de rutilisation : crer un constructeur exhaustif (dot de tous les paramtres), puis crer dautres constructeurs appelant systmatiqement le constructeur exhaustif.

86

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Hritage Hritage de classe

87

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Hritage

1 2 3

Les descendants par hritage sont nomms des sous classes. Le parent direct est une super classe. Une sous classe est une version spcialise dune classe qui hrite de toutes les variables dinstance et mthodes.

88

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Hritage (suite)
1

Mot-cl extends
class Point3D extends Point { int z; Point3D(int x, int y, int z) { this.x = x; this.y = y; this.z = z; } Point3D() { Point3D(-1, -1, -1); } }

89

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Hritage (suite)
1

Syntaxe gnrique
class NomClasse { type variableInstance1; type variableInstanceN; type nomMethode1(liste-parametres) { corps-methode; } type nomMethodeN(liste-parametres) { corps-methode; } }

90

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Hritage (suite)
1

Pas dhritage multiple, pour des raisons de performances et de complexit (en maintenance). la place, notion dinterface. Il existe une classe au sommet de la hirarchie, Object. Sans mot-cl extends, le compilateur met automatiquement extends Object. De la mme manire que lon peut assigner une variable int un byte, on peut dclarer une variable de type Object et y stocker une rfrence une instance de toute sous classe dObject.

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Surcharge, rednition
super

Sous-typage, transtypage, appartenance de type Surcharge Rednition Rpartition de mthode dynamique final, static, abstract

92

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Instruction super
1

super rfre aux variables dinstance et aux constructeurs de

la super classe.
class Point3D extends Point { int z; Point3D(int x, int y, int z) { super(x, y); // Appel de Point(x,y). this.z = z; } }
2

Cet appel au constructeur de la classe mre doit tre la 1ire ligne du constructeur.
93

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Instruction super (suite)


super peut galement se rfrer aux mthodes de la super

classe :
2

super.distance(x, y) appelle la mthode distance() de la super classe de linstance this.

Exemple animalier (voir lexcellent ouvrage le mystre des chats peintres de Heather Busch et Burton Silver, http ://www.monpa.com/wcp/index.html)

94

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Instruction super (suite)


class ChatPeintre extends Chat { // Variables dinstances String style; int coteMoyenne; // cote moyenne dune oeuvre // Constructeurs public ChatArtiste(String sonNom, int sonAge, float sonTauxRonron, Color[] sonPelage, String sonStyle, int saCote) { super(sonNom, sonAge, sonTauxRonron, sonPelage); style = sonStyle; coteMoyenne = saCote; } // Methodes public peindre() { ... } }

95

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Un artiste en pleine action

source : http ://www.monpa.com/wcp/index.html

96

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ofppt.com

Sous-typage, transtypage, instanceof


1 2

Le typage dune variable lui permet de rfrencer tout sous type (classe parente) ; la mthode miauler() est dnie dans Chat. La mthode peindre() nest dnie que dans ChatPeintre.
Chat gouttiere = new Chat("zephir", 1, 0.9); ChatPeintre moustacheDeDali = new ChatPeintre("dali", // nom de lartiste 2, // son age 0.1, // son taux rr {Color.white, Color.black}, "aLaDali",// son style 20000); // sa cote moyenne moustacheDeDali.peindre(); gouttiere.peindre(); // valide // illegal

97

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Sous-typage, transtypage, instanceof (suite)


1

instanceof permet de savoir si un objet est dun type

donn ou non.
// true System.out.print(gouttiere instanceof Chat); // true System.out.print(moustacheDeDali instanceof Chat); // false System.out.print(gouttiere instanceof ChatPeintre); moustacheDeDali = null; // false System.out.print(moustacheDeDali instanceof ChatPeintre);

98

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Sous-typage, transtypage, instanceof (suite)


1

Transtypage (ou cast en anglais) permet de changer le type, lorsque cela est permis.
Chat ch = new Chat("zephir", 1, 0.9); ChatPeintre chP; chP = ch; // Erreur de compilation if (ch instanceof ChatPeintre)// Bonnes manieres chP = (ChatPeintre)ch; // transtypage

99

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Surcharge de mthode

Plusieurs mthodes peuvent porter le mme nom : surcharge de mthode. Direntiation sur la signature de type : le nombre et le type des paramtres. Deux mthodes dune mme classe de mmes nom et signature de type est illgal. Exemple de surcharge

100

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Surcharge de mthode (suite)


class Point { int x, y; Point(int x, int y) { this.x = x; this.y = y; } double distance(int x, int y) { int dx = this.x - x; int dy = this.y - y; return Math.sqrt(dx*dx + dy*dy); } double distance(Point p) { return distance(p.x, p.y); } } class PointDist { public static void main(String args[]) { Point p1 = new Point(0, 0); Point p2 = new Point(30, 40); System.out.println("p1.distance(p2) = " +

101

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

www.cours-ista.com

Surcharge de mthode (suite)


p1.distance(p2)); System.out.println("p1.distance(60, 80) = " + p1.distance(60, 80)); }
5

Exemple animalier
class Chat { .... void vieillir() { age += 1; } void vieillir(int n) { age += n; } // Surcharge de methode

102

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rednition de mthode
1

Distance en perspective dans Point3D (distance 2D entre x/z et y/z) rednir distance(x, y) de Point2D. Ex. de surcharge de distance 3D et de rednition de distance 2D
class Point { int x, y; Point(int x, int y) { this.x = x; this.y = y; } double distance(int x, int y) { int dx = this.x - x; int dy = this.y - y; return Math.sqrt(dx*dx + dy*dy); } double distance(Point p) { return distance(p.x, p.y); } }// class Point

// Surcharge

103

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rednition de mthode (suite)


class Point3D extends Point { int z; Point3D(int x, int y, int z) { super(x, y); // Appel de Point(x,y) this.z = z; } double distance (int x, int y, int z) { int dx = this.x - x; int dy = this.y - y; int dz = this.z - z; return Math.sqrt(dx*dx + dy*dy + dz*dz); } double distance(Point3D other) { // Surcharge return distance(other.x, other.y, other.z); } double distance(int x, int y) { // Redefinition double dx = (this.x / z) - x; double dy = (this.y / z) - y; return Math.sqrt(dx*dx + dy*dy); } }

104

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rednition de mthode (suite)


class Point3DDist { public static void main(String args[]) { Point3D p1 = new Point3D(30, 40, 10); Point3D p2 = new Point3D(0, 0, 0); Point p = new Point(4, 6); System.out.println("p1.distance(p2) = " + p1.distance(p2)); System.out.println("p1.distance(4, 6) = " + p1.distance(4, 6)); System.out.println("p1.distance(p) = " + p1.distance(p)); } }

Lachage du programme est le suivant. Pourquoi ?


Prompt > java Point3DDist p1.distance(p2) = 50.9902 p1.distance(4,6) = 2.23607 p1.distance(p) = 2.23607

105

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rednition de mthode (suite)


1

Appel de distance sur un Point3D (p1) :


excution de distance(Point p) hrite de la super classe (mthode non rednie). Mais ensuite appel de distance(int x, int y) de Point3D, pas de Point. Slection de mthode selon le type de linstance et non selon la classe dans laquelle la mthode courante sexcute : rpartition de mthode dynamique.

106

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rpartition de mthode dynamique


class Parent { void appel() { System.out.println("Dans Parent.appel()"); } class Enfant extends Parent { void appel() { System.out.println("Dans Enfant.appel()"); } class Repartition { public static void main(String args[]) { Parent moi = new Enfant(); moi.appel(); } }

107

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Rpartition de mthode dynamique (suite)


1

Lors Le de compilateur moi.appel() vrie que Parent a une mthode appel(),


lenvironnement dexcution remarque que la rfrence moi est en fait vers une instance dEnfant appel de Enfant.appel()

2 3

Il sagit dune forme de polymorphisme lexcution. Cela permet des bibliothques existantes dappeler des mthodes sur des instances de nouvelles classes sans recompilation.

108

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction final
1 2

Variable dinstance ou mthode non rednissable : final. Pour des variables, convention de majuscules
final int FILE_QUIT = 1 ;

3 4

Les sous classes ne peuvent rednir les mthodes final. Petites mthodes final peuvent tre optimises (appels en ligne par recopie du code). final pour les variables est similaire au const du C++. Il ny a pas dquivalent de final pour les mthodes en C++.

109

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Mthode finalize()

Instance dobjet ayant une resource non java (descripteur de chier) : moyen de la librer. Ajout dune mthode finalize() la classe. Appele chaque libration dune instance dobjet de cette classe.

110

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction static
mthode static : utilise en dehors de tout contexte dinstance. Mthode static ne peut appeler directement que des mthodes static. Ne peut utiliser this ou super. Ne peut utiliser une variable dinstance. code. Quasiment des variables globales. utiliser avec parcimonie . . .

Variables static : visibles de toute autre portion de

Bloc static : excut une seule fois, au premier chargement de la classe.


111

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction static (suite)


Exemple
class Statique { static int a = 3; static int b; static void methode(int x) { System.out.println("x = " + x + ", a = " + a + ", b = " + b); } static { System.out.print("Initialisation" + " du bloc statique"); b = a * 4; }

112

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction static (suite)


public static void main(String args[]) { methode(42); } }

Lachage est
Prompt > java Statique Initialisation du bloc statique x = 42, a = 3, b = 12

Initialisation de a et b. Excution du bloc static. Appel de main().


113

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction static (suite)


Appel dune variable ou mthode static par le nom de la
classe
class ClasseStatique { static int a = 42; static int b = 99; static void appel() { System.out.println("a = " + a); } } class StatiqueParNom { public static void main(String args[]) { ClasseStatique.callme(); System.out.println("b = " + ClasseStatique.b);

114

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction static (suite)


} }

Exemple animalier
class Chat { String int Color[] float static int nom; age; couleurPelage; tauxRonronnement; ageSevrage = 1; // // // // // nom annees couleurs de 0 a 1 statique

boolean estAdoptable() { if (age > ageSevrage) { return true; } else {

115

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction static (suite)

return false; } } }

116

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction abstract
1 2

Partie spcication, partie implantation : classes abstraites . Certaines mthodes, sans corps, doivent tre rednies par les sous classes : mthodes abstraites. Cest la responsabilit de sous classe. Toute classe contenant des mthodes abstraites (mot cl abstract) doit tre dclare abstraite. Les classes abstraites ne peuvent tre instancies par new. Pas de constructeurs ou de mthodes static. Une sous classe dune classe statique soit implante toutes les mthodes abstraites, soit est elle-mme abstraite.

117

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction abstract (suite)


Exemple
abstract class ParentAbstrait { abstract void appel(); void moiaussi() { System.out.print("Dans ParentAbstrait.moiaussi()"); } } class EnfantConcret extends ParentAbstrait { void appel() { System.out.print("Dans EnfantConcret.moiaussi()"); } } class AbstractionMain { public static void main(String args[]) { ParentAbstrait etre = new EnfantConcret(); etre.appel(); etre.moiaussi(); } }

118

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Paquetages et interfaces Paquetages & import Protection daccs & modicateurs Interfaces

119

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Paquetages
1 2

la fois un mcanisme de nommage et un mcanisme de restriction de visibilit. Forme gnrale dun source java
une unique declaration de paquetage (optionnel) declarations dimportations (optionnel) une unique declaration de classe publique declarations de classes privees (optionnel)

Pas de dclaration de paquetage : les classes dclares font partie du paquetage par dfaut, sans nom. Une classe dclare dans le paquetage monPaquetage le source doit tre dans le rpertoire monPaquetage (il y a distinction minuscule-majuscule).
120

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Paquetages (suite)
1

Syntaxe gnrique :
package pkg1[.pkg2[.pkg3]] ;

Par exemple
package java.awt.image ;

doit tre stock dans


java/awt/image (sous UNIX), java\awt\image (sous Windows) ou java :awt :image (sous Macintosh).
3

La racine de toute hirarchie de paquetage est une entre de la variable denvironnement CLASSPATH.

121

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Paquetages (suite) Ayant une classe ClasseTest dans un paquetage test, il faut
soit se mettre dans le rpertoire pre de test et lancer
java test.ClasseTest,

soit ajouter le rpertoire test la variable CLASSPATH :


CLASSPATH=.;c:\code\test;c:\java\classes

soit lancer :
java -dclasspath=.;c:\code\test;c:\java\classes ClasseTest

122

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction import
1

Entrer les noms complets de classes et mthodes fort long Tout ou partie dun paquetage est amen en visibilit directe, avec import. Syntaxe gnrique
import pkg1[.pkg2].(nomclasse|*);

Exemple
import java.util.Date; import java.io.*;

Chargement de gros paquetages perte de performance en compilation. Pas deet lexcution. Toutes les classes livres dans la distribution java sont dans le paquetage java. Les Classes de base du langage se trouvent dans java.lang.
123

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Instruction import (suite)


7 8

Il y a une importation implicite de import java.lang.* Deux classes de mme nom dans 2 paquetages dirents imports avec * : le compilateur ne dit rien jusqu lutilisation dune des classes, o cest une erreur de compilation. Utilisation de noms complets. Au lieu de
import java.util.*; class MaDate extends Date { ... }

on peut utiliser class MaDate extends java.util.Date


...

124

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Protections daccs
4 catgories de visibilit : Sous classe dans le mme paquetage. Non sous classe dans le mme paquetage. Sous classe dans des paquetages dirents. Classes ni dans le mme paquetage, ni sous classes.
1 2 3

Dclar public : peut tre vu de partout. Dclar private : ne peut tre vu en dehors dune classe. Pas de modicateur : visible des sous classes et des autres classes du mme paquetage. Situation par dfaut. Dclar protected : peut tre vu hors du paquetage, mais seulement des sous classes.
125

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Protections daccs (suite)


Dclar private protected : ne peut tre vu que des sous classes. 6 protected pas la mme signication quen C++. Plutt similaire au friend du C++. Le protected du C++ est mul par private protected en java. Exemple animalier
5

class Chat { // Les differents champs sont protected (et non private), // de facon a etre visibles des sous-classes protected String nom; // nom du fauve protected int age; // en annees protected Color[] couleurPelage; // ses couleurs protected float tauxRonronnement; // entre 0 et 1 protected static int ageSevrage = 1; // Champ statique

126

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Protections daccs (suite)


// Les constructeurs doivent etre vus de partout public Chat(String sonNom, int sonAge, float sonTauxRonron, Color[] sesCouleurs) { nom = sonNom; age = sonAge; tauxRonronnement = sonTauxRonron; couleurPelage = sesCouleurs; } public Chat() { this(new String("minou"), 1, 0.5, {Color.black, Color.white}); }

127

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Protections daccs (suite)


// Accesseurs public int retournerAge() { return(age); } public String retournerNom() { return(nom); } public Color[] retournerCouleurPelage() { return(couleurPelage); } public float retournerTauxRonron() { return(tauxRonronnement); } // Autres methodes public void vieillir() { age += 1; } public void vieillir(int n) { age += n; } public boolean estAdoptable() {

128

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Protections daccs (suite)


if (age > ageSevrage) { return true; } else { return false; } } // Methode privee private void emettreSon(String adire) { // Emulation ultra pauvre du son System.out.println(" " + adire); } // Utilisation de la methode privee public void miauler(int nbMiaulements) { for(int i + 0; i < nbMiaulements; i++) { emettreSon("Miaou !"); }

129

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Protections daccs (suite)

} }

130

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Interfaces
1 2

4 5

Interfaces : comme des classes, mais sans variable dinstance et des mthodes dclares sans corps. Une classe peut implanter une nombre quelconque dinterfaces. Pour cela, la classe doit fournir limplantation de toutes les mthodes de linterface. La signature de type doit tre respecte. Les interfaces vivent dans une hirarchie dirente de celles des classes deux classes sans aucun lien hirarchique peuvent implanter la mme interface. Les interfaces sont aussi utiles que lhritage multiple, mais donnent du code plus facile maintenir.
131

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Interfaces (suite)
8

En eet, ne repose pas sur des donnes, juste sur des mthodes. Syntaxe gnrique
interface nom { type-retour nom-methode1(liste-parametres); type nomvariable-finale = valeur; }

10

11

Toutes les mthodes implantant une interface doivent tre dclares public. Variables dclares lintrieur dune interface implicitement final.

132

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Exemple dinterface
1

Syntaxe gnrique dimplantation dinterface


class nomclasse [extends superclasse] [implements interface0 [,interface1...]] { corps-de-classe }

2 3

Les crochets dsignent des mots optionnels Exemple


interface Callback { void callback(int parametre) { } class Client implements Callback { void callback(int p) { System.out.println("Callback de " + p); } }

133

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Interface & rsolution dynamique de mthode


1

utilisant une interface comme type au lieu dune classe. Toute instance dune classe implantant cette interface peut tre stocke dans cette variable. Si lon veut appeler une mthode via une telle variable, limplantation correcte sera appelle selon linstance courante. Les classes peuvent donc tre cres aprs le code qui les appelle. Cette technique de rsolution dynamique de mthode est coteuse en temps.

On peut dclarer des variables rfrences des objets

134

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Classes & objets Hritage Surcharge, rednition Paquetages & interfaces

Interface & rsolution dynamique de mthode (suite)


6

Aspect dencapsulation
class TestInterface { public static void main(String args[]) { Callback c = new Client(); c.callback(12); } }

c ne peut tre utilis que pour accder la mthode callback() et non un autre aspect de Client.

135

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Exceptions

Rfrences : The Java Language Specication, J. Gosling, B. Joy et G. Steele

136

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Fonctionnement gnral du systme dexceptions Gnration try/catch throw, throws


finally

137

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Gnration et gestion dexceptions


1 2

Exception : condition anormale survenant lors de lexcution. Lorsquune exception survient :


un objet reprsentant cette exception est cr ; cet objet est jet (thrown) dans la mthode ayant provoqu lerreur.

Cette mthode peut choisir :


de grer lexception elle-mme, de la passer sans la grer.

De toutes faons lexception est capte (caught) et traite, en dernier recours par lenvironnement dexcution Java.

138

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Gnration et gestion dexceptions (suite)


4

Les exceptions peuvent tre gnres


par lenvironnement dexcution Java, manuellement par du code.

Les exceptions jetes (ou leves) par lenvironnement dexcution rsultent de violations des rgles du langage ou des contraintes de cet environnement dexcution.

139

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Les 5 mots cls


1

Il y a 5 mots cls dinstructions ddies la gestion des exceptions : try, catch, throw, throws et finally. Des instructions o lon veut surveiller la leve dune exception sont mises dans un bloc prcd de linstruction try. Le code peut capter cette exception en utilisant catch et la grer.

140

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Les 5 mots cls (suite)


4

Les exceptions gnres par le systme sont automatiquement jetes par lenvironnement dexcution Java. Pour jeter une exception manuellement, utiliesr throw. Toute exception qui est jete hors dune mthode doit tre spcie comme telle avec throws. Tout code qui doit absolument tre excut avant quune mthode ne retourne est plac dans un bloc finally.

141

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Schma
Le schma est donc
try { // bloc de code a surveiller } catch (EceptionType1 exceptObj) { // gestionnaire dexception pour ExceptionType1 } catch (EceptionType2 exceptObj) { // gestionnaire dexception pour ExceptionType2 } ... finally { // bloc de code a executer // avant de sortir de la methode }

142

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Types dexceptions
1

Une classe est au sommet de la hirarchie des exceptions :


Throwable

Deux sous-classes de Throwable :


Exception : conditions exceptionnelles que les programmes utilisateur devraient traiter. Error : exceptions catastrophiques que normalement seul lenvironnement dexcution devrait grer. Une sous-classe dException, RuntimeException, pour les

exceptions de lenvironnement dexcution.

143

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Exceptions non gres


1

Considrons le code suivant o une division par zro nest pas gre par la programme :
class ExcepDiv0 { public static void main(String args[]) { int d = 0; int a = 42 / d; } }

Lorsque lenvironnement dexcution essaie dexcuter la division, il construit un nouvel objet exception an darrter le code et de grer cette condition derreur. Le ux de code est alors interrompu et la pile dappels (des direntes mthodes invoques) est inspecte en qute dun gestionnaire dexceptions.
144

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Exceptions non gres (suite)


1

Nayant pas fourni de gestionnaire au sein du programme, le gestionnaire par dfaut de lenvironnement dexcution se met en route. Il ache la valeur en String de lexception et la trace de la pile dappels :
/home/mounier> java ExcepDiv0 java.lang.ArithmeticException: / by zero at ExcepDiv0.main(ExcepDiv0.java:4)

145

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instructions try et catch

Un bloc try est destin tre protg, gard contre toute exception susceptible de survenir. Juste derirre un bloc try, il faut mettre un bloc catch qui sert de gestionnaire dexception. Le paramtre de linstruction catch indique le type et le nom de linstance de lexception gre.

146

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instructions try et catch (suite)


class ExcepDiv0 { public static void main(String args[]) { try { int d = 0; int a = 42 / d; } catch (ArithmeticException e) { System.out.println("Div par zero"); } } }
3

La porte dun bloc catch est restreinte aux instructions du bloc try immdiatement prcdent.

147

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instructions catch multiples

1 2

On peut grer plusieurs exceptions la suite lune de lautre. Lorsquune exception survient, lenvironnement dexcution inspecte les instructions catch les unes aprs les autres, dans lordre o elles ont t crites. Il faut donc mettre les exceptions les plus spciques dabord.

148

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instruction throw
1

Elle permet de gnrer une exception, via un appel de la forme


trow TrhowableInstance ;

Cette instance peut tre cre par un new ou tre une instance dune exception dja existante. Le ux dexcution est alors stopp et le bloc try immdiatement englobant est inspect, an de voir sil possde une instruction catch correspondante linstance gnre. Si ce nest pas le cas, le 2ime bloc try englobant est inspect ; et ainsi de suite.

149

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instruction throw (suite)


1

Exemple
class ThrowDemo { static void demoproc() { try { throw new NullPointerException("demo"); } catch (NullPointerException e2) { System.out.print("attrapee ds demoproc()"); throw e2; } public static void main(String args[]) { try { demoproc(); } catch(NullPointerException e1) { System.out.print("attrapee ds main()"); }

150

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instruction throws
1

Si une mthode est susceptible de gnrer une exception quelle ne gre pas, elle doit le spcier, de faon que ceux qui lappellent puissent se prmunir contre lexception. Linstruction throws est utilise pour spcier la liste des exceptions quune mthode est susceptible de gnrer. Pour la plupart des sous-classes dException, le compilateur forcera dclarer quels types dexception peuvent tre gnres (sinon, le programme ne compile pas). Cette rgle ne sapplique pas Error, RuntimeException ou leurs sous-classes.

151

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instruction throws (suite)


1

Lexemple suivant ne compilera pas :


class ThrowsDemo1 { static void proc() { System.out.println("dans proc()"); throw new IllegalAccessException("demo"); } public static void main(String args[]) { proc(); } }

Ce programme ne compilera pas :


parce que proc() doit dclarer quelle peut gnrer IllegalAccessException ; parce que main() doit avoir un bloc try/catch pour grer 152 lexception en question.

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instruction throw (suite)


1

Lexemple correct est :


class ThrowsDemo1 { static void proc() throws IllegalAccessException { System.out.println("dans proc()"); throw new IllegalAccessException("demo"); } public static void main(String args[]) { try { demoproc(); } catch(IllegalAccessException e) { System.out.println(e + "attrapee"); } } }

153

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Instruction finally
1

Un bloc finally est toujours excut, quune exception ait t gnre ou non. Il est excut avant linstruction suivant le bloc try prcdent. Si le bloc try prcdent contient un return, le bloc finally est excut avant que la mthode ne retourne. Ceci peut tre pratique pour fermer des chiers ouverts et pour librer diverses ressources. Le bloc finally est optionnel.

154

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Syst. dexceptions

Conclusion
1

Le code suivant
FileInputStream fis; try { fis = new FileInputStream("readme.txt"); } catch (FileNotFoundException e) { fis = new FileInputStream("default.txt"); }

est plus propre que


#include <sys/errno.h> int fd; fd = open("readme.txt"); if (fd == -1 && errno == EEXIST) fd = open("default.txt");

155

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classes utilitaires de base

Rfrences : Java et Internet Concepts et programmation, G. Roussel, E. Duris, N. Bedon et R. Forax Java in a Nutshell, D. Flanagan, The Java Language Specication, J. Gosling, B. Joy, G. Steele

156

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classes Object, System, PrintStream Classe mre java.Object Classe java.lang.Object Classe dentre-sortie java.io.PrintStream

157

Mthodes de la classe Object


methode() String toString() But

158

int hashCode() boolean equals() protected Object clone() protected void finalize()

Renvoie une vue en chane de caractres de this ; par dfaut, renvoie le nom de la classe suivi de son code de hachage. Renvoie le code de hachage associ lobjet. Teste lgalit, la plus smatiquement signicative possible. Renvoie une copie supercielle (champ champ) de lobjet (throws CloneNotSupportedException). Appele en libration mmoire (throws Throwable).

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthodes toString(), hashCode()


1

toString() : Forme achable de lobjet par System.out.println().

2 3 4 5

La rednir est de bon ton.


hashCode() : code de hachage de lobjet ; utilis dans java.util.hashMap. Contrat de la mthode hashCode() : Pour 2 Object, c1 et c2, c1.equals(c2) c1.hashCode() == c2.hashCode() Donc, si lon rednit equals(), on doit rednir galement hashCode().

159

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthode equals()

1 2 3 4

Par dfaut, teste lgalit des rfrences. Il est de bon ton de la rednir en test dgalit de contenu. Erreur commune : surcharge au lieu de rednition ; le paramtre doit tre de type Object.

160

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthode equals() (suite)


1

Exemple sur des classes de nombres complexes :

public class Complexe { protected double partieReelle, partieImaginaire; public Complexe(double r, double i) { partieReelle = r; partieImaginaire = i; } public boolean equals(Object obj) { if(!(obj instanceof Complexe)) { return false; } Complexe c = (Complexe)obj; return (partieReelle == c.partieReelle && partieImaginaire == c.partieImaginaire);

161

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthode equals() (suite)

Vrier que la relation binaire induite est rexive, symtrique et transitive. Vrier galement lidempotence (plusieurs valuations de x.equals(y) donne toujours le mme rsultat), et que null est absorbant : x.equals(null) est toujours false.

162

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Champs et mthodes de la classe System


1 2

Mthodes et champs utilitaires java. Champs :


static InputStream in entre standard (par dfaut le clavier) static PrintStream out sortie standard (par dfaut lcran) static PrintStream err sortie erreur standard (par dfaut lcran)

163

Champs et mthodes de la classe System (suite)164


Mthodes :
methode() static long currentTimeMillis() static void exit(int status) static void gc() But renvoie le nombre de millisecondes depuis le 1er janvier 1970. arrte la machine virtuelle java en cours dexcution. demande au ramasse-miettes de rcuprer la mmoire inutilise.

Mthodes de PrintStream
1

165

Mthodes :
But Ferme le ux dentre/sortie Vide le tampon mmoire associ au ux (force lcriture) Ache largument sur la sortie standard. Accepte des boolean, char, int, long, float, double, Object et String. Mme eet que print(), mais rajoute un saut de ligne criture binaire dun octet sur le ux dentre/sortie

methode() void close() void flush() void print(...)

void println(...) void write(int b)

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthode main() et classes demballage des types primitifs Mthode main() et ses arguments classes demballage des types primitifs (boolean, int, float, . . . )

166

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthode main() et ses arguments


1

Syntaxe
public static void main(String args[]) ... public : la mthode peut tre appele de partout static : pas besoin de crer dobjet pour lappeler void : elle ne renvoie rien String args[] : args est un tableau de String

2 3 4 5 6

1ier argument args[0], 2ime argument args[1], . . .

167

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthode main() et ses arguments (suite)


1 2

Nombre darguments : args.length Attention ! Ne pas confondre


le champ length : nombre dlments dun tableau la mthode length() de la classe String : longueur de la chane de caractres

Exemple dachage des arguments de la ligne de commande ainsi que de leur longueur :

class TestMain { public static void main(String args[]) { for(int i = 0; i < args.length; i++) System.out.println("arg no " + i+1 + " : " + arg[i] + " de longueur : " + args[i].length()); } }

168

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthode main() et ses arguments (suite)


1

Par un appel dans une fentre Dos (resp. une fentre terminal Unix/Linux) de la forme
java TestMain toto 4 gabuzomeu 7.8 +&)

ache
arg arg arg arg arg no no no no no 1 2 3 4 4 : : : : : toto de longueur : 4 4 de longueur : 1 gabuzomeu de longueur : 9 7.8 de longueur : 3 +&) de longueur : 3

169

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Liste des classes demballage


1 2 3

Permettent de disposer de mthodes utilitaires de manipulation des types primitifs. Hritent de la classe abstraite Number. Les classes demballage des types primitifs sont : Boolean, Byte, Character, Short, Integer, Long, Float et Double. Mthode xxxValue(), o xxx est lun des noms de type primitf correspondant ; elle permet dobtenir une variable du type primitif correspondant.
Integer un = new Integer(1); int i = un.intValue();

Mthode parseXXX(String) o XXX est lun des noms de classe prcdent ;


170

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Liste des classes demballage (suite)

2 3 4

elle permet dobtenir un objet de type numrique ou boolen partir dune chane de caractres. Par ex. parseDouble("2.5") ; renvoie un Double. Linverse est ralis par toString(). Les constantes MIN_VALUE et MAX_VALUE contiennent les valeurs minimale et maximale.

171

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Scanner (java.util.Scanner)

172

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classe Scanner : aperu


1

La classe Scanner permet entre autres lentre facile de types primitifs et de String au clavier. Il sut de crer un objet Scanner avec en argument le ux lire, puis dappeler une mthode nextXXX() selon le type primitif XXX lire Exemple dentre dun entier au clavier :

Scanner sc = new Scanner(System.in); // Creation dun Scanner // le flux System.in (l int i = sc.nextInt(); // prise dun entier sur // (au clavier)

173

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classe Scanner : constructeurs


Dirents constructeurs sont disponibles
methode() Scanner(File source) But Construit un objet de type Scanner produisant des valeurs partir du chier spci. Construit un objet de type Scanner produisant des valeurs partir du ux dentre spci. Construit un objet de type Scanner produisant des valeurs partir de la chane spcie.

Scanner(InputStream source) Scanner(String source)

174

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classe Scanner : mthodes essentielles


1 2

Rappel : un ux dentre est compos de lexmes, ou atomes syntaxiques, qui sont spars par des dlimiteurs. Les mthodes boolean hasNextXXX() renvoient true si le prochain lexme correspond au type attendu. La chane XXX prcdente est lune des suivantes :
BigDecimal, BigInteger, Boolean, Byte, Double, Float, Int, Long, Short, Line selon le type attendu, qui sera respectivement BigDecimal, BigInteger, boolean, byte, double, float, int, long, short pour les 9 premires, et une nouvelle ligne

pour la dernire. Ainsi, hasNextInt() renvoie true si le prochain lexme est un int. Les mthodes YYY nextXXX() renvoient la valeur du prochain lexme selon le type correspondant la chane XXX
175

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classe Scanner : mthodes essentielles (suite)


7

Ainsi, int nextInt() renvoie le prochain int, String nextLine() renvoie la prochaine ligne, int nextDouble() renvoie le prochain double, etc. La mthode boolean hasNext() renvoie true sil y a un prochain lexme. La mthode String next() renvoie le prochain lexme disponible.

176

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classe Scanner : Exemples

Exemple de lecture dans un chier :


Scanner sc = new Scanner(new File("myNumbers")); while (sc.hasNextLong()) { long aLong = sc.nextLong(); }

177

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Exemple dun cercle


Exemple dune classe Cercle avec utilisation dun Scanner
import java.util.Scanner; /** * Classe representant un cercle **/ class Cercle { // champs : rayon du cercle double r; // Constructeur : initialisation des champs Cercle(double nouvRayon) { r = nouvRayon; } // methode de calcul dune surface double calculeSurface() {

178

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Exemple dun cercle (suite)


return(3.1416*r*r); } }// fin de class Cercle /** * Ce programme affiche la surface dun cercle dont * lutilisateur entre le rayon **/ public class CercleMain { // methode main() : point dentree du programme public static void main(String[] args) { // pour les entrees de donnees au clavier Scanner entreeClavier = new Scanner(System.in); // capture dun double au clavier

179

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Exemple dun cercle (suite)


double rayon = entreeClavier.nextDouble(); // creation dun objet de type Cercle Cercle monCercle = new Cercle(rayon); // calcul de sa surface surface = monCercle.calculeSurface(); // affichage du resultat System.out.println("Voici la surface du cercle" + "de rayon " + monCercle.r + " : " + surface); } }// fin de class CercleMain

180

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Classes java.applet.Applet et java.lang.String Notion dapplet, mthodes et exemple Classe String Classe StringBuffer

181

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Notion dapplet
1 2

Applet : mini-application, dont le code est tcharg travers le rseau. Est visualise par un navigateur ou par un visualiseur dapplets (applet viewer). Diverses restrictions de scurit.

182

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Notion dapplet (suite)


4 5

Une applet na pas de mthode main(). On tend la classe java.Applet, en rednissant diverses mthodes. Une applet nest pas sous le contrle de lactivit (thread) dexcution : elle rpond lorsque le navigateur le lui demande. Donc, pour des tches longues, lapplet doit crer sa propre activit.

183

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthodes rednir
Mthodes de base dApplet :
1

void init()

Appele lors du premier chargement de lapplet. Utilise pour des initialisations, de prfrence un constructeur.
2

void destroy()

Appele lors du dchargement de lapplet. Utilise pour librer des ressources.


3

void start()

Applele lorsque lapplet devient visible. Souvent utilise avec des animations et des activits (threads).
4

void stop()

Applele lorsque lapplet est masque.


184

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthodes rednir (suite)


Une mthode hrite de Container :
public void paint(Graphics g)

que le navigateur appelle pour demander lapplet sa mise a jour graphique. Autres mthodes dApplet :
1

String getAppletInfo()

Pour obtenir des informations propos de lapplet


2

String[][] getParameterInfo()

Description des paramtres de lapplet.

185

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Mthodes rednir (suite)


AudioClip getAudioClip(URL url)

Renvoie une rfrence une instance dobjet de type AudioClip.


2

void play(URL url) joue lAudioClip spci ladresse url. Image getImage(URL url)

Renvoie une rfrence une instance dobjet de type Image.

186

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Exemple : un disque color


Classe Disk : surface circulaire colore
import java.awt.*; public class Disk { protected int protected int protected Color

x, y; size; color;

// position du disque // diametre du disque // couleur du disque

public Disk(int Xpos, int Ypos, int radius) { x = Xpos; y = Ypos; size = radius; color = Color.red; // Initialement rouge } // methodes public void public void public void fixant des attributs (modificateurs) setXY(int newX, int newY) { x = newX; y = newY;} setSize(int newSize) { size = newSize; } setColor(Color newColor) { color = newColor;}

187

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Exemple : un disque color (suite)


// methodes accedant aux attributs (accesseurs) public int getX() { return public int getY() { return public int getSize() { return public Color getColor() { return // Afficher le disque public void paint(Graphics g) { g.setColor(color); g.fillOval(x-(size/2), y-(size/2), size, size); } }// public class Disk x; } y; } size; } color; }

Classe DiskField, qui ache le disque prcdent :

188

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Exemple : un disque color (suite)


import java.applet.*; import java.awt.*; public class DiskField extends Applet { int Disk x = 150, y = 50, size = 100; theDisk = null; // position et diametre

// Initialisation de lapplet public void init() { theDisk = new Disk(x, y, size);

// Dessiner le disque public void paint(Graphics g) { // Demander au navigateur dappeler la methode paint() // pour afficher le disque theDisk.paint(g); }

189

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Exemple : un disque color (suite)

public void start() { ; } public void stop() { ; } }// class DiskField

Pour acher lapplet, on a besoin dun chier HTML qui la rfrence.


<APPLET code="DiskField.class" width=150 height=100> </APPLET>

190

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Construction de String
1 2

Dans java.lang : String pour les chanes immuables et StringBuffer pour celles qui sont modiables. String et StringBuffer sont dclares final, de faon raliser certaines optimisations. Constructeur de recopie public String(String original). Il y a une syntaxe spciale pour les chanes qui permet une cration-initialisation rapide :
String s = "abc"; System.out.println(s.length()); System.out.println("abcdef".length());

3 4

Les 2 dernires lignes vont acher respectivement 3 et 6. Ne pas confondre la mthode length() avec la variable dinstance length de rfrences des tableaux.
191

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Concatnation de chanes
1 2

Pas de surcharge, part +. Par exemple :


String s = "Impossible " + "deternuer " + "les yeux ouverts.";

est nettement plus lisible que


String s = new StringBuffer("Impossible ") .append("deternuer ") .append("les yeux ouverts.") .toString();

qui est exactement ce qui se passe lorsque le code est excut.


192

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Conversion de chanes
append() appelle en fait la mthode valueOf(). Pour des

types primitifs, cette dernire renvoie une repsentation en chane. Pour des objets, elle appelle la mthode toString() de lobjet. toString() est une mthode de Object, donc tout objet en hrite.

193

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Conversion de chanes (suite)


Cest une BONNE PRATIQUE que de rednir toString() pour ses propres classes. Exemple
class Point { int x, y; Point(int x, int y) { this.x = x; this.y = y; } public String toString() { return "Point[" + x + "," + y + "]"; } class toStringDemo { public static void main(String args[]) { Point p = new Point(20, 20); System.out.println("p = " + p); }

194

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Extraction/Comparaison
1

charAt() permet dextraire un caractre. Par ex. "abc".charAt(1) renvoie b. startsWith() (resp. endsWith() teste si la chane appelante

3 4

commence (resp. nit) par la chane fournie en paramtre. "Nabuchodonosor".endsWith("nosor") et "Nabuchodonosor".startsWith("Nabu") renvoient tous deux true. On peut galement spcier lindice de dbut de comparaison. Par exemple lexpression
"HoueiNeng".startsWith("Neng", 5)

renvoie true.
195

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

galit

1 2

equals() teste lgalit caractre caractre. == teste lgalit des rfrences (des adresses mmoires, ou

pointeurs) pour voir si elles se rfrent la mme instance.

196

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Relation dordre

1 2

compareTo() compare 2 String selon un ordre alphabtique. int compareTo(String s) renvoie un rsultat ngatif si la chane appelante est infrieure s (le paramtre), 0 si elles

sont gales et un rsultat positif sinon.

197

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Recherche de sous-chane

Recherche de lindice doccurrence dun caractre ou dune sous-chane dans une chane.
int indexOf(int car); int lastindexOf(int car);

renvoient lindice de la premire (resp. la deernire) occurence (c..d. apparition) du caractre car.

198

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

Modications sur une copie de String


1

Puisque les String sont immuables, pour modier une chane, on peut soit utiliser un StringBuffer ou utiliser lune des mthodes suivantes, qui fournissent une copie modie dune String. substring() extrait une String dune autre. Par exemple :
"Bonjour a tous".substring(8) -> "a tous" "Bonjour a tous".substring(6, 5) -> "r a t"

199

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

www.cours-ista.com

Modications sur une copie de String (suite)

concat() cre un nouvel objet, la concatnate de la

chane appelante et du paramtre :


"Bonjour".concat(" a tous") -> "Bonjour a tous"
2

replace(char carSrc, char carDst) remplace toutes les occurrences de carSrc par carDst :
"Bonjour".replace(o, a) -> "Bajaur"

200

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

www.cours-ista.com

Modications sur une copie de String (suite)


toLowerCase() et toUpperCase() : conversion en

majuscules (resp. minuscules)


"Grenouille".toUpperCase() -> "GRENOUILLE" "BOEuf".toLowerCase() -> "bouef"
2

trim() enlve les espaces avant et aprs :


" Jai besoin dair "Jai besoin dair" ".trim() ->

201

Autres mthodes de String


methode() But

202 www.cours-ofppt.com

String concat(String Concatnation de this celle fournie en str) argument. boolean renvoie true si this contient la String contains(String s) argument. boolean renvoie true si this est gale (au sens du contentEquals(StringBuffer contenu) la StringBuffer argument. sb) static String Conversion dun tableau de caractres en copyValueOf(char[] String. data) static String Renvoie une String formatte (voir la doformat(String format, cumentation des API pour les chanes forObject... args) mat). boolean matches(String renvoie true si this correspond lexregex) pression rgulire regex. String[] split(String Dcoupe this selon les dlimiteurs fournis regex) en tant quexpression rgulire.

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

www.cours-ista.com

StringBuffer
1 2

Cest une chane modiable et susceptible de crotre et de dcrotre. charAt() renvoie un caractre n indice donn ; setCharAt() remplace un caractre un indice donn getChars() fonctionne de la mme manire que son homologue de String. Prototype identique :
void getChars(int srcBegin, int srcEnd, char [] dst, int dstBegin);

append() concatne le paramtre la chane appelante. En gnral appel via +. insert() insre une sous-chane n indice spci :
"Lenvie detre roi".insert(8, "de tout sauf ")

rsulte en
"Lenvie de tout sauf detre roi"

203

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

Object, System, E/S main() & emballage Scanner Applet & String

www.cours-ista.com

StringBuilder

Cest une chane modiable ayant les mme fonctionnalits que StringBuffer mais sans synchronisation multi-threads. Il est conseill de lutiliser pour les applications mono-thread.

204

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

java.util : Conteneurs et autres utilitaires

Rfrences : Java et Internet Concepts et programmation, G. Roussel, E. Duris, N. Bedon et R. Forax Data Structures & Problem Solving Using Java, M.A. Weiss Algorithms, R. Sedgewick
205

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Classes de java.util ; Classes et interfaces de comparaison Contenu du paquetage java.util Interface java.lang.Comparable Interface java.util.Comparator

206

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Classes et interfaces de java.util


On trouve les groupes de classes suivants : Comparaison sur des objets (interfaces Comparable et Comparator). Structures de donnes conteneurs (listes chanes, arbres, tables de hachage). Expressions rgulires (paquetage java.util.regexp). Classe Date, gestion de la date. Classe EventObject

207

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Classes et interfaces de java.util (suite)


Classes Timer et TimerTask Classe Observable, super classe des objets observables. Classe Random, gnrateur de nombres pseudo-alatoires. Classe Stack, pile dobjets. Classe StringTokenizer, lorsquinstancie avec un objet String, casse la chane en units lexicales spares par nimporte quel caractre. Journalisation (paquetage java.util.logging).

208

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Classes et interfaces de java.util (suite)

Stockage de paramtres (paquetage java.util.prefs). Classe BitSet, ensemble de bits arbitrairement grand. Des classes de gestion de zone gographique, de gestion des fuseaux horaires, de gestion du calendrier.

209

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classes et interfaces de java.util (suite)


On trouve diverses interfaces :
10 interfaces associes aux conteneurs. EventListener, interface marqueur pour tous les gestionnaires dvnements. Comparator, pour les objets dnissant une relation dordre (via compare(Object o1, Object o2) et equals(Object o)). Observer, dnit la mthode update() ncessaire pour quun objet observe des sous-classes de Observable.

210

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Interface java.lang.Comparable

Deux ements sont comparables (implanter Comparable) si lon peut leur appliquer
public int compareTo(Object other)

Cette mthode renvoie la distance entre this et other, au sens de la relation dordre induite.

211

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Interface java.util.Comparator
1

Objets comparateurs : spcialiss dans la dnition de relations dordre. Deux mthodes implanter :
int compare(Object o1, Object o2), orant le mme service que compareTo() de java.lang.Comparable boolean equals(Object o) testant lgalit de contenu.

Les mthodes de comparaison doivent en gnral tre compatibles avec le test dgalit.

212

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classes et interfaces conteneurs Catgories Transistions entre conteneurs Interfaces Collection et Map
Arrays

Itration

213

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Cadre de collections
Un cadre logiciel de collections est form de 1 Interfaces, ou types de donnes abstraits. 2 Implantations, classes concrtes (structures de donnes rutilisables). 3 Algorithmes, mthodes utilitaires comme tri ou recherche, polymorphes (fonctionnalits rutilisable).

214

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Catgories de conteneurs
1

Deux grandes catgories :


Type (interface) Collection, ou groupe dobjets. Type (interface) Map, table dassociation de couples cl-valeur.

Dans Collection, deux sous-catgories :


Type Set, ne pouvant contenir 2 fois le mme lment. Type List, lments indics par des entiers positifs. Dans Map, lobjet cl permet daccder lobjet valeur. Dans Map, couple cl-valeur : entre, de type Map.entry.

3 4

215

Types de conteneurs

216 www.cours-ofppt.com

Dirents types de conteneurs, selon linterface et la structure de donne.


Table de hachage Set List Map HashSet HashMap Implantations Tableau Arbre quilibr taille variable TreeSet ArrayList TreeMap Liste chane

Interfaces

LinkedList

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Transitions entre conteneurs


1

Dans Map :
values() renvoie une Collection des valeurs de la table keySet() renvoie un Set des cls de la table entrySet() renvoie un Map.entry des entres (paires cls/valeur) de la table Ce sont des vues de la table. Une modication dune vue est faite sur la table et vice versa.

Dans Collection :

217

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Transitions entre conteneurs (suite)


toArray() renvoie un tableau contenant tous les objets de la collection. Ce nest pas une vue qui est renvoye.
3

Dans la classe utilitaire Arrays :


toArray() renvoie un tableau contenant tous les objets de la collection. Ce nest pas une vue qui est renvoye.

218

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Interface Collection
Rsum des mthodes :
1

boolean add(Object o)

ajoute llment spci la collection. renvoie true si la collection a t modie par lopration (un Set ne peut contenir 2 fois le mme lment).
2

boolean contains(Object o) teste si la collection contient o boolean equals(Object o)

teste lgalit de contenu de la collection avec o.

219

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Interface Collection (suite)


4

Iterator iterator()

renvoie un itrateur sur les lments de la collection.


5 6

boolean remove(Object o) enlve une instance de o de la collection. int size() Object[] toArray()

renvoie le nombre dlments de la collection.


7

renvoie un tableau contenant tous les lments de la collection.

220

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Interface Map
1 2

Rsum des mthodes :


boolean containsKey(Object key)

teste si la table contient une entre avec la cl spcie.


boolean containsValue(Object value)

teste si la table contient une entre avec la valeur spcie.


3

boolean equals(Object o)

teste lgalit de contenu de la table avec o.


4

Object get(Object key)

renvoie la valeur de la table correspondant la cl key.

221

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Interface Map (suite)


5

Object put(Object key, Object value) associe la valeur value la cl key dans la table. Si une

valeur tait dja associe, la nouvelle remplace lancienne et une rfrence vers la nouvelle est renvoye, sinon null est renvoy.
6

Object remove(Object key) enlve lentre associe key de la table. Renvoie une rfrence sur la valeur retire ou null si elle nest pas

prsente.
7

int size()

renvoie le nombre dentres (paires cl-valeur) de la table.

222

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe Arrays
1 2 3

Classe de manipulation de tableaux. Mthode static List asList(Object[] a) renvoie une vue de type List de a. Sinon, 4 groupes de mthodes principales (en tout 54 mthodes) :
Dans ce qui suit, Type dsigne soit un type primitif, soit Object. static int binarySearch(Type[] a, Type key) eectuant une recherche de key dans a. static int equals(Type[] a, Type[] b) teste lgalit lt. lt. de a et b. static int fill(Type[] a, Type val) aecte tous les lments de a val. static int sort(Type[] a) trie a selon un alogrithme quicksort modi. 223

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Conteneurs immuables
1 2

Toutes les mthodes de modication de Collection et Map sont documentes comme optionnelles. On doit les rednir, mais le code peut juste lever une UnsupportedException. Si toutes ces mthodes lvent une telle exception, le conteneur est dit immuable. Vues immuables dun conteneur :
static Collection unmodifiableCollection(Collection c), static ListunmodifiableList(List list), static MapunmodifiableMap(Map m), static SetunmodifiableSet(Set s), 224

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Concurrence et synchronisation
1

La classe Collections contient des mthodes renvoyant des vues synchronises :


static Collection synchronizedCollection(Collection c), static List synchronizedList(List list), static Map synchronizedMap(Map m), static Set synchronizedSet(Set s).

225

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Itration de conteneurs
1 2

Par le biais de linterface Iterator. Elle dnit des mthodes par lesquelles ont peut numrer (un la fois) des lments dune collection. Elle spcie 3 mthodes :
boolean hasNext() renvoie true sil y a encore des lments dans la collection, Object next() renvoie une rfrence sur linstance suivante de la collection, remove() enlve llment renvoy dernirement par litrateur.

226

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Itration de conteneurs (suite)


4

Un exemple typique ditration est la boucle for suivante


static void filter(Collection c) { for (Iterator i = c.iterator(); i.hasNext();) if (!cond(i.next())) i.remove(); }

Noter que ce code est polymorphe (il fonctionne pour toute instance de Collection)

227

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Squelettes dimplantation

1 2

Des classes abstraites squelettes facilitent limplantation. Les oprations (mthodes) de modication ne font rien sauf gnrer une exception de type UnsupportedOperationException. Par ex., pour crer une classe immuable de type Collection, il sut dhriter de AbstractCollection et dimplanter Iterator iterator() et int size()

228

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Squelettes dimplantation (suite)

Pour dnir des conteneurs modiables, il faut implanter boolean add(Object o) et la mthode boolean remove(Object o) de litrateur renvoy par Iterator iterator(). De la mme manire, on dispose des classes AbstractMap, AbstractSet, AbstractList et AbstractSequentialList.

229

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Conteneurs de type Map Types de conteneurs Hachage

230

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Conteneurs de type Map


1

Map est une interface qui reprsente un mcanisme de

stockage cl/valeur. Une cl est un nom que lon utilise pour accder une valeur. Il sagit dune reprsentation abstraite dun tableau associatif. Les couples (cl, valeur) sont des instances de classes implantant linterface Map.entry.

231

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Conteneurs de type Map (suite)


1

La hirarchie des classes est la suivante ( : hrite de, implante) :


Map WeakHashTable AbstractMap WeakHashTable AbstractMap TreeMap SortedMap Map

LinkedHashMap HashMap AbstractMap

les classes WeakHaskTable, HashMap, LinkedHashMap et IdentityHashMap utilisent des tables de hachage. TreeMap utilise des arbres rouges-noirs.

232

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe HashMap

1 2

HashMap est la plus utilise des Map en pratique.

Table de hachage : une reprsentation dune cl est utilise pour dterminer une valeur autant que possible unique, nomme code de hachage Le code hachage est alors utilis comme indice auquel les donnes associes la cl sont stockes.

233

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe HashMap (suite)


1

Pour utiliser une table de hachage :


On fournit un objet utilis comme cl et des donnes que lon souhaite voir lies cette cl. La cl est hache. Le code de hachage rsultant est utilis comme indice auquel les donnes sont stockes dans la table.

2 3

Les valeurs de codes de hachage sont caches (encapsules). Une table de hachage ne peut stocker que des cls qui rednissent les mthodes hashCode() et equals() de Object.

234

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Classe HashMap (suite)

2 3

La mthode hashCode() doit calculer le code de hachage de lobjet et le renvoyer. equals() compare 2 objets. Beaucoup de classes courantes de Java implantent la mthode hashCode(). Cest le cas de String, souvent utilise comme cl.

235

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe HashMap (suite)


1

Les constructeurs de HashMap sont :


HashMap(), constructeur par dfaut, construit une table de hachage vide. HashMap(int capaciteInitiale), construit une table de hachage de taille initiale capaciteInitiale. HashMap(int capaciteInitiale, float tauxCharge), construit une table de hachage de taille initiale capaciteInitiale et de taux de remplissage tauxCharge ; ce taux, ncessairement compris entre 0.0 et 1.0, dtermine quel pourcentage de remplissage la table sera re-hache en une plus grande. Si tauxCharge nest pas spci, 0.75 est utilis. 236

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe HashMap (suite)


1

Si lon veut utiliser ses propres classes comme cl de hachage, il faut rednir hashCode() et equals() de Object. La valeur (int) renvoye par hashCode() est ensuite automatiquement rduite par une opration modulo la taille de la table de hachage. Il faut sassurer que la fonction de hachage utilise rpartit aussi uniformment que possible les valeurs renvoyes entre 0 et capaciteInitiale, la taille initiale de la table.

237

Classe HashMap (suite)


1

238

Mthodes de HashMap :
But Renvoie true sil existe une cl gale key. Renvoie true sil existe une valeur gale value. Renvoie une rfrence sur lobjet contenant la valeur associe la cl key ou null. Insre une cl et sa valeur dans la table. Renvoie null si key nest pas dja dedans, ou la valeur prcdente associe key sinon. Enlve la cl key et sa valeur. Renvoie la valeur associe key ou null.

methode() boolean containsKey(Object key) boolean containsValue(Object value) Object get(Object key) Object put(Object key, Object value)

Object remove(Object key)

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Une fonction de hachage est une fonction f : x h aisment calculable, qui transforme une trs longue entre x en une sortie h nettement plus courte, (typiquement de 106 bits 200 bits) et qui a la proprit suivante : (Phach) : Il nest pas calculatoirement faisable de trouver deux entres direntes x et x telles que f (x ) = f (x ). Lexpression lopration O nest pas calculatoirement faisable signie simplement tous les algorithmes actuellement connus pour raliser O sont de complexit exponentielle.

239

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

www.cours-ista.com

Hachage : autentication

Application lautentication de messages : 1 Supposons que Alice veuille envoyer un message Bob, en signant son message. 2 Les donnes quAlice veut transmettre sont constitues dun message en clair suivi de ses prnom et nom, en clair, la n du message. Nommons x cet ensemble de donnes. 3 Alice transmet alors x , en clair, suivi de h = f (x ) o f est une fonction de hachage. 4 la rception, Bob applique la fonction de hachage f au texte en clair x et le compare h.

240

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : autentication (suite)

Ainsi, Bob peut vrier non seulement que le message provient bien dAlice (que sa signature na pas t falsie), mais galement que son message, en clair, na pas t altr. Par supposition, aucun pirate naurait t capable de modier x sans changer la valeur de h = f (x ).

241

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Application la recherche. Supposons avoir une cl de recherche relativement longue (un entier ou une chane de caractres). La sortie de la table de hachage sera un indice dune table dans laquelle sont ranges les valeurs associes aux direntes cls. Prenons le cas o la cl est une chane de caractres x et o la fonction de hachage f choisie la transforme en h = f (x ) un indice entre 1 et p (il y a p indices dirents dans la table de hachage).

242

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : recherche (suite)


1

La proprit (Phach) assure que les sorties de f sont quasi-unromment distribues, en un sens probabiliste, dans [1, p ]. Prenons comme exemple de fonction de hachage simple la fonction modulo un nombre premier. Prenons alors pour p un nombre premier (par exemple 101) et considrons la cl suivante : VERYLONGKEY

243

Hachage : recherche (suite)


1

244

On dcompose la cl selon la base de son alphabet (ici, il y a 32 signes dans lalphabet considr) :

22.3210 +5.329 +18.328 +25.327 +12.326 +15.325 +14.324 +7.323 +11.322 +5.32+25
2

La fonction de hachage considre ne prend pas directement ce nombre pour en faire lopration modulo 101, sa repsentation machine tant lourde manier ; il scrit en eet en binaire par
1011000101100101100101100011110111000111010110010111001

Il est bien plus ecace de se servir de la reprsentation dun polynme par lalgorithme de Hrner, o VERYLONGKEY scrit, en base 32, de la faon suivante :

(((((((((22.32+5)32+18)32+25)32+12)32+15)32+14)32+7)32+11)32+5)32+25

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : recherche (suite)


1

Lalgorithme de calcul de la fonction de hachage est alors


public final int hache(String cle, int tailleTable) { int valHach = 0; h = cle.charAt(0); for(int i = 1; i < cle.length(); i++) valHach = ((valHach*32)+cle.charAt(i)) % tailleTable; return valHach; }

o cle est une String dans lequel on a stock la cl.

245

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : recherche (suite)


1

Pour p == 101 et cle[] valant "VERYLONGKEY", cette fonction de hachage fournit 97. Le calcul dun indice partir dune cl est rapide, mais rien ne garantit que 2 cls distinctes donneront des indices distincts. On nomme collision dindice le fait que 2 cls distinctes donnent le mme indice. Il faut alors une stratgie de rsolution de collision.

246

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : recherche (suite)


1

Une stratgie simple et ecace est le chanage spar. chaque fois quil y a une collision pour lindice i, les cls sont ranges dans une liste chane n i, associe la case dindice i de la table. Les dirents lments de la liste chane peuvent tre rangs en ordre alphabtique croissant des cls, pour un accs plus rapide. Cette stratgie est bien adapte au cas o lon ne connat pas, a priori, le nombre denregistrements (de paires cls/valeurs) traiter, ce qui est le cas de la classe HashMap de Java.

247

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : recherche (suite)


1

En Java, un code de hachage est gnr (via la mthode hashCode() dnie dans la classe Object. Elle renvoie alors en gnral une conversion de ladresse de lobjet en int, bien que ceci ne soit pas une obligation dimplantation du langage. La mthode hashCode() est rednie par les types suivants : BitSet, Boolean, Character, Date, Double, File, Float, Integer, Long, Object et String,

248

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : recherche (suite)


1

Pour String, le code est obtenu de lune des 2 manires suivantes, selon sa longueur. Soit n la longueur de la suite de caractres et ci le caractre dindice i .
Si n 15, le code de hachage est calcul par
n 1

ci .37i
i =0

en utilisant larithmtique des int

249

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Hachage : recherche (suite)


Si n > 15, le code de hachage est calcul par
m

ci .k .39i
i =0 n en utilisant larithmtique des int, o k = n et m = k , 8 ne prenant (dans la dcomposition) que 8 ou 9 caractres de la chane.

250

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Itration dune HashMap


Lopration ditration sur une HashMap est possible (via values()), mais prsente 2 inconvnients :
(1) Lordre ditration est indtermin. (2) La complexit de litration est linaire en la capacit de la table. Pour un conteneur adapt litration, cest une fonction linaire de la taille du conteneur.

251

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe LinkedHashMap

Pour corriger les insusances en itration de HashMap, le conteneur contient une table de hachage ainsi quune liste doublement chane de ses lments. Litration est ainsi de complexit linaire en la taille de la table. Lordre ditration est celui dinsertion des cls.

252

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe WeakHashMap

Se comporte comme HashMap, mais les cls sont des rfrences faibles. Les cls qui ne sont rfrences que par la table sont susceptibles dtre dtruites par le ramasse-miettes pour librer de la mmoire.

253

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Interface SortedMap
1

Implantation de Map dans laquelle les entres peuvent tre ordonnes suivant les cls. Il faut fournir 2 constructeurs suplmentaires :
lun avec un paramtre de type SortedMap, ralisant une copie de la table fournie, avec le mme ordre. lautre avec un paramtre de type Comprarator xant lordre.

254

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Interface SortedMap (suite)


1

Mthodes supplmentaires de SortedMap


Comparator comparator() renvoie le comparateur associ la table trie, ou null sil utilise lordre naturel des cls. Object firstKey() renvoie la plus petite cl de la table trie. SortedMap headMap(Object toKey) renvoie une vue de la partie de la table trie dont les cls sont strictement plus petites que toKey.

255

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Interface SortedMap (suite)

Object lastKey() renvoie la plus grande cl de la table trie. SortedMap subMap(Object fromKey, Object toKey) renvoie une vue de la partie de la table trie dont les cls sont comprises strictement entre fromKey et toKey. SortedMap tailMap(Object fromKey) renvoie une vue de la partie de la table trie dont les cls sont strictement plus grandes que fromKey.

256

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe TreeMap
1 2 3 4

Implante linterface SortedMap. structure de donnes sous-jacente : arbres rouges-noirs. Les cls sont constamment ordonnes en ordre croissant, selon lordre naturel des cls, ou selon un objet de comparaison fourni la cration, selon le constructeur utilis. Temps daccs en insertion, recherche, suppression (containsKey(), get(...), put(...) et remove(...)) en O(log n) o n est la taille du conteneur.

257

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Conteneurs de type Collection et Listes Suites accs direct et squentiel Tableau dynamique ArrayList Listes chanes LinkedList

258

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Conteneurs de type Collection


Conventions : indentation : hritage, <<interface>>,
[[classe abstraite]]
<<Collection>> <<List>> [[AbstractCollection]] (implements Collection) [[AbstractList]] (implements List) [[AbstractSequentialList]] LinkedList (implements List) ArrayList (implements List, RandomAccess) [[AbstractSet]] (implements Set) HashSet (implements Set) LinkedHashSet (implements Set) TreeSet (implements SortedSet)

259

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Ensembles et itration des listes

Ensembles : classes HashSet, LinkedHashSet et TreeSet. Itration des listes : ListIterator, mthodes en plus pour les lts. prcdents.

260

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Suites
Suites accs direct (dans nimporte quel ordre) : implantent RandomAccess. Suites accs squentiel (pour accder i + 1, accder i dabord) : hritent de AbstractSequentialList. Suites accs direct : ArrayList. Suites accs squentiel : LinkedList.

261

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Suites accs direct


Un telle suite possde une capacit initiale. Sil ne reste plus de place, il faut augmenter la taille de la liste, opration en O(n). Linsertion a donc une complexit au pire de O(n). En augmentant la taille astucieusement, on assure que la complexit de i insertions est en O(i ). Le calcul de la taille, laccs un lment et laectation une position donne a une complexit en O(1) La suppression est en O(n).
262

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe ArrayList
1 2

ArrayList est, grossirement parlant, un tableau longueur variable de rfrences des objets. ArrayList nest pas synchronise par dfaut. Si lon dsire avoir un tableau longueur variable synchronis, utiliser static Collection synchronizedCollection(Collection c) de la classe Collections.

On dispose de 3 constructeurs :
ArrayList() cr une liste de taille initiale 10 rfrences. ArrayList(int size) cr une liste de taille initiale size rfrences. ArrayList(Collection c) cr une liste avec les lts de c. La capacit initiale de la liste est de 110% celle de c. 263

Classe ArrayList (suite)


Les direntes mthodes sont :
methode() void add(int index, Object element) boolean contains(Object element) Object get(int index) final int indexOf(Object element) Object remove(Object element) Object set(int index, Object element) But

264

Lobjet spci par element est ajout lendroit spci de la liste. Renvoie true si element est contenu dans la liste et false sinon. renvoie lllement situ la position spcie de la liste. Renvoie lindice de la 1ire occurrence de element. Sil ny est pas, -1 est renvoy. Enlve la premire occurrence de element trouve dans la liste. Renvoie une rfrence sur llment enlev. Remplace llment la position spcie par element.

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe ArrayList (suite)


Exemple :
import java.util.ArrayList; import java.util.Iterator; class DemoArrayList { public static void main(String args[]) { // Taille initiale de 3 ArrayList l = new ArrayList(3); System.out.println("Taille initiale : " + l.size()); l.add(new Integer(1)); l.add(new Integer(2)); l.add(new Integer(3)); l.add(new Integer(4)); l.add(new Double(18.23)); l.add(new Integer(5)); System.out.println("1er element : " +

265

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe ArrayList (suite) (suite)


(Integer)l.get(0)); System.out.println("Dernier element : " + (Integer)l.get(l.size()-1)); if (l.contains(new Integer(3))) System.out.println("l contient lentier 3"); // Listons les elements de la liste ListIterator it = l.listIterator(); System.out.println("\n Elements dans la liste : "); while (it.hasNext()) System.out.print(it.next() + " "); System.out.println(); } }

La sortie cran du programme est :


266

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe ArrayList (suite) (suite)

Taille initiale : 3 1er element : 1 Dernier element : 5 l contient lentier 3 Elements dans la liste : 1 2 3 4 18.23 5

267

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Suites accs squentiel


Classe LinkedList, de structure sous-jacente une liste doublement chane. Ajout/suppression en dbut de liste en temps constant (O(1)). Insertion/suppression dun lt. juste aprs un lt. donn (par ex. par un itrateur) en temps constant. Accs llt. i en O(i ).

268

Classe LinkedList
Mthodes supplmentaires de LinkedList
methode() void addFirst(Object o) void addLast(Object o) Object getFirst() Object getLast() Object removeFirst() Object removeLast() But

269

insre llt. spci au dbut de la liste. ajoute llt. spci la n de la liste. renvoie le 1er lt. de la liste. renvoie le dernier lt. de la liste. enlve et renvoie le 1er lt. de la liste. enlve et renvoie le dernier lt. de la liste.

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Classe Stack
1

Stack implante une pile (le LIFO, Last In/First Out)

standard.
2

3 4 5

sont propres. Stack nest pas une pile au sens puriste du terme . . . Il est toutefois utile davoir accs aux mthodes de Vector. Un seul constructeur, sans arguments, qui cr une pile vide.

Stack est une sous classe de Vector. Elle hrite donc de toutes les mthodes de Vector, et en dnit cetraines qui lui

270

Classe Stack (suite)


1

271

Mthodes propres de Stack :


But Renvoie true si la pile est vide et false sinon. Renvoie llment du dessus de la pile, mais ne lenlve pas. Renvoie llment du dessus de la pile, en lenlvant. Pousse element sur la pile. element est galement renvoy. Cherche element dans la pile. Sil est trouv, son oset par rapport au dessus de la pile est renvoy. Sinon, -1 est renvoy.

methode() boolean empty() Object peek() Object pop() Object push(Object element) int search(Object element)

Une EmptyStackException est jete si lon appelle pop() lorsque la pile est vide.

Exemples : formes ditration

272

// For a set or list for(Iterator it=collection.iterator(); it.hasNext(); ) { Object element = it.next(); } // For keys of a map for(Iterator it=map.keySet().iterator(); it.hasNext(); ) { Object key = it.next(); } // For values of a map for(Iterator it=map.values().iterator(); it.hasNext(); ) { Object value = it.next(); } // For both the keys and values of a map for(Iterator it=map.entrySet().iterator(); it.hasNext(); ) { Map.Entry entry = (Map.Entry)it.next(); Object key = entry.getKey(); Object value = entry.getValue(); }

Exemple : utilisation dune pile

273

LinkedList stack = new LinkedList(); // Push on top of stack stack.addFirst(object); // Pop off top of stack Object o = stack.getFirst(); // If the queue is to be used by multiple threads, // the queue must be wrapped with code to synchronize the methods stack = (LinkedList)Collections.synchronizedList(stack);

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Exemple : cration dune table de hachage


// Create a hash table Map map = new HashMap(); map = new TreeMap(); // Add key/value map.put("a", new map.put("b", new map.put("c", new // hash table // sorted map pairs to the map Integer(1)); Integer(2)); Integer(3));

// Get number of entries in map int size = map.size(); // 2 // Adding an entry whose key exists in the map causes // the new value to replace the old value Object oldValue = map.put("a", new Integer(9)); // 1 // Remove an entry from the map and // return the value of the removed entry oldValue = map.remove("c"); // 3

274

Bases procdurales Notions de POO Bases orientes objet de Java Exceptions Classes utilitaires de base java.util : Conteneurs et autres utilitaires

java.util ; Comparaison Conteneurs Map & Hachage Collection & Listes

Exemple : itration de la table de hachage


// Iterate over the keys in the map Iterator it = map.keySet().iterator(); while (it.hasNext()) { // Get key Object key = it.next(); } // Iterate over the values in the map it = map.values().iterator(); while (it.hasNext()) { // Get value Object value = it.next(); }

275

Das könnte Ihnen auch gefallen