Vous êtes sur la page 1sur 217

Programmation Oriente Objet

application au langage Java


Version Novembre 2007

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
SERLI informatique

 SERLI : www.serli.com
 Socit de services en informatique
 Fonde en 1981
 Situe sur le site du Futuroscope, Poitiers
 Ralisation de logiciels et assistance technique
 Domaines de comptences
 Systmes dinformations
 Embarqu et temps rel
 Systmes et rseaux
 Gestion Electronique de Document (GED, PDM / PLM)
keulkeul.blogspot.com

 Plateformes de dveloppement (celles qui concernent les cours)


 Plateforme Java : Java EE, Java SE, Eclipse
 Plateforme Microsoft : C#, VB .NET
 Cours Java - M. Baron - Page 2
SERLI informatique

 Equipes impliques dans lOpen Source


 Utilisation massive de briques Open Source

 Formation / diffusion de cours concernant Java et lOpen Source

 RMLL : 7me rencontres mondiales du logiciel libre

 Solutions Linux 2007 : Salon des Solutions Open Source pour


lentreprise

 Membre du consortium ObjectWeb

 Gestion de projets Open Source


keulkeul.blogspot.com

 JaasLounge : interoprabilit JAAS pour Java EE

 JShaft : gestion de clusters Java EE

 JWT Gen : tests fonctionnels automatiss


Cours Java - M. Baron - Page 3
Rapide historique concernant la POO

 La POO a une longue histoire


 POO ? : Programmation Oriente Objet

 Dbut en Norvge la fin des annes 60

 Simula, programmation des simulations par vnements discrets

 Programmation structure pas adapte

 Dans les annes 70


 Dveloppement par Xrox du premier systme Fentres, Icnes
keulkeul.blogspot.com

et Souris

 SmallTalk, archtype des langages objets

 Dveloppement par Apple des premiers Mac


Cours Java - M. Baron - Page 4
Rapide historique concernant la POO

 Au cours des annes 80


 Dveloppement des ordinateurs personnels

 Intrt pour les interfaces graphiques

 Apparition de nouveaux langages

 Eiffel, fortement typ, entirement OO

 C++, extension de C, pas totalement OO

 Object Pascal (Delphi) dvelopp par Borland


keulkeul.blogspot.com

 Dans les annes 90, vers une maturit des concepts objets
 Standardisation de C++

 Apparition de langages comme Java ou Python


Cours Java - M. Baron - Page 5
Programmation Structure VS POO

 Objectifs de la POO
 Facilit la rutilisation de code, encapsulation et abstraction
 Facilit de lvolution du code
 Amliorer la conception et la maintenance des grands systmes
 Programmation par composants . Conception dun logiciel la
manire de la fabrication dune voiture

 Programmation Structure
 Unit logique : le module
keulkeul.blogspot.com

 Une zone pour les variables


 Une zone pour les fonctions
 Chaque fonction rsout une partie du problme
 Structuration descendante du programmeCours Java - M. Baron - Page 6
Principes POO : programmation par objets

 Unit logique : lobjet

 Objet est dfini par maVoiture


 un tat - couleur = bleue
 un comportement - vitesse = 100
 une identit

 tat : reprsent par des attributs (variables) qui stockent


des valeurs

 Comportement : dfini par des mthodes (procdures) qui


keulkeul.blogspot.com

modifient des tats

 Identit : permet de distinguer un objet dun autre objet


Cours Java - M. Baron - Page 7
Principes POO

 Les objets communiquent entre eux par des messages

 Un objet peut recevoir un message qui dclenche


 une mthode qui modifie son tat

et / ou

 une mthode qui envoie un message un autre objet

dmarre
keulkeul.blogspot.com

ma voiture le moteur

Cours Java - M. Baron - Page 8


Principes POO : notion de classe

 Les objets qui ont les mmes tats et les mmes comporte-
ments sont regroups : cest une classe
 Les classes servent de moules pour la cration des objets
Un objet est une instance dune classe
 Un programme OO est constitu de classes qui permettent
de crer des objets qui senvoient des messages
Voiture
Nom de la classe
- puissance : entier

Attributs - estDmarre : boolen


keulkeul.blogspot.com

- vitesse : rel
+ deQuellePuissance() : entier
Mthodes
- Slecteur + demarre()

- Modificateurs + acclre (rel)

Visibilit Cours Java - M. Baron - Page 9


Principes POO

 Lensemble des interactions entre les objets dfini un


algorithme

 Les relations entre les classes refltent la dcomposition


du programme

Voiture Moteur
keulkeul.blogspot.com

Cours Java - M. Baron - Page 10


Droulement du cours

 Structuration du cours
 Prsentation des concepts
 Illustration avec de nombreux exemples
 Des bulles daide tout au long du cours :

Ceci est une alerte Ceci est une astuce

 Mise en place du cours


 Cours de Francis Jambon (ancien MdC lUniversit de Poitiers)
keulkeul.blogspot.com

 Cours de Fabrice Depaulis (ancien ATER lUniversit de Poitiers)


 Livre : Programmer en Java 2me dition Claude Delannoy - Eyrolles
 Internet : www.developpez.com
Cours Java - M. Baron - Page 11
Organisation ...

 Partie 1 : Introduction au langage JAVA

 Partie 2 : Bases du langage

 Partie 3 : Classes et objets

 Partie 4 : Hritage

 Partie 5 : Hritage et polymorphisme


keulkeul.blogspot.com

 Partie 7 : Les indispensables : package,collections

et exception Cours Java - M. Baron - Page 12


Programmation Oriente Objet
application au langage Java
Introduction au langage Java

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
Rapide historique de Java

 Origine
 Cr par Sun Microsystems
 Cible : les systmes embarqus (vhicules, lectromnager, etc)
utilisant des langages ddis incompatibles entre eux
 Dates cls
 1991 : Introduction du langage Oak par James Gosling
 1993 : Monte en puissance du Web grce Mosaic (lide dadapter
Java au Web fait son chemin)
 1995 : Ralisation du logiciel HotJava en Java permettant dexcuter
des applets
keulkeul.blogspot.com

 1996 : NetscapeTM Navigator 2 incorpore une machine virtuelle


Java 1.0 en version beta
 1997 : Un premier pas vers une version industrielle Java 1.1
 1999 : Version industrielle de Java Cours Java - M. Baron - Page 14
Sun voit Java comme ...

 Rfrences
 WikiPedia : fr.wikipedia.org/wiki/java_%28technologie%29
 White papers : java.sun.com/docs/white/index.html

 Sun dfinit le langage Java comme

 Simple  Sr

 Orient objet  Portable

 Rparti  Performant
keulkeul.blogspot.com

 Interprt  Multitches

 Robuste  Dynamique ...


Cours Java - M. Baron - Page 15
Principe de fonctionnement de Java

 Source Java
 Fichier utilis lors de la phase de programmation
 Le seul fichier rellement intelligible par le programmeur!

 Byte-Code Java
 Code objet destin tre excut sur toute Machine Virtuelle
Java
 Provient de la compilation du code source

 Machine Virtuelle Java


 Programme interprtant le Byte-Code Java et fonctionnant sur un
keulkeul.blogspot.com

systme dexploitation particulier


 Conclusion : il suffit de disposer dune Machine Virtuelle Java
pour pouvoir excuter tout programme Java mme s il a t
compil avec un autre systme dexploitation Cours Java - M. Baron - Page 16
Machines Virtuelles Java ...

 Navigateurs Web, Stations de travail, Network Computers

 WebPhones

 Tlphones portables

 Cartes puces

 ...
keulkeul.blogspot.com

Cours Java - M. Baron - Page 17


Principales tapes dun dveloppement

 Cration du code source


Codes Sources
 A partir des spcifications (par exemple en UML)
MonProgramme.java
 Outil : diteur de texte, IDE

 Compilation en Byte-Code javac

 A partir du code source


 Outil : compilateur Java
Byte Code
 Diffusion sur larchitecture cible
MonProgramme.class
 Transfert du Byte-Code seul
java
 Outils : rseau, disque, etc
keulkeul.blogspot.com

 Excution sur la machine cible


 Excution du Byte-Code MonProgramme

 Outil : Machine Virtuelle Java Cours Java - M. Baron - Page 18


Java et ses versions ...

 Diffrentes versions de la machine virtuelle


 Java 2 Micro Edition (Java ME) qui cible les terminaux portables
 Java 2 Standard Edition (Java SE) qui vise les postes clients
 Java 2 Enterprise Edition (Java EE) qui dfinit le cadre dun serveur
dapplication Dans la suite du cours, on va
sintresser principalement aux
 Diffrentes finalits API fournies par Java SE
 SDK (Software Development Kit) fournit un compilateur et une
machine virtuelle
 JRE (Java Runtime Environment) fournit uniquement une machine
keulkeul.blogspot.com

virtuelle. Idal pour le dploiement de vos applications.

 Version actuelle de Java


 Actuellement Java SE 6.0 ou encore appele JDK 5.0
 Bientt Java SE 7.0 (nom de code Dolphin) Cours Java - M. Baron - Page 19
Les outils ...

 Simples diteurs ou environnements de dveloppement


 Eclipse
 NetBeans
 JBuilder
 IntelliJ

 Les ressources sur Java
 Site de Java chez Sun : java.sun.com
keulkeul.blogspot.com

 API (rfrence) : java.sun.com/j2se/1.5.0


 Tutorial de Sun : java.sun.com/doc/bookstutorial
 Cours et exemples : java.developpez.com
 Forum : fr.comp.lang.java Cours Java - M. Baron - Page 20
LAPI de Java

Packages

Description
Attributs
Mthodes
Classes
keulkeul.blogspot.com

Cours Java - M. Baron - Page 21


Ouvrages dinitiation

 Programmer en Java (2me dition)


 Auteur : Claude Delannoy
 diteur : Eyrolles
 Edition : 2002 - 661 pages - ISBN : 2212111193

 Java en action
 Auteur : Ian F. Darwin
 diteur : OReilly
 Edition : 2002 - 836 pages - ISBN : 2841772039

 Apprendre Java et C++ en parallle


keulkeul.blogspot.com

 Auteur : Jean-Bernard Boichat


 diteur : Eyrolles
 Edition : 2003 - 742 pages - ISBN : 2212113277
Cours Java - M. Baron - Page 22
Ouvrages de rfrence

 Ouvrages thmatiques aux ditions OReilly sur une slection


des Packages Java (certains traduits en Franais)

 Ouvrages de rfrence de SUN aux ditions Paperback


(en anglais uniquement)
keulkeul.blogspot.com

Cours Java - M. Baron - Page 23


Programmation Oriente Objet
application au langage Java
Bases du langage

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
Premier exemple de programme en Java

public class PremierProg {

public static void main (String[] argv) {


System.out.println("Ola, mon Premier Programme");
}
}

 public class PremierProg


 Nom de la classe

 public static void main


 La fonction principale quivalent la fonction main du C/C++
 String[] argv
keulkeul.blogspot.com

 Permet de rcuprer des arguments transmis au programme au


moment de son lancement
 System.out.println("Ola ")
 Mthode d'affichage dans la fentre console Cours Java - M. Baron - Page 25
Mise en uvre

 Pas de sparation entre dfinition et codage des oprations


 Un seul fichier NomDeClasse.java

 Pas de fichier den tte comme C/C++

 Compilation Nom de la classe = Nom du fichier java

 javac NomDeClasse.java ou javac *.java quand plusieurs classes

 Gnration dun fichier Byte-Code NomDeClasse.class

 Pas ddition de liens (seulement une vrification)


keulkeul.blogspot.com

 Excution Ne pas mettre lextension .class


pour lexcution
 java NomDeClasse

 Choisir la classe principale excuter


Cours Java - M. Baron - Page 26
Types primitifs de Java

 Ne sont pas des objets !!!


 Occupent une place fixe en mmoire rserve la dclaration
 Types primitifs
 Entiers : byte (1 octet) - short (2 octets) - int (4 octets) - long
(8 octets)
 Flottants (norme IEEE-754) : float (4 octets) - double (8 octets)
 Boolens : boolean (true ou false)
 Caractres : char (codage Unicode sur 16 bits)
 Chacun des types simples possde un alter-ego objet
disposant de mthodes de conversion ( voir dans la partie
keulkeul.blogspot.com

Classes et Objets)
 Lautoboxing introduit depuis la version 5.0 convertit de
manire transparente les types primitifs
en rfrences Cours Java - M. Baron - Page 27
Initialisation et constantes

 Initialisation
 Une variable peut recevoir une valeur au moment de sa dclaration :
Penser linitialisation
int n = 15;
boolean b = true;
au risque dune erreur de
 Cette instruction joue le mme rle : compilation
int n;
int n; System.out.println(" n = " + n);
n = 15;
boolean b;
b = true;

 Constantes
 Ce sont des variables dont la valeur ne peut affecte qu'une fois
keulkeul.blogspot.com

 Elles ne peuvent plus tre modifies


 Elles sont dfinies avec le mot cl final
final int n = 5;
final int t;
...
t = 8;
n = 10; // erreur : n est dclar final Cours Java - M. Baron - Page 28
Structure de contrle

 Choix
Il ny a pas de mot-
 Si alors sinon : if condition {} else {} cl then dans la
structure Choix
 Itrations
 Boucle : for (initialisation ; condition ; modification) { }

 Boucle (for each) : for (Type var : Collection) { }

 Tant que : while (condition) { }


Nouveaut Java 5
 Faire jusqu : do { } while (condition)

 Slection borne
keulkeul.blogspot.com

 Selon faire : switch ident { case valeur0 : case valeur1 :


default: } Penser vrifier si break est
ncessaire dans chaque case
 Le mot cl break demande sortir du bloc Cours Java - M. Baron - Page 29
Structure de contrle

 Exemple : structure de contrle


 Faisons varier n
public class SwitchBreak {

public static void main (String[] argv) { Valeur de n : 0


int n = ...; nul
System.out.println("Valeur de n :" + n); Adios...
switch(n) {
case 0 : System.out.println("nul");
Valeur de n : 1
break;
petit
case 1 : moyen
case 2 : System.out.println("petit"); Adios...
case 3 :
case 4 :
case 5 : System.out.println("moyen"); Valeur de n : 6
break; grand
default : System.out.println("grand"); Adios...
keulkeul.blogspot.com

}
System.out.println("Adios...");
}
}
Se demander si
break est ncessaire

Cours Java - M. Baron - Page 30


Oprateurs sur les types primitifs

 Oprateurs arithmtiques
 Unaires : +a, -b
 Binaires : a+b, a-b, a*b, a%b
 Incrmentation et dcrmentation : a++, b--
 Affectation largie : +=, -=, *=, /=

 Oprateurs comparaisons Attention : erreur


 a==b, a!=b, a>b, a<b, a>=b, a<=b boolean t = true;
if (t == true) {...}

 Oprateurs logiques Prfrer :


boolean t = true;
 Et : a && b , a & b
keulkeul.blogspot.com

if (t) {...}

 Ou : a || b , a | b

 Conversion de type explicite (cast)


 (NouveauType)variable
Cours Java - M. Baron - Page 31
Oprateurs sur les types primitifs

 Exemple : simulation du Loto


 Pas optimis mais montre lutilisation des concepts prcdents
public class ExempleTypesPrimitifs {

public static void main (String[] argv) {


int compteur = 0;
A voir plus tard
while(compteur != 100) {
// Prend un nombre alatoire
double nbreAleatoir = Math.random() * 1000;

// Etablie un index de 0 10
int index = compteur % 10;

// Construction de laffichage
System.out.println("Index:" + index +
keulkeul.blogspot.com

"Nbre Alatoir:" + (int)nbreAleatoir);

// Incrmentation de la boucle
compteur+= 1;
}
}
}

Cours Java - M. Baron - Page 32


Affectation, recopie et comparaison

 Affecter et recopier un type primitif


 a=b signifie a prend la valeur de b

 a et b sont distincts

 Toute modification de a nentrane pas celle de b

 Comparer un type primitif


 a == b retourne true si les valeurs de a et b sont identiques

a b a b
keulkeul.blogspot.com

1 2 a=b 2 2

Cours Java - M. Baron - Page 33


Les tableaux en Java

 Les tableaux sont considrs comme des objets

 Fournissent des collections ordonnes dlments

 Les lments dun tableau peuvent tre

 Des variables dun type primitif (int, boolean, double, char, )

 Des rfrences sur des objets ( voir dans la partie Classes et Objets)

 Cration dun tableau


keulkeul.blogspot.com

1 Dclaration = dterminer le type du tableau

2 Dimensionnement = dterminer la taille du tableau

3 Initialisation = initialiser chaque case du tableau


Cours Java - M. Baron - Page 34
Les tableaux en Java : Dclaration

1 Dclaration
 La dclaration prcise simplement le type des lments du tableau

int[] monTableau; monTableau null

 Peut scrire galement

int monTableau[];

Attention : une dclaration de tableau ne doit


keulkeul.blogspot.com

pas prciser de dimensions


int monTableau[5]; // Erreur

Cours Java - M. Baron - Page 35


Les tableaux en Java : Dimensionnement

2 Dimensionnement
 Le nombre dlments du tableau sera dtermin quand lobjet
tableau sera effectivement cr en utilisant le mot cl new
 La taille dtermine la cration du tableau est fixe, elle ne pourra
plus tre modifie par la suite
 Longueur dun tableau : monTableau.length

int[] monTableau; // Dclaration


monTableau = new int[3]; // Dimensionnement

 La cration dun tableau par new


 Alloue la mmoire en fonction du type de tableau et de la taille
keulkeul.blogspot.com

 Initialise le contenu du tableau 0 pour les types simples

monTableau 0 0 0
Cours Java - M. Baron - Page 36
Les tableaux en Java : Initialisation

3 Initialisation
 comme en C/C++ les indices commencent zro
 laccs un lment dun tableau seffectue suivant cette forme

monTab[varInt]; // varInt >= 0 et <monTab.length

 Java vrifie automatiquement lindice lors de laccs (exception leve)


monTab[0] = 1; monTableau 1 0 0
monTab[1] = 2; monTableau 1 2 0
monTab[2] = 3; monTableau 1 2 3
 Autre mthode : en donnant explicitement la liste de ses lments
keulkeul.blogspot.com

entre {}
int[] monTab = {1, 2, 3}
 est quivalent
monTab = new int[3];
Cours Java - M. Baron - Page 37
monTab[0] = 1; monTab[1] = 2; monTab[2] = 3;
Les tableaux en Java : Synthse

1 Dclaration
int[] monTableau;

2 Dimensionnement Ou 12 et 3
monTableau = new int[3]; int[] monTab = {1, 2, 3};

3 Initialisation
monTableau[0] = 1;
monTableau[1] = 2;
monTableau[2] = 3;
keulkeul.blogspot.com

for (int i = 0; i < monTableau.length; i++) {


System.out.println(monTableau[i]);
}

for (int current : monTableau) { Mme chose avec


System.out.println(curent); lutilisation du for each
}
Cours Java - M. Baron - Page 38
Les tableaux en Java : Multidimensionnels

 Tableaux dont les lments sont eux mmes des tableaux


 Dclaration
type[][] monTableau; tab null
 Tableaux rectangulaires
 Dimensionnement :
tab . . .
monTableau = new type[2][3]
. . .
 Tableaux non-rectangulaires
 Dimensionnement :
tab null
keulkeul.blogspot.com

monTableau = new type[2]


null
monTableau[0] = new type[2]
monTableau[1] = new type[3]
tab . .
. . .
Cours Java - M. Baron - Page 39
Petite prcision du System.out.println()

 Usages : affichage lcran


 System.out.println() : revient la ligne
 System.out.print() : ne revient pas la ligne

 Diffrentes sorties possibles


 out sortie standard
 err sortie en cas derreur (non temporise)

 Tout ce que lon peut afficher


 Objets, nombres, boolens, caractres,
keulkeul.blogspot.com

 Tout ce que l on peut faire


 Concatnation sauvage entre types et objets avec le +
System.out.println("a=" + a + "donc a < 0 est " + a < 0);

Cours Java - M. Baron - Page 40


Commentaires et mise en forme

 Documentation des codes sources


 Utilisation des commentaires
// Commentaire sur une ligne complte
int b = 34; // Commentaire aprs du code

/* Le dbut du commentaire
** Je peux continuer crire
Jusqu ce que le compilateur trouve cela */

 Utilisation de loutil Javadoc ( voir dans la partie les Indispensables)

 Mise en forme if (b == 3) {
if (cv == 5) {
if (b == 3) {
if (cv == 5) {
if (q) { if (q) {
 Facilite la relecture ... ...
keulkeul.blogspot.com

} else { } else {...}


... ...
 Crdibilit assure !!!! } }
... ...
 Indentation chaque
} }
...
}
viter
niveau de bloc Prfrer Cours Java - M. Baron - Page 41
Programmation Oriente Objet
application au langage Java
Classes et Objets

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
Classe et dfinition

 Une classe est constitue


 Donnes ce qu'on appelle des attributs

 Procdures et/ou des fonctions ce qu'on appelle des mthodes

 Une classe est un modle de dfinition pour des objets


 Ayant mme structure (mme ensemble d'attributs)

 Ayant mme comportement (mme mthodes)

 Ayant une smantique commune

 Les objets sont des reprsentations dynamiques, du modle


keulkeul.blogspot.com

dfini pour eux au travers de la classe (instanciation)


 Une classe permet d'instancier (crer) plusieurs objets

 Chaque objet est instance d'une classe et une seule


Cours Java - M. Baron - Page 43
Classe et notation UML

Voiture
Nom de la classe
- puissance : entier
Attributs - estDmarre : boolen

- vitesse : rel
+ deQuellePuissance(): entier
Mthodes
- Slecteur + demarre()
keulkeul.blogspot.com

- Modificateurs
+ acclre (rel)

Visibilit
Cours Java - M. Baron - Page 44
Codage de la classe Voiture
Nom de la classe
public class Voiture {

private int puissance;


private boolean estDemarree;
Attributs private double vitesse;

public int deQuellePuissance() {


return puissance;
}

Slecteur public void demarre() {


estDemarree = true;
}

public void accelere(double v) {


keulkeul.blogspot.com

if (estDemarree) {
Modificateurs }
vitesse = vitesse + v

}
}

Cours Java - M. Baron - Page 45


Classe et visibilit des attributs

 Caractristique dun attribut


 Variables globales de la classe
 Accessibles dans toutes les mthodes de la classe
public class Voiture {

private int puissance;


private boolean estDemarree;
private double vitesse;
Attributs visibles
public int deQuellePuissance() { dans les mthodes
return puissance;
}

public void demarre() {


estDemarree = true;
keulkeul.blogspot.com

public void accelere(double v) {


if (estDemarree) {
vitesse = vitesse + v
}
}
}
Cours Java - M. Baron - Page 46
Distinction entre attributs et variables

 Caractristique dune variable


 Visible lintrieur du bloc qui le dfinit
public class Voiture {

private int puissance;


private boolean estDemarree;
private double vitesse; Variable visible uniquement
public int deQuellePuissance() { dans cette mthode
return puissance;
}

public void demarre() {


estDemarree = true; Variable peut tre dfinie
} nimporte o dans un bloc
public void accelere(double v) {
keulkeul.blogspot.com

if (estDemarree) {
double avecTolerance;
avecTolerance = v + 25;
vitesse = vitesse + avecTolerance
}
}
}
Cours Java - M. Baron - Page 47
Conventions en Java : de la rigueur et de la classe

 Conventions de noms
 CeciEstUneClasse
 celaEstUneMethode()
 jeSuisUneVariable
 JE_SUIS_UNE_CONSTANTE

 Un fichier par classe, une classe par fichier


 Classe Voiture dcrite dans le fichier Voiture.java
 Il peut exceptionnellement y avoir plusieurs classes par fichier
keulkeul.blogspot.com

(cas des Inner classes)

Respecter les minuscules et


les majuscules des noms
Cours Java - M. Baron - Page 48
Objet et dfinition

 Un objet est instance dune seule classe

 Se conforme la description que celle-ci fournit

 Admet une valeur propre lobjet pour chaque attribut dclar dans
la classe

 Les valeurs des attributs caractrisent ltat de lobjet

 Possibilit de lui appliquer toute opration (mthode) dfinie dans la


classe
keulkeul.blogspot.com

 Tout objet est manipul et identifi par sa rfrence


 Utilisation de pointeur cach (plus accessible que le C++)

 On parle indiffremment dinstance, de rfrence ou dobjet


Cours Java - M. Baron - Page 49
Objet et notation UML

 maClio est une instance de la classe Voiture

Reprsentation Voiture
explicite de la classe
Relation dinstanciation
instance of

Nom de lobjet, rfrence


ou de linstance

maClio
- puissance = 4 Valeurs des
keulkeul.blogspot.com

attributs qui
- estDemarre = true caractrisent
ltat de lobjet
- vitesse = 179.8 maClio

Cours Java - M. Baron - Page 50


tats des objets

 Chaque objet qui est une instance de la classe Voiture


possde ses propres valeurs dattributs

Voiture

instance of

ladaBerline110 maClio 205Gti


keulkeul.blogspot.com

- puissance = 6 - puissance = 4 - puissance = 6

- estDmarre = false - estDmarre = true - estDmarre = true

- vitesse = 0 - vitesse = 179.8 - vitesse = 250

Cours Java - M. Baron - Page 51


Affectation et comparaison

 Affecter un objet
 a = b signifie a devient identique b
 Les deux objets a et b sont identiques et toute modification de a
entrane celle de b

 Comparer deux objets


 a == b retourne true si les deux objets sont identiques
 Cest--dire si les rfrences sont les mmes, cela ne compare pas
les attributs
a b a b
keulkeul.blogspot.com

a=b

  
Cours Java - M. Baron - Page 52
Affectation et comparaison

 Lobjet maClio et saClio ont les mmes attributs (tats


identiques) mais ont des rfrences diffrentes
 maClio != saClio
Voiture
Le test de comparaison
(== et !=) entre objets
ne concerne que les
rfrence et non les instance of
attributs!!!!

saClio maClio
keulkeul.blogspot.com

- puissance = 4 - puissance = 4

- estDmarre = true - estDmarre = true

- vitesse = 179.8 - vitesse = 179.8

Cours Java - M. Baron - Page 53


Affectation et comparaison

 Recopier les attributs dun objet clone()


 Les deux objets a et b sont distincts
 Toute modification de a nentrane pas celle de b
a b a b
recopie

   

 Comparer le contenu des objets : equals(Object o)


 Renvoyer true si les objets a et b peuvent tre considrs
keulkeul.blogspot.com

comme identique au vu de leurs attributs

Recopie et comparaison dans


les parties suivantes
Cours Java - M. Baron - Page 54
Structure des objets

 Un objet est constitu dune partie statique et dune


partie dynamique

 Partie statique
 Ne varie pas dune instance de classe une autre

 Permet dactiver lobjet

 Constitue des mthodes de la classe

 Partie dynamique
keulkeul.blogspot.com

 Varie dune instance de classe une autre

 Varie durant la vie dun objet

 Constitue dun exemplaire de chaque attribut de la classe


Cours Java - M. Baron - Page 55
Cycle de vie dun objet

 Cration
 Usage dun Constructeur
 Lobjet est cr en mmoire et les attributs de lobjet sont initialiss
 Utilisation
 Usage des Mthodes et des Attributs (non recommand)
 Les attributs de lobjet peuvent tre modifis
 Les attributs (ou leurs drivs) peuvent tre consults

Lutilisation dun objet non


construit provoque une exception
de type NullPointerException
keulkeul.blogspot.com

 Destruction et libration de la mmoire lorsque


 Usage (ventuel) dun Pseudo-Destructeur
 Lobjet nest plus rfrenc, la place mmoire occupe est rcupre
Cours Java - M. Baron - Page 56
Cration dobjets : droulement

 La cration dun objet partir dune classe est appele une


instanciation

 Lobjet cr est une instance de la classe monObjet

null
 Dclaration
 Dfinit le nom et le type de l objet
 Un objet seulement dclar vaut null monObjet
(mot rserv du langage)

 Cration et allocation de la mmoire


 Appelle de mthodes particulires : les constructeurs attribut 1
keulkeul.blogspot.com


 La cration rserve la mmoire et initialise les attributs
attribut n
 Renvoi dune rfrence sur lobjet maintenant cr
 monObjet != null
Cours Java - M. Baron - Page 57
Cration dobjets : ralisation

 La cration dun nouvel objet est obtenue par lappel


new Constructeur(paramtres)
 Il existe un constructeur par dfaut qui ne possde pas de paramtre
(si aucun autre constructeur avec paramtre nexiste)

Les constructeurs portent le


mme nom que la classe

public class TestMaVoiture {

Dclaration public static void main (String[] argv) {

// Dclaration puis cration


Voiture maVoiture;
keulkeul.blogspot.com

Cration et maVoiture = new Voiture();


allocation
// Dclaration et cration en une seule ligne
mmoire Voiture maSecondeVoiture = new Voiture();
}
}

Cours Java - M. Baron - Page 58


Cration dobjets : ralisation

 Exemple : construction dobjets


public class TestMaVoiture {

public static void main (String[] argv) {

// Dclaration puis cration


Voiture maVoiture;
maVoiture = new Voiture(); Dclaration
// Dclaration dune deuxime voiture
Voiture maVoitureCopie;
// Attention!! pour linstant maVoitureCopie vaut null

// Test sur les rfrences.


Affectation par
if (maVoitureCopie == null) { rfrence
keulkeul.blogspot.com

// Cration par affectation dune autre rfrence


maVoitureCopie = maVoiture;
// maVoitureCopie possde la mme rfrence que maVoiture
}
...
}}

Cours Java - M. Baron - Page 59


Le constructeur de Voiture

 Actuellement
 On a utilis le constructeur par dfaut sans paramtre

 On ne sait pas comment se construit la Voiture

 Les valeurs des attributs au dpart sont indfinies et identique pour


chaque objet (puissance, etc.) Les constructeurs portent le
mme nom que la classe et nont
 Rle du constructeur en Java pas de valeur de retour

 Effectuer certaines initialisations ncessaires pour le nouvel objet cr

 Toute classe Java possde au moins un constructeur


keulkeul.blogspot.com

 Si une classe ne dfinit pas explicitement de constructeur, un


constructeur par dfaut sans arguments et qui neffectue aucune
initialisation particulire est invoque
Cours Java - M. Baron - Page 60
Le constructeur de Voiture

 Le constructeur de Voiture
 Initialise vitesse zro

 Initialise estDmaree faux

 Initialise puissance la valeur passe en paramtre du constructeur


public class Voiture {

private int puissance;

Constructeur private boolean estDemarree;

avec un private double vitesse;


paramtre
public Voiture(int p) {
keulkeul.blogspot.com

puissance = p;
estDemaree = false;
vitesse = 0;
}
...
}

Cours Java - M. Baron - Page 61


Construire une Voiture de 7 CV

 Cration de la Voiture
 Dclaration de la variable maVoiture
 Cration de lobjet avec la valeur 7 en paramtre du constructeur

public class TestMaVoiture {

public static void main(String[] argv) {


Dclaration
// Dclaration puis cration
Voiture maVoiture;

maVoiture = new Voiture(7);

Cration et Voiture maSecVoiture;


// Sous entendu quil existe
keulkeul.blogspot.com

allocation // explicitement un constructeur : Voiture(int)


mmoire
maSecVoiture = new Voiture(); // Erreur
avec Voiture(int) }
}

Cours Java - M. Baron - Page 62


Constructeur sans arguments

 Utilit
 Lorsque lon doit crer un objet sans pouvoir dcider des valeurs de
ses attributs au moment de la cration
 Il remplace le constructeur par dfaut qui est devenu inutilisable ds
quun constructeur (avec paramtres) a t dfini dans la classe
public class Voiture {

private int puissance;


private boolean estDemarree; public class TestMaVoiture {
private double vitesse;
public static void main (String[] argv) {
public Voiture() {
puissance = 4; // Dclaration puis cration
estDemaree = false; Voiture maVoiture;
keulkeul.blogspot.com

vitesse = 0; maVoiture = new Voiture(7);


} Voiture maSecVoiture;
public Voiture(int p) { maSecVoiture = new Voiture(); // OK
puissance = p; }
estDemaree = false; }
vitesse = 0;
}...
}
Cours Java - M. Baron - Page 63
Constructeurs multiples

 Intrts
 Possibilit dinitialiser un objet de plusieurs manires diffrentes
 On parle alors de surchage (overloaded)
 Le compilateur distingue les constructeurs en fonction
 de la position des arguments
 du nombre
public class Voiture {
...
public Voiture() {
 du type puissance = 4; ...
}

public Voiture(int p) {
keulkeul.blogspot.com

puissance = p; ...
}
Chaque constructeur
possde le mme nom public Voiture(int p, boolean estDemaree) {
...
(le nom de la classe) }
}

Cours Java - M. Baron - Page 64


Accs aux attributs

 Pour accder aux donnes dun objet on utilise une notation


pointe
identificationObjet.nomAttribut

public class TestMaVoiture {

public static void main (String[] argv) {

// Dclaration puis cration


Voiture v1 = new Voiture();
Voiture v2 = new Voiture();

// Accs aux attributs en criture


v1.puissance = 110;

// Accs aux attributs en lecture


keulkeul.blogspot.com

System.out.println("Puissance de v1 = " + v1.puissance);


}
}

Il nest pas recommand


daccder directement aux
attributs dun objet
Cours Java - M. Baron - Page 65
Envoi de messages : appel de mthodes

 Pour demander un objet deffectuer un traitement il


faut lui envoyer un message

 Un message est compos de trois parties


 Une rfrence permettant de dsigner lobjet qui le message est
envoy

 Le nom de la mthode ou de lattribut excuter

 Les ventuels paramtres de la mthode

identificationObjet.nomDeMethode( Paramtres ventuels )


keulkeul.blogspot.com

 Envoi de message similaire un appel de fonction


 Le code dfini dans la mthode est excut

 Le contrle est retourn au programme appelant


Cours Java - M. Baron - Page 66
Envoi de messages : appel de mthodes

Voiture
Ne pas oublier les -
parenthses pour les + deQuellePuissance() : entier
appels aux mthodes
+ demarre()
+ acclre (rel)
public class TestMaVoiture { +
public static void main (String[] argv) {

// Dclaration puis cration


Envoi dun message
Voiture maVoiture = new Voiture(); lobjet maVoiture
// La voiture dmarre Appel dun modificateur
maVoiture.demarre();

if (maVoiture.deQuellePuissance() == 4) {
keulkeul.blogspot.com

System.out.println("Pas trs Rapide"); Envoi dun message


lobjet maVoiture
}

// La voiture acclre
maVoiture.acclre(123.5);
Appel dun slecteur
}
}
Cours Java - M. Baron - Page 67
Envoi de messages : passage de paramtres

 Un paramtre dune mthode peut tre


 Une variable de type simple
 Une rfrence dun objet type par nimporte quelle classe

 En Java tout est pass par valeur


 Les paramtres effectifs dune mthode
 La valeur de retour dune mthode (si diffrente de void)

 Les types simples


 Leur valeur est recopie
 Leur modification dans la mthode nentrane pas celle de loriginal
keulkeul.blogspot.com

 Les objets
 Leur modification dans la mthode entrane celle de loriginal!!!
 Leur rfrence est recopie et non pas les attributs
Cours Java - M. Baron - Page 68
Envoi de messages : passage de paramtres

 Exemple : passage de paramtres


public class TestMaVoiture {

public static void main (String[] argv) {

// Dclaration puis cration 1


Voiture maVoiture = new Voiture();

// Dclaration puis cration 2


Voiture maSecondeVoiture = new Voiture();
Rfrence comme
// Appel de la mthode compare(voiture) qui paramtre
// retourne le nombre de diffrence
int p = maVoiture.compare(maSecondeVoiture);

System.out.println("Nbre diffrence :" + p);


}
Voiture
keulkeul.blogspot.com

}
-
+ acclre (rel)
Appel dun slecteur avec
+ compare (Voiture) : entier
passage dune rfrence
+
Cours Java - M. Baron - Page 69
Lobjet courant

 Lobjet courant est dsign par le mot cl this


 Permet de dsigner lobjet dans lequel on se trouve
 self ou current dans dautres langages
 Dsigne une rfrence particulire qui est un membre cach

Ne pas tenter daffecter une


nouvelle valeur this !!!!
this = ... ; // Ne pas y penser

 Utilit de lobjet courant


keulkeul.blogspot.com

 Rendre explicite laccs aux propres attributs et mthodes dfinies


dans la classe
 Passer en paramtre dune mthode la rfrence de lobjet courant
Cours Java - M. Baron - Page 70
Lobjet courant : attributs et mthodes

 Dsigne des variables ou mthodes dfinies dans une classe


public class Voiture {

...
private boolean estDemarree;
private double vitesse;

public int deQuellePuissance() {


...
}

public void accelere(double vitesse) { Dsigne la variable


if (estDemarree) { vitesse
this.vitesse = this.vitesse + vitesse;
}
}
}
keulkeul.blogspot.com

this nest pas ncessaire


Dsigne lattribut lorsque les identificateurs de
vitesse variables ne prsentent
Dsigne lattribut aucun quivoque
demarree
Cours Java - M. Baron - Page 71
Le retour dUML

 Association : les objets sont smantiquement lis


 Exemple : une Voiture est conduite par un Conducteur

 Agrgation : cycle de vie indpendant


Les losanges sont
 Exemple : une Voiture et une Galerie attachs la classe
qui contient
 Composition : cycle de vie identiques
 Exemple : voiture possde un moteur qui dure la vie de la voiture
Association
Composition
0..1 0..1
Voiture Conducteur
keulkeul.blogspot.com

Agrgation
4..5 1 0..1

Roue Moteur Galerie


Cours Java - M. Baron - Page 72
Codage de l'association : composition

 L'objet de classe Voiture peut envoyer des messages


l'objet de classe Moteur : Solution 1
Attribut qui stocke la
rfrence du moteur
Voiture
public class Voiture {

private Moteur leMoteur;


...

public Voiture(int p) {
leMoteur = new Moteur(p);
1
...
Moteur }
...
keulkeul.blogspot.com

A discuter : si le moteur }

dune voiture est mort ,


il y a la possibilit de le Cration de l'objet
changer Moteur

Cours Java - M. Baron - Page 73


Codage de l'association : composition

 L'objet de classe Moteur n'envoie pas de message l'objet


de classe Voiture : Solution 1
Attribut qui stocke la
puissance
Voiture
public class Moteur {

private int puissance;


...

public Moteur(int p) {
puissance = p;
1 ...
}
Moteur ...
keulkeul.blogspot.com

La puissance est donne


lors de la construction

Cours Java - M. Baron - Page 74


Codage de l'association : composition

 Il peut tre ncessaire que les deux objets en composition


s'changent des messages : Solution 2
 Lobjet Voiture voit lobjet Moteur Attribut qui stocke la
rfrence du Moteur

public class Voiture {


Voiture
private Moteur leMoteur;
...

public Voiture(int p) {
leMoteur = new Moteur(p,this);
...
}
...
keulkeul.blogspot.com

1
}
Moteur
Transmission de la
Cration de
rfrence de lobjet
lobjet Moteur
courant
Cours Java - M. Baron - Page 75
Codage de l'association : composition

 Il peut tre ncessaire que les deux objets en composition


s'changent des messages : Solution 2
 Lobjet Moteur voit lobjet Voiture
Attribut qui stocke la
puissance
public class Moteur {

Voiture private int puissance;


private Voiture laVoiture;
...

public Moteur(int p, Voiture v) {


puissance = p;
laVoiture = v;
...
keulkeul.blogspot.com

}
1
...
Moteur }

La puissance est Rfrence dun objet


donne lors de la Voiture en paramtre
construction Cours Java - M. Baron - Page 76
Codage de lassociation : agrgation

 L'objet de classe Galerie nenvoie pas de message lobjet


de classe Voiture
Attribut qui stocke une
rfrence de Galerie

public class Voiture {


Voiture
private Galerie laGalerie;
...

public Voiture(Galerie g) {
laGalerie = g;
...
}
0..1 ...
keulkeul.blogspot.com

Galerie }

Un objet Galerie est transmis


au moment de la
construction de Voiture
Cours Java - M. Baron - Page 77
Destruction et ramasse-miettes

 La destruction des objets se fait de manire implicite


 Le ramasse-miettes ou Garbage Collector se met en route
 Automatiquement
Prfrer dfinir une
 Si plus aucune variable ne rfrence lobjet mthode et de
linvoquer avant que
 Si le bloc dans lequel il est dfini se termine tout objet ne soit
 Si lobjet a t affect null plus rfrenc :
detruit()
 Manuellement :
 Sur demande explicite par linstruction System.gc()

 Un pseudo-destructeur protected void finalize() peut tre


keulkeul.blogspot.com

dfini explicitement par le programmeur


 Il est appel juste avant la libration de la mmoire par la machine
virtuelle, mais on ne sait pas quand
 Conclusion : pas trs sr!!!!
Cours Java - M. Baron - Page 78
Destruction et ramasse-miettes

public class Voiture {

private boolean estDemarree; Pour tre sr que finalize


...
s'excute il faut absolument
protected void finalize() { appeler explicitement
estDemarree = false; System.gc()
System.out.println("Moteur arrt");
}
... public class TestMaVoiture {
}
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
Voiture maVoiture = new Voiture();
Force le programme maVoiture.demarre();
se terminer // maVoiture ne sert plus rien
maVoiture = null;

// Appel explicite du garbage collector


keulkeul.blogspot.com

System.gc();

// Fin du programme
System.exit(0);
System.out.println("Message non visible");
}
}
Cours Java - M. Baron - Page 79
Gestion des objets

 Afficher son type et sa place mmoire : System.out.println()

System.out.println(maVoiture) // Voiture@119c082

 Rcuprer son type : mthode Class getClass()

maVoiture.getClass(); // Retourne un objet de type Class


Class classVoiture = maVoiture.getClass(); // Class est une classe!!!

 Tester son type : oprateur instanceof mot cl class


keulkeul.blogspot.com

if (maVoiture instanceof Voiture) {...} // Cest vrai

ou
if (maVoiture.getClass() == Voiture.class) {...} // C est vrai
// galement

Cours Java - M. Baron - Page 80


Surcharge

 La surcharge overloading nest pas limite aux constructeurs,


elle est possible galement pour nimporte quelle mthode

 Possibilit de dfinir des mthodes possdant le mme nom


mais dont les arguments diffrent

 Quand une mthode surcharge est invoque le compilateur


slectionne automatiquement la mthode dont le nombre est
le type des arguments correspondent au nombre et au type
keulkeul.blogspot.com

des paramtres passs dans lappel de la mthode


Des mthodes surcharges peuvent avoir
des types de retour diffrents condition
quelles aient des arguments diffrents
Cours Java - M. Baron - Page 81
Surcharge

 Exemple : une voiture surcharge


public class Voiture {
private double vitesse;
...

public void accelere(double vitesse) {


if (estDemarree) {
this.vitesse = this.vitesse + vitesse;
}
}
public void accelere(int vitesse) {
if (estDemaree) {
this.vitesse = this.vitesse +
(double)vitesse;
public class TestMaVoiture {
}
}
public static void main (String[] argv) {
...}
// Dclaration puis cration de maVoiture
keulkeul.blogspot.com

Voiture maVoiture = new Voiture();

// Acclration 1 avec un double


maVoiture.accelere(123.5);
// Acclration 2 avec un entier
maVoiture.accelere(124);
}}

Cours Java - M. Baron - Page 82


Constructeurs multiples : le retour

 Appel explicite dun constructeur de la classe lintrieur


dun autre constructeur
 Doit se faire comme premire instruction du constructeur
 Utilise le mot-cl this(paramtres effectifs)
public class Voiture {
...
 Exemple public Voiture() {
this(7, new Galerie());
 Implantation du constructeur }

sans paramtre de Voiture


public Voiture(int p) {
this(p, new Galerie());
}
partir du constructeur avec
keulkeul.blogspot.com

public Voiture(int p, Galerie g) {


paramtres puissance = p;
moteur = new Moteur(puissance);
galerie = g;
...
}
...

Cours Java - M. Baron - Page 83


Encapsulation

 Possibilit daccder aux attributs dune classe Java mais


pas recommand car contraire au principe dencapsulation
 Les donnes (attributs) doivent tre protgs et accessibles pour
lextrieur par des slecteurs

 Possibilit dagir sur la visibilit des membres (attributs et


mthodes) dune classe vis vis des autres classes
 Plusieurs niveaux de visibilit peuvent tre dfinis en
prcdant dun modificateur la dclaration dun attribut,
mthode ou constructeur
keulkeul.blogspot.com

 private
 public A revoir dans la
partie suivante
 protected
Cours Java - M. Baron - Page 84
Encapsulation : visibilit des membres dune classe

+ public - private

Utilisable uniquement par les classes


La classe peut tre utilise dfinies lintrieur dune autre
classe par nimporte quelle classe.
classe Une classe prive nest utilisable que
par sa classe englobante

Attribut accessible partout o


attribut sa classe est accessible. Nest Attribut restreint la classe
pas recommand du point de o est faite la dclaration
vue encapsulation
keulkeul.blogspot.com

Mthode accessible partout Mthode accessible


mthode lintrieur de la dfinition de
o sa classe est accessible.
la classe

Cours Java - M. Baron - Page 85


Encapsulation

 Exemple : encapsulation
public class Voiture {

private int puissance;


Une mthode prive ne peut plus
... tre invoque en dehors du code
de la classe o elle est dfinie
public void demarre() {
...
}

private void makeCombustion() {


...
} public class TestMaVoiture {
}
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
Voiture maVoiture = new Voiture();
keulkeul.blogspot.com

// Dmarrage de maVoiture
maVoiture.demarre();

maVoiture.makeCombustion(); // Erreur
}
}

Cours Java - M. Baron - Page 86


Les chanes de caractres String

 Ce sont des objets traits comme des types simples ...

 Initialisation
String maChaine = "Bonjour!"; // Cela ressemble un type simple

 Longueur
maChaine.length(); // Avec les parenthses car c'est une mthode

 Comparaison
maChaine.equals("Bonjour!"); // Renvoi vrai
keulkeul.blogspot.com

 Concatnation Faites attention la comparaison


de chanes de caractres.
String essai = "ess" + "ai"; maChaine == "toto";
String essai = "ess".concact("ai");
Comparaison sur les rfrences !!

Cours Java - M. Baron - Page 87


Les Chanes modifiables StringBuffer

 Elles sont modifiables par insertion, ajouts, conversions, etc

 On obtient une StringBuffer avec ses constructeurs


StringBuffer mCM = new StringBuffer(int length);
StringBuffer mCM = new StringBuffer(String str);

 On peut les transformer en chanes normales String


String s = mCM.toString();

 On peut leur ajouter nimporte (surcharge) quoi


keulkeul.blogspot.com

mCM.append(...); // String, int, long, float, double

 On peut leur insrer nimporte (surcharge) quoi


mCM.insert(int offset, ...); // String, int, long, float, double

Cours Java - M. Baron - Page 88


Les chanes dcomposables StringTokenizer

 Elles permettent la dcomposition en mots ou lments


suivant un dlimiteur
this is a test => this
is
a
test

 On obtient une StringTokenizer avec ses constructeurs


StringTokenizer mCM = new StringTokenize(String str); // Dlimiteur = blanc
StringTokenizer rMCM = new StringTokenizer(String str, String delim);

 Un exemple
keulkeul.blogspot.com

StringTokenizer st =
new StringTokenizer("Bonjour,
le monde|de|Java",", |");

while(st.hasMoreElements())
System.out.println("Element : " + st.nextElement());

Cours Java - M. Baron - Page 89


Variables de classe

 Il peut tre utile de dfinir pour une classe des attributs


indpendamment des instances : nombre de Voitures
cres

 Utilisation des Variables de classe comparables aux


variables globales

 Usage des variables de classe


 Variables dont il nexiste quun seul exemplaire associ sa classe
de dfinition
keulkeul.blogspot.com

 Variables existent indpendamment du nombre dinstances de la


classe qui ont t crs

 Variables utilisables mme si aucune instance de la classe nexiste


Cours Java - M. Baron - Page 90
Variables de classe

 Elles sont dfinies comme les attributs mais avec le mot-cl


static
Attention lencapsulation. Il
est dangereux de laisser cette
public static int nbVoitureCreees; variable de classe en public.

 Pour y accder, il faut utiliser non pas un identificateur mais


le nom de la classe
Voiture.nbVoitureCreees = 3;
keulkeul.blogspot.com

Il nest pas interdit dutiliser une


variable de classe comme un attribut
(au moyen d un identificateur) mais
fortement dconseill

Cours Java - M. Baron - Page 91


Constantes de classe

 Usage
 Ce sont des constantes lies une classe
 Elles sont crites en MAJUSCULES Une constante de classe
est gnralement
toujours visible

 Elles sont dfinies (en plus) avec le mot-cl final


public class Galerie {
public static final int MASSE_MAX = 150;
}
keulkeul.blogspot.com

 Pour y accder, il faut utiliser non pas un identificateur


dobjet mais le nom de la classe (idem variables de classe)
if (maVoiture.getWeightLimite() <= Galerie.MASSE_MAX) {...}

Cours Java - M. Baron - Page 92


Variables et Constantes de classe

 Exemple : constantes de classe


public class Voiture {

public static final int PTAC_MAX = 3500;


private int poids;
Dangereux car
public static int nbVoitureCreees; possibilit de
...
modification
public Voiture(int poids, ...) { extrieure...
this.poids = poids;
nbVoitureCrees++;
...
public class TestMaVoiture {
}
}
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
Voiture maVoiture = new Voiture(2500);
...
Utilisation de
keulkeul.blogspot.com

System.out.println("Poids maxi:" +
Variables et Voiture.PTAC_MAX);
Constantes de classe System.out.println(Voiture.nbVoitureCreees);
par le nom de la
...
}
classe Voiture }

Cours Java - M. Baron - Page 93


Mthodes de classe

 Usage
 Ce sont des mthodes qui ne s'intressent pas un objet particulier
 Utiles pour des calculs intermdiaires internes une classe
 Utiles galement pour retourner la valeur d'une variable de classe
en visibilit private

 Elles sont dfinies comme les mthodes d'instances, mais


avec le mot cl static
public static double vitesseMaxToleree() {
return vitesseMaxAutorisee*1.10;
}
keulkeul.blogspot.com

 Pour y accder, il faut utiliser non pas un identificateur


d'objet mais le nom de la classe (idem variables de classe)
Voiture.vitesseMaxToleree()

Cours Java - M. Baron - Page 94


Mthodes de classe

 Exemple : mthode de classe


public class Voiture {
Dclaration d'une
private static int nbVoitureCreees; variable de classe
...
prive. Respect des
public static int getNbVoitureCreees(){ principes
d'encapsulation.
return Voiture.nbVoitureCreees;
}
}

Dclaration d'une public class TestMaVoiture {


mthode de classe
public static void main (String[] argv) {
pour accder la // Dclaration puis cration de maVoiture
valeur de la variable Voiture maVoiture = new Voiture(2500);
keulkeul.blogspot.com

de classe.
...

System.out.println("Nbre Instance :" +


Voiture.getNbVoitureCreees());
}
}

Cours Java - M. Baron - Page 95


Mthodes de classe : erreur classique

 Exemple (suite) : mthode de classe


public class Voiture {

private Galerie laGalerie; Dclaration d'un objet


... Galerie non statique
public Voiture(Galerie g) {
laGalerie = g;
...
}

public static boolean isGalerieInstall() {


return (laGalerie != null)
}
}

Erreur : Utilisation d'un


keulkeul.blogspot.com

attribut non statique


On ne peut pas utiliser de
dans une zone statique
variables d'instance dans une
mthode de classe!!!!

Cours Java - M. Baron - Page 96


Mthodes de classe

 Rappel : les types simples (int, double, etc.) possde un


alter-ego objet disposant de mthodes de conversion
 Par exemple la classe Integer encapsule le type int
 Constructeur partir dun int ou dune chane de caractres
public Integer(int value);
public Integer(String s);
 Disponibilit de mthodes qui permettent la conversion en type simple
Integer valueObjet = new Integer(123);
int valuePrimitif = valueObjet.intValue();
Ou
int valuePrimitif = valueObjet; (AutoBoxing)
 Des mthodes de classe trs utiles qui permettent partir dune
keulkeul.blogspot.com

chane de caractres de transformer en type simple ou type object


String maValueChaine = new String("12313");
int maValuePrimitif = Integer.parseInt(maValueChaine);

Attention aux erreurs de conversion. Retour dune


exception. Voir dans la dernire partie du cours
Cours Java - M. Baron - Page 97
Les tableaux en Java : application Objets

1 Dclaration
Voiture[]
monTableau;

2 Dimensionnement Ou 12 et 3
monTableau = new Voiture[3]; Voiture[] monTab = {
new Voiture(5),
3 Initialisation new Voiture(7),
new Voiture(8)
monTableau[0] = new Voiture(5); };
monTableau[1] = new Voiture(7);
monTableau[2] = new Voiture(8);
keulkeul.blogspot.com

for (int i = 0; i < monTableau.length; i++) {


System.out.println(monTableau[i].demarre());
}

Cours Java - M. Baron - Page 98


Varargs : passage de paramtres en nombre indfini

 Varargs est une nouveaut Java 5 permettant de passer en

paramtre un nombre indfini de valeurs de mme type

 Pour ceux qui ont connu le langage Turbo Pascal, lquivalent

du System.out.println() le permettait dj

 Avant la version Java 5, il fallait passer en paramtre un

tableau dun type donn pour raliser la mme chose


keulkeul.blogspot.com

public ajouterPassager(String[] tab)

 La syntaxe de varargs est la suivante : utilisation de


public ajouterPassager(String... tab)
Cours Java - M. Baron - Page 99
Varargs : passage de paramtres en nombre indfini

 Du ct de la mthode o le varargs est dfini, les donnes


sont manipules comme un tableau
public ajouterPassager(String... tab) {
for (String current : tab) {
System.out.println(current)
}
}

 Du ct client qui fait un appel la mthode, les donnes


peuvent tre envoyes comme un
 Tableau
String passagers = {"Tony", "Luck", "John"};
maVoiture.ajouterPassager(passagers);
keulkeul.blogspot.com

 Ensemble de paramtres

maVoiture.ajouterPassager("Tony", "Luck", "John");

Cours Java - M. Baron - Page 100


Varargs : passage de paramtres en nombre indfini

 Comme un varargs est considr comme un tableau le


contenu peut tre vide
public Voiture(int... carac) {
...
}
public static void main(String[] argv) {
new Voiture();
}

 Si un varargs est accompagn dun ou plusieurs autres para-


mtres, le varargs doit obligatoirement tre plac en dernier
public Voiture(String mod, int... carac) {
keulkeul.blogspot.com

...
}

public Voiture(int... Carac, String mod) {


...
}
Cours Java - M. Baron - Page 101
Varargs : passage de paramtres en nombre indfini

 Problmatiques lies la surcharge dune mthode utilisant


un varargs
 Dans le cas de la surcharge dune mthode la mthode contenant le
varargs a la priorit la plus faible

public class Voiture {


public Voiture(int... carac) {
}

public Voiture(int caract1, int caract2) {


...
}
keulkeul.blogspot.com

public static void main(String[] argv) {


new Voiture(12, 23);
new Voiture(12);
}
}

Cours Java - M. Baron - Page 102


Programmation Oriente Objet
application au langage Java
Hritage

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
Dfinition et intrts

 Hritage
 Technique offerte par les langages de programmation pour
construire une classe partir dune (ou plusieurs) autre classe en
partageant ses attributs et oprations

 Intrts
 Spcialisation, enrichissement : une nouvelle classe rutilise les
attributs et les oprations d une classe en y ajoutant et/ou des
oprations particulires la nouvelle classe
 Redfinition : une nouvelle classe redfinit les attributs et
keulkeul.blogspot.com

oprations dune classe de manire en changer le sens et/ou le


comportement pour le cas particulier dfini par la nouvelle classe
 Rutilisation : vite de rcrire du code existant et parfois on ne
possde pas les sources de la classe hriter Cours Java - M. Baron - Page 104
Spcialisation de la classe Voiture

 Un vhicule prioritaire est une voiture avec un gyrophare


 Un vhicule prioritaire rpond aux mmes messages que la Voiture
 On peut allumer le gyrophare dun vhicule prioritaire
 Une voiture lectrique est une voiture dont lopration de
dmarrage est diffrente
 Une voiture lectrique rpond aux mme messages que la Voiture
 On dmarre une voiture lectrique en activant un disjoncteur
Voiture
Voiture + dmarre()

Relation dhritage
keulkeul.blogspot.com

VehiculePrioritaire VoitureElectrique

- gyrophare : boolen - disjoncteur : boolen

+ allumeGyrophare() + dmarre()

Cours Java - M. Baron - Page 105


Classes et sous-classes

 Un objet de la classe VehiculePrioritaire ou VoitureElectrique

est aussi un objet de la classe Voiture donc il dispose de

tous les attributs et oprations de la classe Voiture

VehiculePrioritaire VoitureElectrique
- gyrophare : boolen - disjoncteur : boolen
+ allumeGyrophare() + dmarre()
- puissance : entier
Hrit de Voiture

- puissance : entier

Hrit de Voiture
- estDmarre : boolean - estDmarre : boolean
keulkeul.blogspot.com

- vitesse : flottant - vitesse : flottant


+ deQuellePuissance() : entier + deQuellePuissance() : entier
+ dmarre() + dmarre()
+ acclre(flottant) + acclre(flottant)

Cours Java - M. Baron - Page 106


Classes et sous-classes : terminologie

 Dfinitions

 La classe VehiculePrioritaire hrite de la classe Voiture

 Voiture est la classe mre et VehiculePrioritaire la classe fille

 Voiture est la super-classe de la classe VehiculePrioritaire

 VehiculePrioritaire est une sous-classe de Voiture

 Attention

 Un objet de la classe VehiculePrioritaire ou VoitureElectrique est


keulkeul.blogspot.com

forcment un objet de la classe Voiture

 Un objet de la classe Voiture nest pas forcment un objet de la


classe VehiculePrioritaire ou VoitureElectrique
Cours Java - M. Baron - Page 107
Gnralisation et Spcialisation

 La gnralisation exprime une relation est-un entre une


classe et sa super-classe

Voiture

Raffinement
Abstraction
Super-classe

VehiculePrioritaire
Sous-classe

VehiculePrioritaire est
 Lhritage permet
keulkeul.blogspot.com

une Voiture
 de gnraliser dans le sens abstraction
 de spcialiser dans le sens raffinement

Cours Java - M. Baron - Page 108


Exemple dhritage

 Exemple : espces
Mammifre

Ctac Humain

Baleine Dauphin Etudiant Enseignant


keulkeul.blogspot.com

Mobi Dick Ecco Raoul Mickal

Cours Java - M. Baron - Page 109


Hritage et Java

 Hritage simple
 Une classe ne peut hriter que dune seule autre classe

 Dans certains autres langages (ex : C++) possibilit dhritage multiple

 Utilisation du mot-cl extends aprs le nom de la classe


public class VehiculePrioritaire extends Voiture {

private boolean gyrophare;


...
Voiture
public void allumeGyrophare() {
gyrophare = true;
}
...
VehiculePrioritaire }
keulkeul.blogspot.com

- gyrophare : boolen
+ allumeGyrophare() Nessayez pas dhriter de plusieurs
classes (extends Voiture, Sante, )
a ne fonctionne pas

Cours Java - M. Baron - Page 110


Hritage plusieurs niveaux

public class Voiture {


...
Voiture public void dmarre() {
+ dmarre()
...
}
}

public class VehiculePrioritaire


extends Voiture { Ambulance am =
VehiculePrioritaire ... new Ambulance(...);
public void allumeGyrophare() { am.dmarre();
+ allumeGyrophare() ... am.allumeGyrophare();
} am.chercher("Raoul");
}

public class Ambulance


keulkeul.blogspot.com

extends VehiculePrioritaire {
Ambulance
private String malade;
- malade : String ...
public void chercher(String ma) {
+ chercher(String)
...
}
}

Cours Java - M. Baron - Page 111


Surcharge et redfinition

 Lhritage
 Une sous-classe peut ajouter des nouveaux attributs et/ou mthodes
ceux quelle hrite (surcharge en fait partie)
 Une sous-classe peut redfinir (redfinition) les mthodes ceux dont
elle hrite et fournir des implmentations spcifiques pour celles-ci

 Rappel de la surcharge : possibilit de dfinir des mthodes


possdant le mme nom mais dont les arguments
(paramtres et valeur de retour) diffrent
Des mthodes surcharges peuvent
avoir des types de retour diffrents
keulkeul.blogspot.com

condition quelles aient des


arguments diffrents

 Redfinition (overriding) : lorsque la sous-classe dfinit une


mthode dont le nom, les paramtres et le type de retour
sont identiques Cours Java - M. Baron - Page 112
Surcharge et redfinition

 Une voiture lectrique est une voiture dont lopration de


dmarrage est diffrente
 Une voiture lectrique rpond aux mme messages que la Voiture
 On dmarre une voiture lectrique en activant un disjoncteur

Voiture public class VoitureElectrique extends Voiture {


+ dmarre()
private boolean disjoncteur;
...

public void demarre() {


disjoncteur = true;
VoitureElectrique }
keulkeul.blogspot.com

- disjoncteur : ...
}
boolen
+ dmarre()
Redfinition de la
mthode
Cours Java - M. Baron - Page 113
Surcharge et redfinition

public class Voiture {


... Ne pas confondre surcharge et redfinition.
public void demarre() {
Dans le cas de la surcharge la sous-classe
...
} ajoute des mthodes tandis que la redfinition
} spcialise des mthodes existantes

Redfinition Surcharge

public class VoitureElectrique public class VehiculePrioritaire


extends Voiture { extends Voiture {
... ...
public void demarre() { public void demarre(int code) {
... ...
} }
keulkeul.blogspot.com

} }

VoitureElectrique possde VehiculePrioritaire possde


au plus une mthode de au plus une mthode de
moins que VehiculePrioritaire plus que VoitureElectrique
Cours Java - M. Baron - Page 114
Redfinition avec rutilisation

 Intrt
 La redfinition dune mthode cache le code de la mthode hrite

 Rutiliser le code de la mthode hrit par le mot-cl super

 super permet ainsi la dsignation explicite de linstance dune


classe dont le type est celui de la classe mre

 Accs aux attributs et mthodes redfinies par la classe courante


mais que lon dsire utiliser

super.nomSuperClasseMethodeAppelee(...);
keulkeul.blogspot.com

 Exemple de la Voiture : les limites rsoudre


 Lappel la mthode demarre de VoitureElectrique ne modifie que
lattribut disjoncteur
Cours Java - M. Baron - Page 115
Redfinition avec rutilisation

 Exemple : rutilisation de mthode


public class Voiture { La position de super
na ici aucune
private boolean estDemarree;
...
importance

public void demarre() { public class VoitureElectrique extends Voiture {


estDemarree = true;
} private boolean disjoncteur;
} ...

Mise jour de lattribut public void demarre() {


estDemarree disjoncteur = true;
super.demarre();
}
...
}
public class TestMaVoiture {
keulkeul.blogspot.com

public static void main (String[] argv) {


// Dclaration puis cration Envoi dun message par
VoitureElectrique laRochelle =
new VoitureElectrique(...); appel de demarre
laRochelle.demarre();
}
}
Cours Java - M. Baron - Page 116
Usage des constructeurs : suite

 Possibilit comme les mthodes de rutiliser le code des

constructeurs de la super-classe

 Appel explicite dun constructeur de la classe mre

lintrieur dun constructeur de la classe fille


Lappel au constructeur de la super-
 Utilise le mot-cl super classe doit se faire absolument en
premire instruction
super(paramtres du constructeur);
keulkeul.blogspot.com

 Appel implicite d'un constructeur de la classe mre est

effectu quand il n'existe pas d'appel explicite. Java insre

implicitement l'appel super() Cours Java - M. Baron - Page 117


Usage des constructeurs : suite

 Exemple : constructeurs voiture


public class Voiture { Lappel au constructeur de
...
la super-classe doit se
public Voiture() { faire absolument en
this(7, new Galerie()); premire instruction
}

Implantation du constructeur
public Voiture(int p) {
this(p, new Galerie());
} de VoiturePrioritaire partir
public Voiture(int p, Galerie g) {
de Voiture
puissance = p;
moteur = new Moteur(puissance);
galerie = g; public class VoiturePrioritaire
... extends Voiture {
}
keulkeul.blogspot.com

... private boolean gyrophare;


}
public VoiturePrioritaire(int p, Galerie g) {
super(p, null);
this.gyrophare = false;
}}

Cours Java - M. Baron - Page 118


Usage des constructeurs : suite

 Exemple : chanage des constructeurs


public class A {
public A() {
System.out.println("Classe A");
}
}

public class B extends A {


private String message;
public B(String message) {
super(); // Appel implicite
System.out.println("Classe B");
System.out.println(message);
}
}

public class C extends B {


public C(String debut) {
keulkeul.blogspot.com

super("Message issu C" + debut);


System.out.println("Classe C");
System.out.println("Fin");
}
public class Test {
}
public static void main (String[] argv) {
new C("Message du main");
}
} Cours Java - M. Baron - Page 119
Usage des constructeurs : suite

 Rappel : si une classe ne dfinit pas explicitement de


constructeur, elle possde alors un constructeur par dfaut
 Sans paramtre
 Qui ne fait rien
 Inutile si un autre constructeur est dfini explicitement
public class A { public A() {
public void afficherInformation() { super();
System.out.println("Des Informations..."); }
}
}

public class B {
private String pInfo;
super();
public B(String pInfo) {
keulkeul.blogspot.com

this.pInfo = pInfo;
}
}
public class Test {
public static void main (String[] argv) {
new B("Message du main");
}
}
Cours Java - M. Baron - Page 120
Usage des constructeurs : suite

 Exemple : constructeur explicite


public class Voiture {
... Constructeurs explicites
public Voiture(int p) { dsactivation du
this(p, new Galerie());
} constructeur par dfaut
public Voiture(int p, Galerie g) {
puissance = p;
moteur = new Moteur(puissance); Erreur : il n'existe pas dans
galerie = g; Voiture de constructeur sans
...
paramtre
}
...
}
public class VoiturePrioritaire
extends Voiture {
keulkeul.blogspot.com

private boolean gyrophare; super();

public VoiturePrioritaire(int p, Galerie g) {


this.gyrophare = false;
}
}

Cours Java - M. Baron - Page 121


La classe Object : le mystre rsolu

 La classe Object est la classe de plus haut niveau dans la


hirarchie d'hritage
 Toute classe autre que Object possde une super-classe
 Toute classe hrite directement ou indirectement de la classe Object
 Une classe qui ne dfinit pas de clause extends hrite de la classe
Object Object
+ Class getClass()
public class Voiture extends Object { + String toString()
... + boolean equals(Object)
+ int hashCode()
public Voiture(int p, Galerie g) {

keulkeul.blogspot.com

puissance = p;
moteur = new Moteur(puissance);
galerie = g;
... Il n'est pas ncessaire
} d'crire explicitement
... extends Object
}

Cours Java - M. Baron - Page 122


La classe Object : le mystre rsolu
Avant redfinition
public class Voiture { public class Test {
... public static void main (String[] argv) {
public Voiture(int p) { Voiture maVoiture = new Voiture(3);
this(p, new Galerie()); System.out.println(maVoiture);
} }
} public Sring toString()} {
return (this.getClass().getName() +
"@" + this.hashCode());
}

public class Voiture {


...
public Voiture(int p) {
Aprs redfinition

this(p, new Galerie());


.ln(maVoiture.toString());
}
public class Test {
public String toString() { public static void main (String[] argv) {
keulkeul.blogspot.com

return("Puissance:" + p); Voiture maVoiture = new Voiture(3);


} System.out.println(maVoiture);
} }
}
Redfinition de la mthode
String toString()
Cours Java - M. Baron - Page 123
Droits daccs aux attributs et mthodes

 Exemple de la Voiture : les limites rsoudre


 dmarre() est disponible dans la classe VehiculePrioritaire
Cest--dire que lon peut dmarrer sans donner le code !!!
 Solution : protger la mthode dmarre() de la classe Voiture

 Ralisation
 Utilisation du mot-cl protected devant la dfinition des mthodes
et/ou attributs
 Les membres sont accessibles dans la classe o ils sont dfinis, dans
toutes ses sous-classes Voiture
# dmarre()
keulkeul.blogspot.com

dmarre() nest pas accessible


publiquement dans un
objet VehiculePrioritaire
VehiculePrioritaire VehiculeElectrique
+ dmarre(int code) + dmarre()

Cours Java - M. Baron - Page 124


Droits daccs aux attributs et mthodes

 Exemple : accs aux mthodes


public class VoiturePrioritaire
public class Voiture { extends Voiture {

private boolean estDemarree; private int codeVoiture;


...
public void demarre(int code) {
protected void demarre() { if (codeVoiture == code) {
estDemarree = true; super.demarre();
} };
} }
}

public class TestMaVoiture {

public static void main (String[] argv) {


// Dclaration puis cration de maVoiture
keulkeul.blogspot.com

VehiculeElectrique laRochelle = new VehiculeElectrique(...);


larochelle.demarre(); // Appel le demarre de VehiculeElectrique

VehiculePrioritaire pompier = new VehiculePrioritaire(...);


pompier.demarre(1234); // Appel le demarre VoiturePrioritaire
pompier.demarre(); // Erreur puisque demarre nest pas public
}}

Cours Java - M. Baron - Page 125


Mthodes et classes finales

 Dfinition
 Utilisation du mot-cl final
 Mthode : interdire une ventuelle redfinition dune mthode

public final void demarre();

 Classe : interdire toute spcialisation ou hritage de la classe


concerne

public final class VoitureElectrique extends Voiture {


...
keulkeul.blogspot.com

La classe String par


exemple est finale
Cours Java - M. Baron - Page 126
Programmation Oriente Objet
application au langage Java
Hritage et Polymorphisme

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
Dfinition du polymorphisme

 Dfinition
 Un langage orient objet est dit polymorphique, sil offre la possibilit
de pouvoir percevoir un objet en tant quinstance de classes varies,
selon les besoins
 Une classe B qui hrite de la classe A peut tre vue comme un
sous-type du type dfini par la classe A
Voiture
+ dmarre()  Rappel
 voitureLarochelle est une instance de la
classe VoitureElectrique
keulkeul.blogspot.com

VoitureElectrique  Mais aussi


+ dmarre()  voitureLarochelle est une instance de la
+ getVoltage() : int
classe Voiture

voitureLarochelle Cours Java - M. Baron - Page 128


Polymorphisme et Java : surclassement

 Java est polymorphique


 A une rfrence de la classe Voiture, possible daffecter une valeur qui
est une rfrence vers un objet de la classe VoitureElectrique
 On parle de surclassement ou upcasting
 A une rfrence dun type donn, soit A, il est possible daffecter une
valeur qui correspond une rfrence vers un objet dont le type
effectif est nimporte quelle sous classe directe ou indirecte de A
Voiture
+ dmarre() Objet de type sous-classe
directe de Voiture
public class Test {
keulkeul.blogspot.com

VoitureElectrique public static void main (String[] argv) {

+ dmarre() Voiture voitureLarochelle =


+ getVoltage() : int new VoitureElectrique(...);
}
}

voitureLarochelle
Cours Java - M. Baron - Page 129
Polymorphisme et Java : surclassement

 A la compilation
 Lorsquun objet est surclass , il est vu par le compilateur comme
un objet du type de la rfrence utilise pour le dsigner
 Ses fonctionnalits sont alors restreintes celles proposes par la
classe du type de la rfrence
public class Test {
public static void main (String[] argv) {

// Dclaration et cration dun objet Voiture


Voiture voitureLarochelle = new VoitureElectrique(...);

// Utilisation dune mthode de la classe Voiture


voitureLarochelle.demarre();

// Utilisation dune mthode de la classe VoitureElectrique


keulkeul.blogspot.com

System.out.println(voitureLarochelle.getVoltage()); // Erreur
}
}

La mthode getVoltage() nest pas


Examiner le type de disponible dans la classe Voiture!!!
la rfrence
Cours Java - M. Baron - Page 130
Polymorphisme et Java : surclassement

 Exemple : surclassement
public class Test {
public static void main (String[] argv) {
// Dclaration et cration dun objet Voiture
Voiture voitureLarochelle = new VoitureElectrique(...);

// Utilisation dune mthode de la classe Voiture


voitureLarochelle.demarre();

// Utilisation dune mthode de la classe VoitureElectrique


System.out.println(voitureLarochelle.getVoltage());
}
}

Voiture
keulkeul.blogspot.com

Remarque : Quel code va tre + dmarre()

effectivement excut lorsque le message


demarre() est envoy voitureLarochelle ?? voitureLarochelle

Cours Java - M. Baron - Page 131


Polymorphisme et Java : lien dynamique

public class Test {


public static void main (String[] argv) {
Lobjet voitureLarochelle
Voiture voitureLarochelle = initialise les attributs de la
new VoitureElectrique(...); classe VoitureElectrique
voitureLarochelle.demarre();
}
Voiture
}
+ dmarre() {
estDemarre = true;
}

voitureLarochelle.demarre()
keulkeul.blogspot.com

VoitureElectrique
+ dmarre() {
Constat : Cest la mthode dmarre() super.dmarre();
de VoitureElectrique qui est appele. disjoncteur = true;
Puis elle appelle (par super) la
}

mthode de la super-classe
Cours Java - M. Baron - Page 132
Polymorphisme et Java : lien dynamique

 Exemple : lien dynamique


public class Point {
private int x,y;
public Point(int x, int y) { this.x = x; this.y = y; }
public void deplace(int dx, int dy) { x += dx; y+=dy; } Point
public void affiche() { System.out.println("Je suis en "+ x + " " + y);}
}

public class Pointcol extends Point {


private byte couleur;
public Pointcol(int x, int y, byte couleur) {
super(x,y);
this.couleur = couleur;
}
public void affiche() { Pointcol
super.affiche();
System.out.println("et ma couleur est : " + couleur);
}
}

public class Test {


keulkeul.blogspot.com

public static void main (String[] argv) {


Point p = new Point(23,45);
p.affiche();
Pointcol pc = new Pointcol(5,5,(byte)12);
p = pc;
p.affiche();
p = new Point(12,45);
p.affiche();
}
} Cours Java - M. Baron - Page 133
Polymorphisme et Java : lien dynamique
public class Point {
private int x,y;
public Point(int x, int y) { this.x = x; this.y = y; }
public void deplace(int dx, int dy) { x += dx; y+=dy; }
public void affiche() { Point
this.identifie();
System.out.println("Je suis en "+ x + " " + y);
}
public void identifie() {System.out.println("Je suis un point");}
}

public class Pointcol extends Point {


private byte couleur;
public Pointcol(int x, int y, byte couleur) {...}
public void affiche() {
super.affiche(); Pointcol
System.out.println("et ma couleur est : " + couleur);
}
public void identifie() {System.out.println("Je suis un point color");}
}

public class Test {


keulkeul.blogspot.com

public static void main (String[] argv) {


Point p = new Point(23,45);
p.affiche();
Pointcol pc = new Pointcol(5,5,(byte)12);
p = pc;
p.affiche();
p = new Point(12,45);
p.affiche();
}
} Cours Java - M. Baron - Page 134
Polymorphisme et Java : lien dynamique

 A lexcution

 Lorsquune mthode dun objet est accde au travers dune rfrence

surclasse , cest la mthode telle quelle est dfinie au niveau de

la classe effective de lobjet qui est invoque et excute

 La mthode excuter est dtermine lexcution et non pas la

compilation
keulkeul.blogspot.com

 On parle de liaison tardive, lien dynamique, dynamic binding,

latebinding ou run-time binding


Cours Java - M. Baron - Page 135
Polymorphisme et Java : bilan

public class Test {


public static void main (String[] argv) {
Voiture maVoit = new VoitureElectrique(...);
maVoit.dmarre();
} Voiture
} + dmarre() {

 Surclassement (compilation)
estDemarre = true;
}

 Une variable maVoit est dclare comme tant


une rfrence vers un objet de la classe Voiture
 Un objet de la classe VoitureElectrique est cr
 Pour le compilateur maVoit reste une rfrence VoitureElectrique
dun objet de la classe Voiture, et il empche + dmarre() {
daccder aux mthodes spcifiques super.dmarre();
keulkeul.blogspot.com

VoitureElectrique
disjoncteur = true;
}

 Liaison dynamique (excution)


 Une variable maVoit est bel et bien une rfrence
vers un objet de la classe VoitureElectrique
Cours Java - M. Baron - Page 136
Polymorphisme : ok, mais pourquoi faire ?

 Que des avantages


 Plus besoin de distinguer diffrents cas en fonction de la classe des
objets
 Le polymorphisme constitue la troisime caractristique essentielle
dun langage orient objet aprs labstraction des donnes
(encapsulation) et lhritage
 Une plus grande facilit dvolution du code. Possibilit de dfinir de
nouvelles fonctionnalits en hritant de nouveaux types de donnes
partir dune classe de base commune sans avoir besoin de modifier le
code qui manipule la classe de base
keulkeul.blogspot.com

 Dveloppement plus rapide


 Plus grande simplicit et meilleure organisation du code
 Programmes plus facilement extensibles
 Maintenance du code plus aise
Cours Java - M. Baron - Page 137
Polymorphisme : un exemple typique

 Exemple : la gomtrie
 Stocker des objets Forme de nimporte quel type (Rectangle ou
Cercle) puis les afficher
Stockage
Forme
- liste : Forme[ ]
- positionx : int
- positiony : int + ajouter(Forme)
+ afficherForme()
+ afficher()
...
keulkeul.blogspot.com

Cercle
Rectangle
- rayon : int
- largeur : int
- hauteur : int + afficher()
+ afficher()

Cours Java - M. Baron - Page 138
Polymorphisme : un exemple typique

 Exemple (suite) : la gomtrie


public class Stockage {
private Forme[] liste;
private int taille;
private int i;
Si une nouveau type de
public Stockage(int taille) { Forme est dfini, le code
this.taille = taille;
liste = new Forme[this.taille]; de la classe Stockage
i = 0; nest pas modifi
}

public void ajouter(Forme f) {


if (i < taille) {
liste[i] = f;
public class Test {
i++; public static void main (String[] argv) {
} Stockage monStock = new Stockage(10);
} monStock.ajouter(new Cercle(...));
monStock.ajouter(new Rectangle(...));
public void afficherForme() {
keulkeul.blogspot.com

for (int i = 0; i < taille; i++) {


Rectangle monRect = new Rectangle(...);
liste[i].afficher();
} Forme tonRect = new Rectangle(...);
} monStock.ajouter(monRect);
} monStock.ajouter(tonRect);
}
}

Cours Java - M. Baron - Page 139


Polymorphisme : downcasting

 Intrt
 Force un objet librer les fonctionnalits caches
par le surclassement
 Conversion de type explicite (cast). Dj vu pour les types primitifs
ClasseA
ClasseA monObj = ...
ClasseB b = (ClasseB) monObj

 Pour que le cast fonctionne, il faut qu lexcution


le type effectif de monObj soit compatible
avec le type ClasseB
ClasseB
keulkeul.blogspot.com

 Compatible : on peut tester la compatibilit par le mot cl instanceof


obj instanceof ClasseB

Retourne vrai ou faux


Cours Java - M. Baron - Page 140
Polymorphisme : downcasting

 Exemple : downcasting
public class Test {
public static void main (String[] argv) {
Forme maForme = new Rectangle();
// Je ne peux pas utiliser les mthodes de la classe Rectangle

// Dclaration dun objet de type Rectangle


Rectangle monRectangle;
if (maForme instanceof Rectangle) {
monRectangle = (Rectangle)maForme;
// Utilisation possible des mthodes spcifiques de Rectangle
}
}
}

Ralisation de la
keulkeul.blogspot.com

conversion de lobjet de
Attention si la compatibilit est
fausse et si le cast est effectu type Forme en objet de
une exception de type type Rectangle
ClassCastException est leve
Cours Java - M. Baron - Page 141
La mthode equals()

 Deux possibilits pour comparer des objets dune classe


 Crer une mthode ad-hoc boolean comparer(MaClasse c) {}
qui compare les attributs
 Redfinir la mthode boolean equals(Object o) pour garder la
compatibilit avec les autres classes de Java
 Re-implmenter la mthode boolean equals(Object o)
en comparant les attributs (en utilisant une conversion de type
explicite) Object
+ boolean equals(Object)

keulkeul.blogspot.com

Rappel de la classe
Voiture
Voiture
- puissance : int
- estDmarre : int
- vitesse : reel
Cours Java - M. Baron - Page 142
La mthode equals()

 Exemple : redfinition de la mthode equals


public class Voiture extends Object {
Redfinition de la mthode
public boolean equals(Object o) {
if (!o instanceof Voiture) {
return false; equals de la classe Object
}

Voiture maVoit = (Voiture)o;


return this.puissance == maVoit.puissance && this.estDmarre ==
maVoit.estDmarre && this.vitesse == maVoit.vitesse;
}
...
} Mme valeurs darguments

public class Test {


public static void main (String[] argv) {
Voiture maVoit = new Voiture(...);
keulkeul.blogspot.com

VoitureElectrique maVoitele = new VoitureElectrique(...);

maVoit.equals(maVoitele); --> TRUE


}
}
Attention : lgalit de rfrence ==
vrifie si les rfrences sont les mmes,
cela ne compare pas les attributs
Cours Java - M. Baron - Page 143
Classes abstraites : intrts

 On ne connat pas toujours le comportement par dfaut


dune opration commune plusieurs sous-classes
 Exemple : toit dune voiture dcapotable. On sait que toutes les
dcapotables peuvent ranger leur toit, mais le mcanisme est
diffrent dune dcapotable lautre
 Solution : on peut dclarer la mthode abstraite dans la classe
mre et ne Pas lui donner dimplantation par dfaut
 Mthode abstraite et consquences : 3 rgles retenir
 Si une seule des mthodes dune classe est abstraite, alors la classe
devient aussi abstraite
keulkeul.blogspot.com

 On ne peut pas instancier une classe abstraite car au moins une de


ses mthodes na pas dimplmentation
 Toutes les classes filles hritant de la classe mre abstraite doivent
implmenter toutes ses mthodes abstraites ou sinon elles sont aussi
abstraites Cours Java - M. Baron - Page 144
Classes abstraites et Java

 Le mot cl abstract est utilis pour spcifier abstraite une


classe

 Une classe abstraite se dclare ainsi


public abstract class NomMaClasse {
...
}

 Une mthode abstraite se dclare ainsi


public abstract void maMethode(...);
keulkeul.blogspot.com

Pour crer une mthode abstraite, la


signature (nom et paramtres) est
dclare sans spcifier le corps et en
ajoutant le mot cl abstract
Cours Java - M. Baron - Page 145
Classes abstraites : exemple VoitureDecapotable

 La classe VoitureDecapotable
 Hrite de Voiture
Voiture

 Dfinit un attribut protg toitRepli

 Dfinit une mthode abstraite replieLeToit()


VoitureDecapotable {abstraite}
# toitRepli : boolen
+ replieLeToit() {abstraite}

 Les classes DeuxChevaux et C3Pluriel


hritent de VoitureDecapotable
keulkeul.blogspot.com

C3Pluriel
DeuxChevaux - arceauxRetirs : boolen
- capoteAttache : boolen + replieLeToit()
+ replieLeToit()
Cours Java - M. Baron - Page 146
Classes abstraites : exemple VoitureDecapotable

 Exemple : une voiture dcapotable


public abstract class VoitureDecapotable
extends Voiture {
protected boolean toitRepli;
Classe
abstraite }
public abstract void replieLeToit();

public class DeuxChevaux extends VoitureDecapotable {


private boolean capoteAttachee;

public void replieLeToit() {


Mthode this.toitReplie = true;
abstraite this.capoteAttachee = true;
}
}
keulkeul.blogspot.com

public class C3Pluriel extends VoitureDecapotable {


private boolean arceauxRetirs;
Attention : ce nest pas
public void replieLeToit() {
de la redfinition. On
this.toitReplie = true;
this.arceauxRetirs = true; parle dimplmentation
} de mthode abstraite
}
Cours Java - M. Baron - Page 147
Classes abstraites : exemple VoitureDecapotable

 Exemple (suite) : une voiture dcapotable


public class Test {
public static void main (String[] argv) {
// Dclaration et cration dune DeuxCheveaux
VoitureDecapotable voitureAncienne = new DeuxCheveaux(...);
// Envoi de message
voitureAncienne.replieLeToit();

// Dclaration et cration dune C3Pluriel


VoitureDecapotable voitureRecente = new C3Pluriel(...);
// Envoi de message
voitureRecente.replieLeToit();

// Dclaration et cration dune VoitureDecapotable


VoitureDecapotable voitureDecapotable =
new VoitureDecapotable(...); // Erreur
}
}
keulkeul.blogspot.com

Attention : La classe
VoitureDecapotable ne
peut tre instancie
puisquelle est
abstraite
Cours Java - M. Baron - Page 148
Classes abstraites : exemple Forme

 Exemple : la classe Forme


 Les mthodes surface() et primtre() sont abstraites

 Ces mthodes nont de sens que pour les


sous-classes Cercle et Rectangle Forme {abstraite}
- positionx, positiony : int
+ deplace(x,y)
Cercle
+ surface() : double {abstraite}
- rayon : int + primtre() : double {abstraite}
+ surface() : double
+ primtre() : double

public abstract class Forme { Rectangle


private int positionx, positiony; - larg, haut : int
keulkeul.blogspot.com

public void deplacer(double dx, double dy){ + surface() : double


x += dx; y += dy; + primtre() : double
}

public abstract double primtre(); Pas dimplmentation !!


public abstract double surface();
}
Cours Java - M. Baron - Page 149
Notion dinterface

 Une interface est un modle pour une classe


 Quand toutes les mthodes dune classe sont abstraites et quil ny a
aucun attribut nous aboutissons la notion dinterface
 Elle dfinit la signature des mthodes qui doivent tre implmentes
dans les classes qui respectent ce modle
 Toute classe qui implmente linterface doit implmenter toutes les
mthodes dfinies par linterface
 Tout objet instance dune classe qui implmente linterface peut tre
dclar comme tant du type de cette interface
 Les interfaces pourront se driver
 Exemple
keulkeul.blogspot.com

 Les choses Dmarrable doivent possder une mthode dmarre()


Voiture
Dmarrable << Interface >>
+ dmarre
Ordinateur
Cours Java - M. Baron - Page 150
Notion dinterface et Java

 Mise en uvre dune interface


 La dfinition dune interface se prsente comme celle dune classe.
Le mot cl interface est utilis la place de class
public interface NomInterface { Interface : ne pas
...
confondre avec les
}
interfaces graphiques
 Lorsquon dfinit une classe, on peut prciser quelle implmente
une ou plusieurs interface(s) donne(s) en utilisant une fois le mot
cl implements
public class NomClasses implements Interface1,Interface3, ... {
...
keulkeul.blogspot.com

 Si une classe hrite dune autre classe elle peut galement implmen-
ter une ou plusieurs interfaces
public class NomClasses extends SuperClasse implements Inter1, ... {
...
} Cours Java - M. Baron - Page 151
Notion dinterface et Java

 Mise en uvre dune interface


 Une interface ne possde pas dattribut

 Une interface peut possder des constantes

public interface NomInterface {


public static final int CONST = 2;
}

 Une interface ne possde pas de mot cl abstract

 Les interfaces ne sont pas instanciables (Mme raisonnement avec les


keulkeul.blogspot.com

classes abstraites)

NomInterface jeTente = new NomInterface(); // Erreur!!

Cours Java - M. Baron - Page 152


Notion dinterface et Java

 Toute classe qui implmente linterface doit implmenter


toutes les mthodes dfinies par linterface
Voiture
Dmarrable << Interface >>
+ dmarre
Ordinateur

public interface Dmarrable {


public void dmarre();
}
public class Voiture implements Dmarrable {
Doit implmenter ...

toutes les mthodes public void dmarre() {


des interfaces }
moteurAllum = true;
keulkeul.blogspot.com

}
public class Ordinateur implements Dmarrable {
... Une Voiture est
Dmarrable
public void dmarre() {
estDemarree = true; Un Ordinateur est
}
}
Dmarrable
Cours Java - M. Baron - Page 153
Notion dinterface et Java

 Tout objet instance dune classe qui implmente linterface


peut tre dclar comme tant du type de cette interface
public class Test {
public static void main (String[] argv) {
// Dclaration dun objet de type Dmarrable
Dmarrable dem1;
// Cration dun objet Voiture
dem1 = new Voiture();

// Dclaration et cration dun objet Personne Une personne peut


Personne pers1 = new Personne(dem1); dmarrer tous les
pers1.mettreEnRoute();
objets Dmarrable
// Dclaration dun objet de type Dmarrable
Dmarrable dem2;
// Cration dun objet Ordinateur
keulkeul.blogspot.com

dem2 = new Ordinateur();

// Dclaration et cration dun objet Personne


Personne pers1 = new Personne(dem2);
pers2.mettreEnRoute();
}
}
Cours Java - M. Baron - Page 154
Notion dinterface et Java

 Exemple : une Voiture et un Ordinateur sont des objets


Dmarrable
public class Person {

private Demarrable objetDemarrable;

public Person(Demarrable dem) {


objetDemarrable = dem;
}

public void mettreEnRoute() {


objetDemarrable.demarre();
}
keulkeul.blogspot.com

Une personne peut dmarrer


Voiture et Ordinateur sans
connatre leur nature exacte
Cours Java - M. Baron - Page 155
Notion dinterface et Java

 Les interfaces pourront se driver

 Une interface peut hriter dune autre interface : extends


NomInte1 << Interface >>
 Consquences +

 La dfinition de mthodes de linterface mre NomInte1

sont reprises dans linterface fille NomInte2. Toute classe qui

implmente linterface fille doit donner une implmentation

toutes les mthodes mmes celle hrites


keulkeul.blogspot.com

 Utilisation
NomInte2 << Interface >>
+

 Lorsquun modle peut se dfinir en plusieurs sous-modles compl-

mentaires
Cours Java - M. Baron - Page 156
Classes abstraites versus interfaces

 Les classes
 Elles sont compltement implmentes
 Une autre classe peut en hriter
 Les classes abstraites
 Sont partiellement implmentes
 Une autre classe non abstraite peut en hriter mais doit donner une
implmentation aux mthodes abstraites
 Une autre classe abstraite peut en hriter sans forcment donner une
implmentation toutes les mthodes abstraites
 Ne peuvent pas tre instancies mais peuvent fournir un constructeur
keulkeul.blogspot.com

 Les interfaces
 Elles ne sont pas implmentes
 Toute classe qui implmente une ou plusieurs interfaces doit
implmenter toutes leurs mthodes (abstraites)Cours Java - M. Baron - Page
157
Linterface Cloneable

 Deux possibilits pour dupliquer un objet de ses classes


 Crer une mthode ad-hoc public MaClasse dupliquer() qui retourne
une copie de lobjet en ayant cr une nouvelle instance et initialis
les attributs (en utilisant le constructeur)
saClio maClio
saClio != maClio mais - puissance = 4 - puissance = 4
le contenu est identique - estDmarre = true recopie - estDmarre = true
- vitesse = 179.8 - vitesse = 179.8

 Utiliser linterface Cloneable pour garder la compatibilit avec les


autres classes de Java
 Implmenter la mthode protected Object clone() de linterface
Cloneable
keulkeul.blogspot.com

public class Voiture implements Demarrable, Cloneable {


protected Object clone() {
Voiture copie;
copie = new Voiture(this.puissance, (Galerie)laGalerie.clone());
return copie;
}
}
Cours Java - M. Baron - Page 158
Les classes internes Inner Classes

 Rgle de base en Java


 Une classe par fichier et un fichier par classe
 Classes locales ou internes public class Voiture {
...
 Dfinies lintrieur dautres classes
class Moteur {
...
(Moteur dans Voiture) }
}

 Classes anonymes
 Sont des instanciations de classes et Demarrable uneInstance =
new Demarrable(){
des implmentations dune classe public void demarre() {
// Code ici
abstraite ou dune interface }
keulkeul.blogspot.com

};
 La ou les mthodes abstraites doivent
tre implmentes au moment de linstanciation

Les classes anonymes sont trs utilises pour


le dveloppement dIHM avec Java/Swing
Cours Java - M. Baron - Page 159
Les classes internes Inner Classes

 Code source : 1 fichier


Classe anonyme, implmente
 classe linterface Init
public class Voiture {
 classe anonyme
public Voiture(...) {

 classe interne
monMoteur = new Moteur(...);
Init monInit = new Init() {
public void initialisation() {
 Gnration de byte-code : 3 fichiers }
...

};
 classe Voiture.class }
class Moteur {
...
 anonyme Voiture$1.class public Moteur(...) {Classe interne
...
}
 interne Voiture$Moteur.class }
keulkeul.blogspot.com

Les fichiers .class qui


possdent dans leur nom un $
ne sont pas des fichiers
temporaires!!!
Cours Java - M. Baron - Page 160
Programmation Oriente Objet
application au langage Java
Les indispensables

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
Les packages

 Le langage Java propose une dfinition trs claire du


mcanisme dempaquetage qui permet de classer et de grer
les API externes
 Les API sont constitues
0..* 0..* 0..*
API Paquetage Classe Mthode

0..*
0..* Attribut
Interface

 Un package est donc un groupe de classes associes une


fonctionnalit
keulkeul.blogspot.com

 Exemples de packages
 java.lang : rassemble les classes de base Java (Object, String, )
 java.util : rassemble les classes utilitaires (Collections, Date, )
 java.io : lecture et criture Cours Java - M. Baron - Page 162
Les packages : ok, mais pourquoi faire?

 Lutilisation des packages permet de regrouper les classes


afin dorganiser des libraires de classes Java
 Exemple : la classe Date est dfinie deux fois

Nom complet
de la classe
java.util.Date
keulkeul.blogspot.com

Package Sous-Package Classe

Cours Java - M. Baron - Page 163


Les packages : utilisation des classes

 Lorsque, dans un programme, il y a une rfrence une


classe, le compilateur la recherche dans le package par
dfaut (java.lang)
 Pour les autres, il est ncessaire de fournir explicitement
linformation pour savoir o se trouve la classe :
 Utilisation dimport (classe ou paquetage)
import mesclasses.Point;
import java.lang.String; // Ne sert rien puisque par dfaut
import java.io.ObjectOutput;

ou
keulkeul.blogspot.com

import mesclasses.*;
import java.lang.*; // Ne sert rien puisque par dfaut Ecriture trs
import java.io.*; lourde prfrer
la solution avec
 Nom du paquetage avec le nom de la classe le mot cl import
java.io.ObjectOuput toto = new java.io.ObjectOuput(...)
Cours Java - M. Baron - Page 164
Les packages : leur existence physique

 A chaque classe Java correspond un fichier


 A chaque package (sous-package) correspond un rpertoire

Package
Exemple : mesclassses.Voiture

Voiture.java
Classe
mesclasses
Le nom des
 Un package peut contenir packages est
 Des classes ou des interfaces toujours crit en
minuscules
 Un autre package (sous-package)
keulkeul.blogspot.com

Package (mesclasses)
Exemple : mesclassses.ex1.Voiture Sous-package (ex1)
Classe (Voiture.java)
ex1

mesclasses Cours Java - M. Baron - Page 165


Les packages : hirarchie de packages

 A une hirarchie de packages correspond une hirarchie de


rpertoires dont les noms concident avec les composants
des noms de package
 Exemple : la classe String

java
 Bibliothque pure Java

 Les sources (*.java) se trouvent


lang util math dans le rpertoire src du rpertoire Java
keulkeul.blogspot.com

 Les bytecodes (*.class) se trouvent dans


larchive rt.jar du rpertoire Java
String.java

Cours Java - M. Baron - Page 166


Les packages : cration et conseils

 Quand vous crer un projet nommez le package de plus haut


(voiture) niveau par le nom du projet (Voiture)
Sources
Vos rpertoires de travail
(Pas encore de notion de
package)

Voiture Geom

Package voiture :
voiture.modele.VoitureElectrique
voiture
voiture.modele.Voiture
voiture.test.Test
Vos packages. A la
racine de Voiture vous
keulkeul.blogspot.com

pouvez y placer des modele


test
informations daides
lutilisation de votre
package.
(Fichier de lancement
par exemple)
Test.java
VoitureElectrique.java Voiture.java Cours Java - M. Baron - Page 167
Les packages : cration et conseils

 Pour spcifier une classe quelle appartient une classe


utiliser le mot cl package Le mot cl package est
package voiture.modele; toujours plac en
public class VoitureElectrique { premire instruction
...
} dune classe
package voiture.modele;
public class Voiture {
...
}
package voiture.test;
import voiture.modele.VoitureElectrique;
import voiture.modele.Voiture;
import ...

public class Test1 {


public static void main(String[] argv) {
keulkeul.blogspot.com

...
}
}

Ne confondez pas hritage et package.


Pas la mme chose. VoitureElectrique
est dans le mme package que Voiture Cours Java - M. Baron - Page 168
Les packages : compilation et excution

 tre plac dans la racine du rpertoire Voiture

Voiture

 La compilation doit prendre en compte les chemins des


packages

javac voiture\modele\*.java voiture\test\*.java

 Lexcution se fait en indiquant la classe principale avec son


chemin
keulkeul.blogspot.com

La sparation entre
package, sous-packages
et classes se fait laide
java voiture.test.Test de point . et non de
anti-slash \
Cours Java - M. Baron - Page 169
Les packages : visibilit

 Linstruction import nomPackage.* ne concerne que les


classes du package indiqu.
Elle ne sapplique pas aux classes des sous-packages

Packages diffrents

import java.util.zip.*; Essai utilise les classes Date


import java.util.*;

du package java.util et
public class Essai {
...
ZipFile du package
keulkeul.blogspot.com

public Essai() {
Date myDate = new Date(...);
ZipFile myZip = new ZipFile(...); java.util.zip
...
}
...
}

Cours Java - M. Baron - Page 170


Javadoc et les commentaires

 Deux types de commentaires


 Commentaires de traitements : prcision sur le code lui-mme
 Commentaires de documentation (outil javadoc de la JDK : gnration
automatique de pages html)

 Classes, constructeurs, mthodes et champs


 Compris entre /** et */

 Premire ligne : uniquement /**


 Suivantes : un espace suivi dune toile
 Dernire ligne : uniquement */ prcd dun espace
keulkeul.blogspot.com

/**
* Description de la mthode Ajouter du sens et des
* Autres caractristiques
prcision vos codes.
*/
public Voiture(...) { Expliquer nest pas
... traduire!!
}
}
Cours Java - M. Baron - Page 171
Javadoc et les commentaires

 Javadoc et intrts
 Javadoc est aux classes ce que les pages de manuel (man) sont
Unix ou ce que Windows Help est aux applications MS Windows
 Rdaction de la documentation technique des classes au fur et
mesure du dveloppement de ces mmes classes puis gnration
finale du html
 Utilisation
 Lentit documente est prcde par son commentaire
 Suivre la description des mthodes, classes,
 Utilisation de tags dfinit par javadoc permettant de typer certaines
informations (utilisation possible de balise html)
keulkeul.blogspot.com

@author Nom du ou des auteurs


@version Identifiant de version
@param Nom et signification de largument (mthodes uniquement)
@since Version du JDK o cest apparu (utilis par SUN)
@return Valeur de retour
@throws Classe de lexception et conditions de lancement
@deprecated Provoque les avertissements de dsapprobation
@see Rfrence croise Cours Java - M. Baron - Page 172
Javadoc et les commentaires

 Exemple : source de la classe Object


package java.lang;
/**
* Class <code>Object</code> is the root of the class hierarchy.
* Every class has <code>Object</code> as a superclass. All objects,
* including arrays, implement the methods of this class.
*
* @author unascribed
* @version 1.58, 12/03/01
* @see java.lang.Class
* @since JDK1.0
*/
public class Object {
/**
* Returns the runtime class of an object. That <tt>Class</tt>
* object is the object that is locked by <tt>static synchronized</tt>
* methods of the represented class.
*
* @return the object of type <code>Class</code> that represents the
* runtime class of the object.
*/
public final native Class getClass();
keulkeul.blogspot.com

...

 Gnration du code html partir de loutil javadoc


Pour obtenir les javadoc [options] nomDesClassesJava.java
informations de javadoc
javadoc -help
Cours Java - M. Baron - Page 173
Javadoc et les commentaires

 Exemple : aperu html de la description de la classe Object


gnre avec javadoc
keulkeul.blogspot.com

Cours Java - M. Baron - Page 174


Jar

 Jar et intrts
 Larchiveur jar est loutil standard pour construire les archives qui ont
le mme objectif que les bibliothques de programmes utilises par
certains langages de programmation (lib par exemple)
java verbose HelloWorld

Montre les archives


utilises pour excuter le
programme HelloWorld

 Utilisation pour la cration


 Utilisation de loutil jar
keulkeul.blogspot.com

 Pour crer un fichier .jar contenant les fichiers du rpertoire courant


jar cvf hello.jar .
Le . indique le
rpertoire courant
Cration Verbose Nom archive
Cours Java - M. Baron - Page 175
Jar

 Utilisation pour la cration (suite)


 Utilisation dun fichier manifeste (MANIFEST.MF) pour prciser un
ensemble dattributs pour excuter
 Lattribut Main-class par exemple permet de connatre la classe
principale excuter
Manifest-Version: 1.0
Created-By: 1.4.1_01 (Sun Microsystems Inc.)
Main-class: HelloWorld

MANIFEST.MF
 Cration du jar avec un fichier manifeste :
jar cvfm hello.jar MANIFESTE.MF .
keulkeul.blogspot.com

 Utilisation pour lexcution


La classe HelloWorld est
java jar hello.jar charge par lintermdiaire
du fichier MANIFESTE.MF
Cette option permet dexcuter
partir dune archive du code java Cours Java - M. Baron - Page 176
Exception
 Dfinition
 Une exception est un signal indiquant que quelque chose dexception-
nelle (comme une erreur) sest produit.
 Elle interrompt le flot dexcution normal du programme
 A quoi a sert
 Grer les erreurs est indispensable : mauvaise gestion peut avoir des
consquences catastrophiques (Ariane 5)
 Mcanisme simple et lisible
 Regroupement du code rserv au traitement des erreurs
 Possibilit de rcuprer une erreur plusieurs niveaux dune
application (propagation dans la pile des appels de mthodes)
keulkeul.blogspot.com

 Vocabulaire
 Lancer ou dclencher (throw) une exception consiste signaler les
erreurs
 Capturer ou attraper (catch) une exception permet de traiter les
erreurs Cours Java - M. Baron - Page 177
Exception

 Exemple : lancer et capturer une exception


public class Point {
... // Dclaration des attributs

La classe
... // Autre mthodes et constructeurs

public Point(int x, int y) throws ErrConst {


if ((x < 0) || (y < 0)) throw new ErrConst();
ErrConst nest
this.x = x ; this.y = y; pas encore
dfinie. A voir
}

public void affiche() {


System.out.println("Coordonnes : " + x + " " + y);
plus tard
} public class Test {
} public static void main(String[] argv) {
try {
Point a = new Point(1,4);
a.affiche();
a = new Point(-2, 4);
a.affiche();
keulkeul.blogspot.com

} catch (ErrConst e) {
System.out.println("Erreur Construction");
System.exit(-1);
}
}
}

Cours Java - M. Baron - Page 178


Exception : mcanisme

 Explication
 Lorsquune situation exceptionnelle est rencontre, une exception est
lance Mthode n

 Si elle nest pas traite, elle est transmise au bloc 1

bloc englobant, , jusqu ce quelle soit bloc 1.1

traite ou parvienne en haut de la pile


dappel. Elle stoppe alors lapplication bloc 2

Mthode 1 bloc 2.1


bloc 2.1.1
Mthode 2
bloc 2.1.2
keulkeul.blogspot.com

appel de Mthode n bloc 2.2


mthode

transmission Une exception vient


d'exception de se produire
Cours Java - M. Baron - Page 179
Exception : lancer ou dclencher

 Une mthode dclare quelle peut lancer une exception par le


mot cl throws Permet au
public Point(int x, int y) throws ErrConst {
... constructeur Point de
} lancer une exception
ErrConst
 Soit la mthode lance une exception, en crant une nouvelle
valeur (un objet) dexception en utilisant le mot cl throw
public Point(int x, int y) throws ErrConst {
if ((x < 0) || (y < 0)) throw new ErrConst();
this.x = x ; this.y = y;
Cration dune
} nouvelle valeur
dexception
keulkeul.blogspot.com

 Soit la mthode appelle du code qui lance une exception


public Point(int x, int y) throws ErrConst { private void checkXYValue(in x, int y)
checkXYValue(x,y); throws ErrConst {
this.x = x ; this.y = y; if ((x < 0) || (y < 0))
} throw new ErrConst();
}
Cours Java - M. Baron - Page 180
Exception : capturer ou attraper

 On parle ici de gestionnaire dexception. Il sagit de traiter


par des actions la situation exceptionnelle
 On dlimite un ensemble dinstructions susceptibles de
dclencher une exception par des blocs try {}
try {
Point a = new Point(1,4); Mthodes risques. Elles
sont surveilles
a.affiche();
a = new Point(-2, 4);
a.affiche();
}

 La gestion des risques est obtenue par des blocs


catch(TypeException e) {}
keulkeul.blogspot.com

} catch (ErrConst e) {
System.out.println("Erreur Construction");
System.exit(-1);
}

 Ces blocs permettent de capturer les exceptions dont le type est


spcifi et dexcuter des actions adquates Cours Java - M. Baron - Page
181
Exception : capturer ou attraper

 Comprhension du mcanisme de capture


public class Test {
public static void main(String[] argv) {
try {
Point a = new Point(1,4);

a.affiche();

a = new Point(-2, 4);

a.affiche();
} catch (ErrConst e) {
System.out.println("Erreur Construction"); Lerreur exceptionnelle
System.exit(-1); est traite par le bloc
}
...
catch
}
}
keulkeul.blogspot.com

Puis, il y a poursuite de lexcution en


dehors du bloc try catch
Remarque : si erreur le programme
sarrte (System.exit(-1))
Cours Java - M. Baron - Page 182
Exception : modlisation

 Les exceptions en Java sont considres comme des objets


 Toute exception doit tre une instance dune sous-classe de
la classe java.lang.Throwable
Erreur que lon peut
Erreurs non rcuprables.
Throwable traiter puisque
Plantage de lapplication rcuprable

Error Exception
keulkeul.blogspot.com

NullPointerException ErrConst
Pour dfinir de nouveaux
types dexception, on sous-
classera la classe
Exception
Cours Java - M. Baron - Page 183
Exception : modlisation

 Les exceptions sont des objets nous pouvons donc dfinir


 Des attributs particuliers
Contient un message
 Des mthodes Exception
derreur dcrivant
lexception
- message : String
+ Exception()
Renvoie le message derreur + Exception(String) Constructeur avec ou
dcrivant lexception + getMessage() : String sans argument
+ printStackTrace()
+

Classe trs simple,


puisque rien na t
keulkeul.blogspot.com

Affiche sur la sortie erreur redfini


standard la liste des appels ErrConst
de mthodes ayant conduit
lexception public class ErrConst extends Exception {
public ErrConst() {
...
}
}
Cours Java - M. Baron - Page 184
Exception : modlisation

 Exemple : utilisation de lobjet ErrConst


Erreur de type ErrConst
qui hrite de Exception
public class Test {
public static void main(String[] argv) {
try {
...
} catch (ErrConst e) {
System.out.println("Erreur Construction"); Affichage de lerreur
System.out.println(e.getMessage());

e.printStackTrace();

System.exit(-1);
} Affichage de la liste des
}
...
mthodes
keulkeul.blogspot.com

Cours Java - M. Baron - Page 185


Exception : attraper les tous

 Il est possible de capturer plus dune exception. Un bloc try


et plusieurs blocs catch
public class Point {
public void deplace(int dx, int dy) throws ErrDepl {
if (((x+dx) < 0) || ((y+dy) <0)) throw new ErrDepl();
x += dx ; y +=dy;
Dfinition dune
} nouvelle mthode
public Point(int x, int y) throws ErrConst { qui lance une
if ((x < 0) || (y < 0)) throw new ErrConst();
this.x = x ; this.y = y;
exception
}

...
public class Test {
}
public static void main(String[] argv) {
try {
... // Bloc dans lequel on souhaite dtecter
les exceptions ErrConst et ErrDepl Attrape la nouvelle
} catch (ErrConst e) { exception de type
keulkeul.blogspot.com

System.out.println("Erreur Construction");
System.exit(-1); ErrDepl
} catch (ErrDepl e) {
System.out.println("Erreur Dplacement");
System.exit(-1);
}
}
}

Cours Java - M. Baron - Page 186


Exception : attrapez les tous

 Toute mthode susceptible de lever une exception doit


 Soit lattraper (bloc try catch)
 Soit dclarer explicitement quelle peut lancer une exception (mot cl
throws)
 Les exceptions dclares dans la clause throws dune
mthode sont
Les exceptions leves dans des
Les exceptions leves dans la
mthodes (checkXYValue) appeles
mthode (Point) et non attrapes par
par la mthode (Point) et non
celle-ci
attrapes par celle-ci
keulkeul.blogspot.com

public Point(int x, int y) throws ErrConst { public Point(int x, int y) throws ErrConst {
if ((x < 0) || (y < 0)) throw new ErrConst(); checkXYValue(x,y);
this.x = x ; this.y = y; this.x = x ; this.y = y;
} }
private void checkXYValue(in x, int y) throws
ErrConst {
if ((x < 0) || (y < 0))
throw new ErrConst();
}

Cours Java - M. Baron - Page 187


Exception : attrapez les tous

 Il faut sassurer que les exceptions soient sous contrle


public class Point {
public void deplace(int dx, int dy) throws ErrDepl {
if (((x+dx) < 0) || ((y+dy) <0)) throw new ErrDepl();
x += dx ; y +=dy;
} public class ErrDepl extends Exception {
public ErrDepl() {
public void transformer() { ...
... }
this.deplace(...); }
}
}
keulkeul.blogspot.com

Ne pas oublier de traiter une


exception sinon le compilateur
ne vous loupe pas!!!! Cours Java - M. Baron - Page 188
Exception : attrapez les tous

 Pour garantir une bonne compilation deux solutions


public class Point {
public void deplace(int dx, int dy) throws ErrDepl {
if (((x+dx) < 0) || ((y+dy) <0)) throw new ErrDepl();
x += dx ; y +=dy;
}

public void transformer() {


...
this.deplace(...);
}
}

Soit en ajoutant explicitement Soit en entourant dun bloc


linstruction throws la try catch la mthode
mthode transformer de faon qui peut poser problme
rediriger lerreur
keulkeul.blogspot.com

public void transformer() {


public void transformer() try {
throws ErrDepl { ...
... this.deplace(...);
this.deplace(...); } catch (ErrDepl e) {
} e.printStackTrace();
}
}

Cours Java - M. Baron - Page 189


Exception : transmission dinformation

 Possibilit denrichir la classe ErrConst en ajoutant des


attributs et des mthodes de faon communiquer
public class Point {
public Point(int x, int y) throws ErrConst { ErrConst
if ((x < 0) || (y < 0)) throw new ErrConst(x,y);
this.x = x ; this.y = y; - abs, ord : int
} public class ErrConst extends Exception {
... private int abs, ord; + ErrConst(x,y)
}
+ getAbs : int
public ErrConst(int x, int y) {
this.abs = x; + getOrd : int
this.ord = y;
}

public int getAbs() { return this.abs; }


public int getOrd() { return this.ord; }
} ErrConst permet de
public class Test {
public static void main(String[] argv) { connatre les valeurs
keulkeul.blogspot.com

try {
...
qui ont fait chouer la
a = new Point(-2, 4); construction de Point
} catch (ErrConst e) {
System.out.println("Erreur Construction point");
System.out.println("Coordonnes souhaites : "
+ e.getAbs() + " " + e.getOrd());
System.exit(-1);
}...
Cours Java - M. Baron - Page 190
Exception : finally

 Bloc finally : cest une instruction optionnelle qui peut servir


de nettoyage

 Elle est excute quelle que soit le rsultat du bloc try (cest-
-dire quil ait dclench une exception ou non)

 Permet de spcifier du code dont lexcution est garantie


quoi quil arrive

 Lintrt est double


keulkeul.blogspot.com

 Rassembler dans un seul bloc un ensemble dinstructions qui


autrement auraient du tre dupliques

 Effectuer des traitements aprs le bloc try, mme si une exception a


t leve et non attrape par les blocs catch
Cours Java - M. Baron - Page 191
Exception : finally

 Exemple : terminer correctement avec finally


public class Test {
public static void main(String[] argv) {
try {
... // Bloc dans lequel on souhaite dtecter
les exceptions ErrConst et ErrDepl
} catch (ErrConst e) { Ces instructions sont
System.out.println("Erreur Construction");
System.out.println("Fin du programme"); rappeles plusieurs
System.exit(-1);
} catch (ErrDepl e) { fois
System.out.println("Erreur Dplacement");
System.out.println("Fin du programme");
System.exit(-1);
public class Test {
}
public static void main(String[] argv) {
}
try {
}
... // Bloc dans lequel on souhaite dtecter
les exceptions ErrConst et ErrDepl
} catch (ErrConst e) {
System.out.println("Erreur Construction");
Au moyen du mot
keulkeul.blogspot.com

} catch (ErrDepl e) {
cl finally, il est System.out.println("Erreur Dplacement");
} finally {
possible de System.out.println("Fin du programme");
System.exit(-1);
factoriser }
}
}

Cours Java - M. Baron - Page 192


Exception : pour ou contre

 Exemple : grer les erreurs sans les exceptions


erreurType lireFichier() {
int codeErreur = 0;
// Ouvrir le fichier
if (isFileIsOpen()) {
La gestion des
// Dtermine la longueur du fichier erreurs devient trs
if (getFileSize()) {
// Vrification de lallocation de la mmoire difficile
if (getEnoughMemory()) {
// Lire le fichier en mmoire
if (readFailed()) {
codeErreur = -1;
} Difficile de grer les
} else {
codeErreur = -2; retours de fonctions
}
} else {
codeErreur = -3;
}
keulkeul.blogspot.com

// Fermeture du fichier
if (closeTheFileFailed()) {
Le code devient de
codeErreur = - 4; plus en plus
consquent
}
} else {
codeErreur = - 5;
}
}
Cours Java - M. Baron - Page 193
Exception : pour ou contre

 Le mcanisme dexception permet


 La concision void lireFichier() {
try {
 La lisibilit // Ouvrir le fichier
// Dtermine la longueur du fichier
// Vrification de lallocation de la mmoire
// Lire le fichier en mmoire
// Fermer le fichier
} catch (FileOpenFailed) {
...
} catch (FileSizeFailed) {
...
} catch (MemoryAllocFailed) {
...
} catch (FileReadFailed) {
...
} catch (FileCloseFailed) {
keulkeul.blogspot.com

...
}
}

Prfrer cette solution la


prcdente. Programmation
propre et professionnelle
Cours Java - M. Baron - Page 194
Exception : les exceptions courantes

 Java fournit de nombreuses classes prdfinies drives de la


classe Exception
 Ces exceptions standards se classent en deux catgories
 Les exceptions explicites (celles que nous avons tudies), mention-
nes par le mot cl throws
 Les exceptions implicites qui ne sont pas mentionnes par le mot cl
throws

 Liste de quelques exceptions


 ArithmeticException (division par zro)
keulkeul.blogspot.com

 NullPointerException (rfrence non construite)


 ClassCastException (problme de cast)
 IndexOutOfBoundsException (problme de dpassement dindex dans
tableau) Cours Java - M. Baron - Page 195
Les flux

 Pour obtenir des donnes, un programme ouvre un flux de

donnes sur une source de donnes (fichier, clavier,

mmoire, etc.)

 De la mme faon pour crire des donnes dans un fichier,

un programme ouvre un flux de donnes

 Java fournit un paquetage java.io qui permet de grer les flux


keulkeul.blogspot.com

de donnes en entre et en sortie, sous forme de caractres

(exemple fichiers textes) ou sous forme binaire (octets, byte)


Cours Java - M. Baron - Page 196
Les flux

 En Java, le nombre de classes intervenant dans la manipula-


tion des flux est important (plus de 50)
 Java fournit quatre hirarchies de classes pour grer les flux
de donnes
 Pour les flux binaires
 La classe InputStream et ses sous-classes pour lire des octets
(FileInputStream)
 La classe OuputStream et ses sous-classes pour crire des octets
(FileOuputStream)
keulkeul.blogspot.com

 Pour les flux de caractres


 La classe Reader et ses sous-classes pour lire des caractres
(BufferedReader, FileReader)
 La classe Writer et ses sous-classes (BufferedWriter, FileWriter)
Cours Java - M. Baron - Page 197
Les flux de caractres

 Exemple : crire du texte dans un fichier

FileReader hrite de
Reader et permet de
manipuler un flux texte
associ un fichier

public class TestIO {


public static void main(String[] argv) {
FileWriter myFile = new FileWriter("a_ecrire.txt");

myFile.write("Voil ma premire ligne dans un fichier");

myFile.close();
}
keulkeul.blogspot.com

Ecriture dune ligne de


Fermeture du flux texte dans le fichier
myFile vers le fichier a_ecrire.txt
a_ecrire.txt
Cours Java - M. Baron - Page 198
Les flux de caractres

 Exemple : lire lentre standard : enfin !!!


Convertit un objet
de type InputStream
public class TestIO { en Reader
public static void main(String[] argv) {
System.out.println("Veuillez saisir votre nom :");

String inputLine = " ";


try {
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
String inputLine;
inputLine = is.readLine();

is.close(); Lit la ligne jusquau


} catch (Exception e) {
System.out.println("Intercept : " + e);
prochain retour
} chariot
if (inputLine != null)
keulkeul.blogspot.com

System.out.println("Votre nom est :" + inputLine);


}
}

Chane saisie

Cours Java - M. Baron - Page 199


Les flux de caractres

 Exemple : copie de fichier en utilisant les caractres


FileReader et
FileWriter hritent
public class TestIO {
de Reader et Writer public static void main(String[] argv) {
FileReader in = new FileReader("a_lire.txt");
et permettent de FileWriter out = new FileWriter("a_ecrire.txt");
int c;
manipuler un flux
while ((c = in.read()) != -1) {
texte associ un out.write(c);
fichier texte }

in.close();
out.close();
}
Transfert de
keulkeul.blogspot.com

donnes jusqu ce
que in ne fournisse Fermeture des flux
et par consquent
plus rien
des fichiers
respectifs Cours Java - M. Baron - Page 200
Les flux binaires

 Exemple : copie de fichier en utilisant les binaires

Mme raisonnement
que pour les
public class TestIO { caractres sauf
public static void main(String[] argv) {
FileInputStream in = new FileInputStream("a_lire.txt");
FileOutputStream out = new FileOutputStream("a_ecrire.txt");
int c;

while ((c = in.read()) != -1) {


out.write(c);
}
keulkeul.blogspot.com

in.close();
out.close();
}
}

Cours Java - M. Baron - Page 201


La classe File

 Java dispose dune classe File qui offre des fonctionnalits


de gestion de fichiers
Attention : ne pas
 La cration dun objet de type File confondre la cration de
lobjet avec la cration du
File monFichier = new File("truc.dat"); fichier physique

Cration du fichier
File portant le nom de name
- name : String
+ File(String nf) Vrifie si le fichier existe
+ createNewFile() physiquement
+ delete() : boolen
keulkeul.blogspot.com

+ exists() : boolen File monFichier = new File("c:\toto.txt");


+ getName() : String if (monFichier.exists()) {
monFichier.delete();
+ isFile() : boolen } else {
+ monFichier.createNewFile();
}

Cours Java - M. Baron - Page 202


Les collections

 Pour linstant nous avons tudi le tableau pour structurer


les donnes
 Taille statique

 Lent pour la recherche dlments particuliers

 Impossibilit dutiliser un pattern de dplacement dans les lments

 Java propose depuis la version 2 des classes permettant de


manipuler les principales structures de donnes
keulkeul.blogspot.com

 Les tableaux dynamiques implmentes par ArrayList et Vector

 Les listes implmentes par LinkedList

 Les ensembles implmentes par HashSet et TreeSet


Cours Java - M. Baron - Page 203
Les collections

 Ces classes implmentent toutes indirectement une mme


interface Collection quelles compltent de fonctionnalits
propres
Collection << Interface >> LinkedList

TreeSet HashSet

HashSet ArrayList

 Depuis la version 5 de Java, possibilit dutiliser les gnriques


pour typer le contenu des Collections
keulkeul.blogspot.com

 Avant : Voiture maVoiture = (Voiture)myList.get(2)


 Maintenant : Voiture maVoiture = myList.get(2)
Plus de problme de
conversion explicite Cours Java - M. Baron - Page 204
Les collections

 Linterface Collection permet


 La gnricit et rfrences : possibilit de stocker des lments de
type quelconque, pour peu quil sagisse dobjets. Un nouvel lment
introduit dans une collection Java est une rfrence lobjet et non
une copie

 Les itrateurs : ils permettent de parcourir un par un les diffrents


lments dune collection

 Efficacit des oprations sur des collections


keulkeul.blogspot.com

 Oprations communes toutes les collections : les collections que


nous allons tudier implmentent toutes au minimum linterface
Collection, de sorte quelle disposent de fonctionnalits communes
Cours Java - M. Baron - Page 205
Les collections : les gnriques Java

 Avec la version 5 de Java possibilit dexploiter les gnriques


dans les collections et pour dautres aspects du langage
 Une syntaxe particulire a t rajoute de manire prendre
en considration les gnriques
 < ? > : signale quil faut prciser le type de la classe
 < ? , ? > : signale quil faut prciser deux types
 Avec les gnriques il va tre possible de fixer lors de la
construction de la collection le type du contenu stock dans
les collections
 Avantages
keulkeul.blogspot.com

 Toutes les mthodes accesseurs et modifieurs qui manipulent les


lments dune collection sont signs suivant le type dfini la
construction de la collection
 Vrification des types pendant le dveloppement (avant problme de
CastClassException) Cours Java - M. Baron - Page 206
Les collections : Iterator

 Les itrateurs permettent de parcourir les lments dune


collection sans connaissance prcise du type de la collection :
Polymorphisme
 Il existe deux familles ditrateurs
 monodirectionnels
Le parcours de la collection se fait dun dbut vers une fin; laccs un
lment ne se fait quune seule fois
 bidirectionnels
Le parcours de la collection peut se faire dans les deux sens ;
keulkeul.blogspot.com

possibilit davancer et reculer sa guise dans la collection

La notion dIterator fait


partie de lensemble des
Design Patterns
Cours Java - M. Baron - Page 207
Les collections : Iterator

 Itrateur monodirectionnel : interface Iterator


 Par dfaut, toutes collections possdent un attribut de type Iterator

Vrifie sil y a un Iterator << Interface >>


Permet dobtenir
prochain + hasNext() : boolen
+ next() : < ? >
lobjet courant et
+ remove() passe au suivant
Supprime le dernier
objet renvoy par
next() c est une
collection et on
rcupre son
Iterator iter = c.iterator(); Iterator
keulkeul.blogspot.com

On rcupre
while (iter.hasNext()) {
On vrifie sil y a
possibilit de ??? o = iter.next(); lobjet courant
rcuprer un }
...
puis on passe au
objet suivant
Cours Java - M. Baron - Page 208
Les collections : Iterator

 Itrateur bidirectionnel : interface ListIterator


 Cela concerne les listes et les tableaux dynamiques
 Permet dajouter et de supprimer des objets Iterator << Interface >>
Vrifie sil y a un
prcdent ListIterator << Interface >>
+ previous() : < ? > Ajoute ou modifie
+ hasPrevious() : boolen la position courante
On vrifie sil y a + add(< ? >)
un lment de la
possibilit de + set(< ? >)
collection
+
rcuprer un objet
prcdemment c est une
collection et on
keulkeul.blogspot.com

Iterator iter = c.listIterator();


rcupre son
ListIterator
while (iter.hasPrevious()) {
Rcupre lobjet
prcdemment puis ??? o = iter.previous(); Initialise en dbut
on passe au }
...
de liste
prcdent Cours Java - M. Baron - Page 209
Les collections : LinkedList

 Cette classe permet de manipuler des listes dites doublement


chanes
 A chaque lment de collection, on associe implicitement
deux informations qui sont les rfrences llment
prcdent et suivant
c a c a b a b

LinkedList<String> l1 = new LinkedList<String>(); Ajout des


ListIterator iter = l1.listIterator();
lments au
Plus rien iter.add("Bonjour"); travers de
keulkeul.blogspot.com

aprs ses iter.add("Coucou");


litrateur
lments, while(iter.hasPrevious()) {
Lutilisation de
on fait un String o = iter.previous();
System.out.println(o); la LinkedList est
retour en }
transparente
arrire
Cours Java - M. Baron - Page 210
Les collections : LinkedList

 Possibilit dutiliser les collections (ici LinkedList est un


exemple) sans les itrateurs mais moins performant !!!

LinkedList<String> l1 = new LinkedList<String>();


Lutilisation
de la
l1.add("Bonjour");
l1.add("Coucou");
LinkedList
nest pas
for (int i = 0; i < l1.size(); i++) { transparente.
String o = l1.get(i);
System.out.println(o); Connaissance
} obligatoire
de ces
Utilisation de
mthodes
keulkeul.blogspot.com

la mthode
add de la Ne pas modifier la collection
classe (add de LinkedList) pendant
LinkedList quon utilise litrateur (next())

Cours Java - M. Baron - Page 211


Les collections : ArrayList

 La classe ArrayList est une encapsulation du tableau avec la


possibilit de le rendre dynamique en taille
 Possibilit dutiliser des ListIterator mais on prfre son
utilisation un lment de rang donn
ArrayList<Object> myArrayList = new ArrayList<Object>();

myArrayList.add("Coucou");
myArrayList.add(34);

for (int i = 0; i < myArrayList.size(); i++) {


Object myObject = myArrayList.get(i);
if (myObject instanceof String) {
System.out.println("Chane:" + ((String)myObject));
keulkeul.blogspot.com

if (my_object instanceof Integer) {


System.out.println("Integer:" + ((Integer)myObject));
}
Prfrer
} lutilisation de
la classe ArrayList au
lieu de la classe Vector Cours Java - M. Baron - Page 212
Les collections : HashSet

 La classe HashSet permet de grer les ensembles

 Deux lments ne peuvent tre identiques

 Prvoir deux choses dans vos classes

 La redfinition de la mthode hashCode() qui est utilise pour

ordonnancer les lments dun ensemble (calcul la table de hachage

dun objet)
keulkeul.blogspot.com

 La redfinition de la mthode equals(Object) qui compare des objets

de mme classe pour connatre lappartenance dun lment

lensemble
Cours Java - M. Baron - Page 213
Les collections : HashSet

 Exemple : gestion de points avec HashSet


public class TestHashSet {
public static void main(String[] argv) {
Point p1 = new Point(1,3); Point p2 = new Point(2,2);
Point p3 = new Point(4,5); Point p4 = new Point(1,8);
Point p[] = {p1, p2, p1, p3, p4, p3}

HashSet<Point> ens = new HashSet<Point>();


for (int i = 0; i < p.length; i++) {
System.out.println("Le Point "); p[i].affiche();
boolean ajoute = ens.add(p[i]);
if (ajoute)
System.out.println(" a t ajout");
else
System.out.println("est dj prsent");
System.out.print("Ensemble = "); affiche(ens);
}
}

public static void affiche(HashSet ens) {


keulkeul.blogspot.com

Iterator iter = ens.iterator();


while(iter.hasNext()) {
Point p = iter.next();
p.affiche();
}
System.out.println();
}
}

Cours Java - M. Baron - Page 214


Les collections : HashSet

 Exemple : gestion de points avec HashSet


public class Point {
private int x,y;

Point(int x, int y) {
Redfinition des
this.x = x; this.y = y; mthodes hashCode()
et equals(Object)
}
public int hashCode() {
return x+y;
}
public boolean equals(Object pp) {
Point p = (Point)pp;
return ((this.x == p.x) &
(this.y == p.y));
}
public void affiche() {
System.out.print("[" + x + " "
+ y + "] ");
}
}
keulkeul.blogspot.com

Cours Java - M. Baron - Page 215


Programmation Oriente Objet
application au langage Java
Bilan

Mickal BARON - 2007


mailto:baron.mickael@gmail.com ou mailto:mickael.baron@serli.com
Bilan

 Ce que nous avons appris


 Se familiariser avec la programmation oriente objet avec Java
 Les concepts principaux de loriente objet (encapsulation, hritage
et polymorphisme)
 Aperu des API les plus importantes de la plateforme Java

 Perspectives futures
 Le langage Java est en constante volution. Chaque nouvelle
version apporte son lot de nouvelles fonctionnalits
keulkeul.blogspot.com

 Structurer les classes en appliquant les patterns de conception


(Design Pattern)
 Le langage Java est un point de dpart pour concevoir des
applications serveur avec Java Entreprise Edition
Cours Java - M. Baron - Page 217