Programmation Oriente Objet
application au langage Java
Version Novembre 2007
Mickal BARON - 2007
mailto:
[email protected] ou mailto:
[email protected]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
keulkeul.blogspot.com
Systmes et rseaux
Gestion Electronique de Document (GED, PDM / PLM)
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
keulkeul.blogspot.com
Membre du consortium ObjectWeb
Gestion de projets Open Source
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
keulkeul.blogspot.com
Dveloppement par Xrox du premier systme Fentres, Icnes
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
keulkeul.blogspot.com
Object Pascal (Delphi) dvelopp par Borland
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
keulkeul.blogspot.com
Unit logique : le module
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
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
keulkeul.blogspot.com
des valeurs
Comportement : dfini par des mthodes (procdures) qui
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
keulkeul.blogspot.com
une mthode qui envoie un message un autre objet
dmarre
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 comportements 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
keulkeul.blogspot.com
Attributs
- estDmarre : boolen
- 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
Moteur
keulkeul.blogspot.com
Voiture
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
keulkeul.blogspot.com
Mise en place du cours
Cours de Francis Jambon (ancien MdC lUniversit de Poitiers)
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
keulkeul.blogspot.com
Partie 4 : Hritage
Partie 5 : Hritage et polymorphisme
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:
[email protected] ou mailto:
[email protected]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
keulkeul.blogspot.com
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
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
keulkeul.blogspot.com
Sun dfinit le langage Java comme
Simple
Sr
Orient objet
Portable
Rparti
Performant
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
keulkeul.blogspot.com
Machine Virtuelle Java
Programme interprtant le Byte-Code Java et fonctionnant sur un
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
keulkeul.blogspot.com
Cartes puces
...
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
Diffusion sur larchitecture cible
Byte Code
MonProgramme.class
keulkeul.blogspot.com
Transfert du Byte-Code seul
Outils : rseau, disque, etc
java
Excution sur la machine cible
Excution du Byte-Code
Outil : Machine Virtuelle Java
MonProgramme
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
Diffrentes finalits
Dans la suite du cours, on va
sintresser principalement aux
API fournies par Java SE
SDK (Software Development Kit) fournit un compilateur et une
machine virtuelle
keulkeul.blogspot.com
JRE (Java Runtime Environment) fournit uniquement une machine
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
keulkeul.blogspot.com
Site de Java chez Sun : java.sun.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
keulkeul.blogspot.com
Classes
Description
Attributs
Mthodes
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
keulkeul.blogspot.com
Auteur : Ian F. Darwin
diteur : OReilly
Edition : 2002 - 836 pages - ISBN : 2841772039
Apprendre Java et C++ en parallle
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)
keulkeul.blogspot.com
Ouvrages de rfrence de SUN aux ditions Paperback
(en anglais uniquement)
Cours Java - M. Baron - Page 23
Programmation Oriente Objet
application au langage Java
Bases du langage
Mickal BARON - 2007
mailto:
[email protected] ou mailto:
[email protected]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
keulkeul.blogspot.com
La fonction principale quivalent la fonction main du C/C++
String[] argv
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
keulkeul.blogspot.com
Pas ddition de liens (seulement une vrification)
Excution
java NomDeClasse
Ne pas mettre lextension .class
pour lexcution
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)
keulkeul.blogspot.com
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
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 :
int n = 15;
boolean b = true;
Cette instruction joue le mme rle :
int n;
n = 15;
boolean b;
b = true;
Penser linitialisation
au risque dune erreur de
compilation
int n;
System.out.println(" n = " + n);
Constantes
keulkeul.blogspot.com
Ce sont des variables dont la valeur ne peut affecte qu'une fois
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
Si alors sinon : if condition {} else {}
Itrations
Il ny a pas de motcl then dans la
structure Choix
Boucle : for (initialisation ; condition ; modification) { }
Boucle (for each) : for (Type var : Collection) { }
Tant que : while (condition) { }
Nouveaut Java 5
keulkeul.blogspot.com
Faire jusqu : do { } while (condition)
Slection borne
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
keulkeul.blogspot.com
public class SwitchBreak {
public static void main (String[] argv) {
int n = ...;
System.out.println("Valeur de n :" + n);
switch(n) {
case 0 : System.out.println("nul");
break;
case 1 :
case 2 : System.out.println("petit");
case 3 :
case 4 :
case 5 : System.out.println("moyen");
break;
default : System.out.println("grand");
}
System.out.println("Adios...");
}
}
Valeur de n : 0
nul
Adios...
Valeur de n : 1
petit
moyen
Adios...
Valeur de n : 6
grand
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
a==b, a!=b, a>b, a<b, a>=b, a<=b
keulkeul.blogspot.com
Oprateurs logiques
Et : a && b , a & b
Attention : erreur
boolean t = true;
if (t == true) {...}
Prfrer :
boolean t = true;
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;
keulkeul.blogspot.com
// Etablie un index de 0 10
int index = compteur % 10;
// Construction de laffichage
System.out.println("Index:" + index +
"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
keulkeul.blogspot.com
a == b retourne true si les valeurs de a et b sont identiques
a=b
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)
keulkeul.blogspot.com
Cration dun tableau
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
keulkeul.blogspot.com
int monTableau[];
Attention : une dclaration de tableau ne doit
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
keulkeul.blogspot.com
La cration dun tableau par new
Alloue la mmoire en fonction du type de tableau et de la taille
Initialise le contenu du tableau 0 pour les types simples
monTableau
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
keulkeul.blogspot.com
Java vrifie automatiquement lindice lors de laccs (exception leve)
monTab[0] = 1;
monTableau
monTab[1] = 2;
monTableau
monTab[2] = 3;
monTableau
Autre mthode : en donnant explicitement la liste de ses lments
entre {}
int[] monTab = {1, 2, 3}
est quivalent
monTab = new int[3];
monTab[0] = 1; monTab[1] = 2; monTab[2] = 3;
Cours Java - M. Baron - Page 37
Les tableaux en Java : Synthse
1 Dclaration
int[] monTableau;
2 Dimensionnement
monTableau = new int[3];
Ou 12 et 3
int[] monTab = {1, 2, 3};
3 Initialisation
monTableau[0] = 1;
monTableau[1] = 2;
keulkeul.blogspot.com
monTableau[2] = 3;
for (int i = 0; i < monTableau.length; i++) {
System.out.println(monTableau[i]);
}
for (int current : monTableau) {
System.out.println(curent);
}
Mme chose avec
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
keulkeul.blogspot.com
Dimensionnement :
tab
monTableau = new type[2]
monTableau[0] = new type[2]
monTableau[1] = new type[3]
null
null
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
keulkeul.blogspot.com
Objets, nombres, boolens, caractres,
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)
keulkeul.blogspot.com
Mise en forme
Facilite la relecture
Crdibilit assure !!!!
Indentation chaque
niveau de bloc
if (b == 3) {
if (cv == 5) {
if (q) {
...
} else {
...
}
...
}
...
}
Prfrer
if (b == 3) {
if (cv == 5) {
if (q) {
...
} else {...}
...
}
...
}
viter
Cours Java - M. Baron - Page 41
Programmation Oriente Objet
application au langage Java
Classes et Objets
Mickal BARON - 2007
mailto:
[email protected] ou mailto:
[email protected]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)
keulkeul.blogspot.com
Ayant une smantique commune
Les objets sont des reprsentations dynamiques, du modle
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
keulkeul.blogspot.com
Mthodes
- Slecteur
- Modificateurs
+ deQuellePuissance(): entier
+ demarre()
+ 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;
private double vitesse;
Attributs
public int deQuellePuissance() {
return puissance;
}
keulkeul.blogspot.com
Slecteur
public void demarre() {
estDemarree = true;
}
public void accelere(double v) {
if (estDemarree) {
vitesse = vitesse + v
}
}
Modificateurs
}
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;
keulkeul.blogspot.com
public int deQuellePuissance() {
return puissance;
}
Attributs visibles
dans les mthodes
public void demarre() {
estDemarree = true;
}
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;
public int deQuellePuissance() {
return puissance;
}
keulkeul.blogspot.com
public void demarre() {
estDemarree = true;
}
Variable visible uniquement
dans cette mthode
Variable peut tre dfinie
nimporte o dans un bloc
public void accelere(double v) {
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
keulkeul.blogspot.com
Il peut exceptionnellement y avoir plusieurs classes par fichier
(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
keulkeul.blogspot.com
classe
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
explicite de la classe
Voiture
instance of
Relation dinstanciation
Nom de lobjet, rfrence
ou de linstance
keulkeul.blogspot.com
maClio
- puissance = 4
- estDemarre = true
- vitesse = 179.8
Valeurs des
attributs qui
caractrisent
ltat de lobjet
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
keulkeul.blogspot.com
ladaBerline110
maClio
205Gti
- 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
keulkeul.blogspot.com
les attributs
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
Le test de comparaison
(== et !=) entre objets
ne concerne que les
rfrence et non les
attributs!!!!
keulkeul.blogspot.com
saClio
Voiture
instance of
maClio
- 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
recopie
keulkeul.blogspot.com
Comparer le contenu des objets : equals(Object o)
Renvoyer true si les objets a et b peuvent tre considrs
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
keulkeul.blogspot.com
Partie dynamique
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
keulkeul.blogspot.com
Les attributs (ou leurs drivs) peuvent tre consults
Lutilisation dun objet non
construit provoque une exception
de type NullPointerException
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
(mot rserv du langage)
monObjet
keulkeul.blogspot.com
Cration et allocation de la mmoire
Appelle de mthodes particulires : les constructeurs
La cration rserve la mmoire et initialise les attributs
attribut 1
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 {
keulkeul.blogspot.com
Dclaration
public static void main (String[] argv) {
// Dclaration puis cration
Voiture maVoiture;
maVoiture = new Voiture();
Cration et
allocation
mmoire
// Dclaration et cration en une seule ligne
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
keulkeul.blogspot.com
// Test sur les rfrences.
if (maVoitureCopie == null) {
Affectation par
rfrence
// 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.)
Rle du constructeur en Java
Les constructeurs portent le
mme nom que la classe et nont
pas de valeur de retour
keulkeul.blogspot.com
Effectuer certaines initialisations ncessaires pour le nouvel objet cr
Toute classe Java possde au moins un constructeur
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;
keulkeul.blogspot.com
Constructeur
avec un
paramtre
private boolean estDemarree;
private double vitesse;
public Voiture(int p) {
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;
keulkeul.blogspot.com
maVoiture = new Voiture(7);
Cration et
allocation
mmoire
avec Voiture(int)
Voiture maSecVoiture;
// Sous entendu quil existe
// explicitement un constructeur : Voiture(int)
maSecVoiture = new Voiture(); // Erreur
}
}
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;
private double vitesse;
public class TestMaVoiture {
keulkeul.blogspot.com
public static void main (String[] argv) {
public Voiture() {
puissance = 4;
estDemaree = false;
vitesse = 0;
}
public Voiture(int p) {
puissance = p;
estDemaree = false;
vitesse = 0;
}...
}
// Dclaration puis cration
Voiture maVoiture;
maVoiture = new Voiture(7);
Voiture maSecVoiture;
maSecVoiture = new Voiture(); // OK
}
}
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
keulkeul.blogspot.com
du type
public class Voiture {
...
public Voiture() {
puissance = 4; ...
}
public Voiture(int p) {
puissance = p; ...
}
Chaque constructeur
possde le mme nom
(le nom de la classe)
public Voiture(int p, boolean estDemaree) {
...
}
}
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();
keulkeul.blogspot.com
// Accs aux attributs en criture
v1.puissance = 110;
// Accs aux attributs en lecture
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
keulkeul.blogspot.com
Les ventuels paramtres de la mthode
identificationObjet.nomDeMethode( Paramtres ventuels )
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
appels aux mthodes
public class TestMaVoiture {
-
+
+
+
+
deQuellePuissance() : entier
demarre()
acclre (rel)
public static void main (String[] argv) {
// Dclaration puis cration
Voiture maVoiture = new Voiture();
keulkeul.blogspot.com
// La voiture dmarre
maVoiture.demarre();
if (maVoiture.deQuellePuissance() == 4) {
System.out.println("Pas trs Rapide");
}
// La voiture acclre
maVoiture.acclre(123.5);
Envoi dun message
lobjet maVoiture
Appel dun modificateur
Envoi dun message
lobjet maVoiture
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
keulkeul.blogspot.com
Leur valeur est recopie
Leur modification dans la mthode nentrane pas celle de loriginal
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();
// Appel de la mthode compare(voiture) qui
// retourne le nombre de diffrence
int p = maVoiture.compare(maSecondeVoiture);
Rfrence comme
paramtre
System.out.println("Nbre diffrence :" + p);
keulkeul.blogspot.com
Voiture
Appel dun slecteur avec
passage dune rfrence
+ acclre (rel)
+ compare (Voiture) : entier
+
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 !!!!
keulkeul.blogspot.com
this = ... ; // Ne pas y penser
Utilit de lobjet courant
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() {
...
}
keulkeul.blogspot.com
public void accelere(double vitesse) {
if (estDemarree) {
this.vitesse = this.vitesse + vitesse;
}
}
Dsigne la variable
vitesse
Dsigne lattribut
vitesse
Dsigne lattribut
demarree
this nest pas ncessaire
lorsque les identificateurs de
variables ne prsentent
aucun quivoque
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
attachs la classe
qui contient
Exemple : une Voiture et une Galerie
Composition : cycle de vie identiques
Exemple : voiture possde un moteur qui dure la vie de la voiture
Association
keulkeul.blogspot.com
Composition
Voiture
0..1
0..1
Conducteur
Agrgation
4..5
Roue
Moteur
0..1
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);
...
}
...
keulkeul.blogspot.com
Moteur
A discuter : si le moteur
dune voiture est mort ,
il y a la possibilit de le
changer
Cration de l'objet
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;
...
}
...
keulkeul.blogspot.com
Moteur
}
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
keulkeul.blogspot.com
private Moteur leMoteur;
...
Moteur
public Voiture(int p) {
leMoteur = new Moteur(p,this);
...
}
...
}
Cration de
lobjet Moteur
Transmission de la
rfrence de lobjet
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 {
private int puissance;
private Voiture laVoiture;
...
keulkeul.blogspot.com
Voiture
public Moteur(int p, Voiture v) {
puissance = p;
laVoiture = v;
...
}
...
Moteur
La puissance est
donne lors de la
construction
Rfrence dun objet
Voiture en paramtre
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
Voiture
public class Voiture {
private Galerie laGalerie;
...
public Voiture(Galerie g) {
laGalerie = g;
...
}
...
keulkeul.blogspot.com
0..1
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
mthode et de
Si plus aucune variable ne rfrence lobjet
linvoquer avant que
Si le bloc dans lequel il est dfini se termine tout objet ne soit
plus rfrenc :
Si lobjet a t affect null
detruit()
Manuellement :
keulkeul.blogspot.com
Sur demande explicite par linstruction System.gc()
Un pseudo-destructeur protected void finalize() peut tre
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 {
Pour tre sr que finalize
s'excute il faut absolument
appeler explicitement
System.gc()
private boolean estDemarree;
...
protected void finalize() {
estDemarree = false;
System.out.println("Moteur arrt");
}
public class TestMaVoiture {
...
}
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
Voiture maVoiture = new Voiture();
maVoiture.demarre();
// maVoiture ne sert plus rien
maVoiture = null;
keulkeul.blogspot.com
Force le programme
se terminer
// Appel explicite du garbage collector
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!!!
keulkeul.blogspot.com
Tester son type : oprateur instanceof mot cl class
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
keulkeul.blogspot.com
slectionne automatiquement la mthode dont le nombre est
le type des arguments correspondent au nombre et au type
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
keulkeul.blogspot.com
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
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)
Exemple
Implantation du constructeur
public class Voiture {
...
public Voiture() {
this(7, new Galerie());
}
sans paramtre de Voiture
public Voiture(int p) {
this(p, new Galerie());
}
keulkeul.blogspot.com
partir du constructeur avec
public Voiture(int p, Galerie g) {
puissance = p;
moteur = new Moteur(puissance);
galerie = g;
...
}
paramtres
...
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
keulkeul.blogspot.com
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
private
public
protected
A revoir dans la
partie suivante
Cours Java - M. Baron - Page 84
Encapsulation : visibilit des membres dune classe
+ public
classe
keulkeul.blogspot.com
attribut
mthode
- private
La classe peut tre utilise
par nimporte quelle
classe
Utilisable uniquement par les classes
dfinies lintrieur dune autre
classe.
Une classe prive nest utilisable que
par sa classe englobante
Attribut accessible partout o
sa classe est accessible. Nest
pas recommand du point de
vue encapsulation
Attribut restreint la classe
o est faite la dclaration
Mthode accessible partout
o sa classe est accessible.
Mthode accessible
lintrieur de la dfinition de
la classe
Cours Java - M. Baron - Page 85
Encapsulation
Exemple : encapsulation
public class Voiture {
Une mthode prive ne peut plus
tre invoque en dehors du code
de la classe o elle est dfinie
private int puissance;
...
public void demarre() {
...
}
private void makeCombustion() {
...
public class TestMaVoiture {
}
}
keulkeul.blogspot.com
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
Voiture maVoiture = new Voiture();
// 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
keulkeul.blogspot.com
maChaine.equals("Bonjour!"); // Renvoi vrai
Concatnation
String essai = "ess" + "ai";
String essai = "ess".concact("ai");
Faites attention la comparaison
de chanes de caractres.
maChaine == "toto";
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();
keulkeul.blogspot.com
On peut leur ajouter nimporte (surcharge) quoi
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);
keulkeul.blogspot.com
Un exemple
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
keulkeul.blogspot.com
Variables dont il nexiste quun seul exemplaire associ sa classe
de dfinition
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
public static int nbVoitureCreees;
Attention lencapsulation. Il
est dangereux de laisser cette
variable de classe en public.
Pour y accder, il faut utiliser non pas un identificateur mais
le nom de la classe
keulkeul.blogspot.com
Voiture.nbVoitureCreees = 3;
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
keulkeul.blogspot.com
public class Galerie {
public static final int MASSE_MAX = 150;
}
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;
public static int nbVoitureCreees;
...
public Voiture(int poids, ...) {
this.poids = poids;
nbVoitureCrees++;
...
public class TestMaVoiture {
}
keulkeul.blogspot.com
Utilisation de
Variables et
Constantes de classe
par le nom de la
classe Voiture
Dangereux car
possibilit de
modification
extrieure...
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
Voiture maVoiture = new Voiture(2500);
...
System.out.println("Poids maxi:" +
Voiture.PTAC_MAX);
System.out.println(Voiture.nbVoitureCreees);
...
}
}
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
keulkeul.blogspot.com
public static double vitesseMaxToleree() {
return vitesseMaxAutorisee*1.10;
}
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 {
private static int nbVoitureCreees;
...
public static int getNbVoitureCreees(){
return Voiture.nbVoitureCreees;
}
Dclaration d'une
variable de classe
prive. Respect des
principes
d'encapsulation.
keulkeul.blogspot.com
Dclaration d'une
mthode de classe
pour accder la
valeur de la variable
de classe.
public class TestMaVoiture {
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
Voiture maVoiture = new Voiture(2500);
...
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)
}
keulkeul.blogspot.com
On ne peut pas utiliser de
variables d'instance dans une
mthode de classe!!!!
Erreur : Utilisation d'un
attribut non statique
dans une zone statique
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
keulkeul.blogspot.com
Integer valueObjet = new Integer(123);
int valuePrimitif = valueObjet.intValue();
Ou
int valuePrimitif = valueObjet; (AutoBoxing)
Des mthodes de classe trs utiles qui permettent partir dune
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
monTableau = new Voiture[3];
3 Initialisation
keulkeul.blogspot.com
monTableau[0] = new Voiture(5);
monTableau[1] = new Voiture(7);
monTableau[2] = new Voiture(8);
Ou 12 et 3
Voiture[] monTab = {
new Voiture(5),
new Voiture(7),
new Voiture(8)
};
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
keulkeul.blogspot.com
tableau dun type donn pour raliser la mme chose
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
keulkeul.blogspot.com
Tableau
String passagers = {"Tony", "Luck", "John"};
maVoiture.ajouterPassager(passagers);
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-
keulkeul.blogspot.com
mtres, le varargs doit obligatoirement tre plac en dernier
public Voiture(String mod, int... carac) {
...
}
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) {
}
keulkeul.blogspot.com
public Voiture(int caract1, int caract2) {
...
}
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:
[email protected] ou mailto:
[email protected]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
keulkeul.blogspot.com
oprations particulires la nouvelle classe
Redfinition : une nouvelle classe redfinit les attributs et
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
keulkeul.blogspot.com
Voiture
+ dmarre()
Relation dhritage
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
VoitureElectrique
- gyrophare : boolen
- disjoncteur : boolen
+ allumeGyrophare()
+ dmarre()
- puissance : entier
- puissance : entier
- estDmarre : boolean
- vitesse : flottant
+ deQuellePuissance() : entier
+ dmarre()
+ acclre(flottant)
Hrit de Voiture
Hrit de Voiture
keulkeul.blogspot.com
VehiculePrioritaire
- estDmarre : boolean
- vitesse : flottant
+ deQuellePuissance() : entier
+ dmarre()
+ 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
keulkeul.blogspot.com
Attention
Un objet de la classe VehiculePrioritaire ou VoitureElectrique est
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
Super-classe
keulkeul.blogspot.com
Sous-classe
VehiculePrioritaire
Lhritage permet
Abstraction
Voiture
Raffinement
classe et sa super-classe
VehiculePrioritaire est
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
keulkeul.blogspot.com
Ctac
Humain
Baleine
Dauphin
Etudiant
Enseignant
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
keulkeul.blogspot.com
public void allumeGyrophare() {
gyrophare = true;
}
...
VehiculePrioritaire
- 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
Voiture
+ dmarre()
VehiculePrioritaire
keulkeul.blogspot.com
+ allumeGyrophare()
Ambulance
- malade : String
+ chercher(String)
public class Voiture {
...
public void dmarre() {
...
}
}
public class VehiculePrioritaire
extends Voiture {
...
public void allumeGyrophare() {
...
}
}
Ambulance am =
new Ambulance(...);
am.dmarre();
am.allumeGyrophare();
am.chercher("Raoul");
public class Ambulance
extends VehiculePrioritaire {
private String malade;
...
public void chercher(String ma) {
...
}
}
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
keulkeul.blogspot.com
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
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 {
keulkeul.blogspot.com
+ dmarre()
private boolean disjoncteur;
...
public void demarre() {
disjoncteur = true;
}
...
VoitureElectrique
- disjoncteur :
boolen
+ dmarre()
Redfinition de la
mthode
Cours Java - M. Baron - Page 113
Surcharge et redfinition
public class Voiture {
...
public void demarre() {
...
}
}
keulkeul.blogspot.com
Redfinition
public class VoitureElectrique
extends Voiture {
...
public void demarre() {
...
}
}
VoitureElectrique possde
au plus une mthode de
moins que VehiculePrioritaire
Ne pas confondre surcharge et redfinition.
Dans le cas de la surcharge la sous-classe
ajoute des mthodes tandis que la redfinition
spcialise des mthodes existantes
Surcharge
public class VehiculePrioritaire
extends Voiture {
...
public void demarre(int code) {
...
}
}
VehiculePrioritaire possde
au plus une mthode de
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
keulkeul.blogspot.com
super.nomSuperClasseMethodeAppelee(...);
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
La position de super
na ici aucune
importance
public class Voiture {
private boolean estDemarree;
...
public void demarre() {
estDemarree = true;
}
public class VoitureElectrique extends Voiture {
private boolean disjoncteur;
...
Mise jour de lattribut
estDemarree
public void demarre() {
disjoncteur = true;
super.demarre();
}
...
keulkeul.blogspot.com
}
public class TestMaVoiture {
public static void main (String[] argv) {
// Dclaration puis cration
VoitureElectrique laRochelle =
new VoitureElectrique(...);
laRochelle.demarre();
}
}
Envoi dun message par
appel de 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
keulkeul.blogspot.com
Lappel au constructeur de la superclasse doit se faire absolument en
Utilise le mot-cl super
premire instruction
super(paramtres du constructeur);
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
Lappel au constructeur de
la super-classe doit se
faire absolument en
premire instruction
public class Voiture {
...
public Voiture() {
this(7, new Galerie());
}
Implantation du constructeur
de VoiturePrioritaire partir
de Voiture
keulkeul.blogspot.com
public Voiture(int p) {
this(p, new Galerie());
}
public Voiture(int p, Galerie g) {
puissance = p;
moteur = new Moteur(puissance);
galerie = g;
public class VoiturePrioritaire
...
extends Voiture {
}
...
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");
}
}
keulkeul.blogspot.com
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) {
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..."); }
}
}
keulkeul.blogspot.com
public class B {
private String pInfo;
public B(String pInfo) {
this.pInfo = pInfo;
}
super();
}
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 {
...
public Voiture(int p) {
this(p, new Galerie());
}
Constructeurs explicites
dsactivation du
constructeur par dfaut
public Voiture(int p, Galerie g) {
puissance = p;
moteur = new Moteur(puissance);
galerie = g;
...
}
...
Erreur : il n'existe pas dans
Voiture de constructeur sans
paramtre
keulkeul.blogspot.com
public class VoiturePrioritaire
extends Voiture {
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
keulkeul.blogspot.com
public class Voiture extends Object {
...
public Voiture(int p, Galerie g) {
puissance = p;
moteur = new Moteur(puissance);
galerie = g;
...
}
...
}
Object
+
+
+
+
Class getClass()
String toString()
boolean equals(Object)
int hashCode()
Il n'est pas ncessaire
d'crire explicitement
extends Object
Cours Java - M. Baron - Page 122
Aprs redfinition
keulkeul.blogspot.com
Avant redfinition
La classe Object : le mystre rsolu
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) {
this(p, new Galerie());
}
.ln(maVoiture.toString());
public class Test {
public static void main (String[] argv) {
public String toString() {
Voiture maVoiture = new Voiture(3);
return("Puissance:" + p);
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
Voiture
toutes ses sous-classes
keulkeul.blogspot.com
# dmarre()
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 Voiture {
public class VoiturePrioritaire
extends Voiture {
private int codeVoiture;
private boolean estDemarree;
...
public void demarre(int code) {
if (codeVoiture == code) {
super.demarre();
};
}
protected void demarre() {
estDemarree = true;
}
}
}
keulkeul.blogspot.com
public class TestMaVoiture {
public static void main (String[] argv) {
// Dclaration puis cration de maVoiture
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();
keulkeul.blogspot.com
Classe : interdire toute spcialisation ou hritage de la classe
concerne
public final class VoitureElectrique extends Voiture {
...
}
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:
[email protected] ou mailto:
[email protected]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
keulkeul.blogspot.com
voitureLarochelle est une instance de la
classe VoitureElectrique
VoitureElectrique
+ dmarre()
+ getVoltage() : int
voitureLarochelle
Mais aussi
voitureLarochelle est une instance de la
classe Voiture
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
Objet de type sous-classe
directe de Voiture
keulkeul.blogspot.com
+ dmarre()
VoitureElectrique
public class Test {
public static void main (String[] argv) {
+ dmarre()
+ getVoltage() : int
Voiture voitureLarochelle =
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(...);
keulkeul.blogspot.com
// Utilisation dune mthode de la classe Voiture
voitureLarochelle.demarre();
// Utilisation dune mthode de la classe VoitureElectrique
System.out.println(voitureLarochelle.getVoltage()); // Erreur
}
}
Examiner le type de
la rfrence
La mthode getVoltage() nest pas
disponible dans la classe Voiture!!!
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());
}
}
keulkeul.blogspot.com
Voiture
Remarque : Quel code va tre
effectivement excut lorsque le message
demarre() est envoy voitureLarochelle ??
+ dmarre()
voitureLarochelle
Cours Java - M. Baron - Page 131
Polymorphisme et Java : lien dynamique
public class Test {
public static void main (String[] argv) {
Voiture voitureLarochelle =
new VoitureElectrique(...);
Lobjet voitureLarochelle
initialise les attributs de la
classe VoitureElectrique
voitureLarochelle.demarre();
}
}
Voiture
+ dmarre() {
estDemarre = true;
}
keulkeul.blogspot.com
voitureLarochelle.demarre()
VoitureElectrique
Constat : Cest la mthode dmarre()
de VoitureElectrique qui est appele.
Puis elle appelle (par super) la
mthode de la super-classe
+ dmarre() {
super.dmarre();
disjoncteur = true;
}
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; }
public void affiche() { System.out.println("Je suis en "+ x + " " + y);}
}
keulkeul.blogspot.com
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() {
super.affiche();
System.out.println("et ma couleur est : " + couleur);
}
}
public class Test {
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();
}
}
Point
Pointcol
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() {
this.identifie();
System.out.println("Je suis en "+ x + " " + y);
}
public void identifie() {System.out.println("Je suis un point");}
}
keulkeul.blogspot.com
public class Pointcol extends Point {
private byte couleur;
public Pointcol(int x, int y, byte couleur) {...}
public void affiche() {
super.affiche();
System.out.println("et ma couleur est : " + couleur);
}
public void identifie() {System.out.println("Je suis un point color");}
}
public class Test {
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();
}
}
Point
Pointcol
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
keulkeul.blogspot.com
La mthode excuter est dtermine lexcution et non pas la
compilation
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() {
estDemarre = true;
}
Surclassement (compilation)
Une variable maVoit est dclare comme tant
une rfrence vers un objet de la classe Voiture
keulkeul.blogspot.com
Un objet de la classe VoitureElectrique est cr
Pour le compilateur maVoit reste une rfrence
dun objet de la classe Voiture, et il empche
daccder aux mthodes spcifiques
VoitureElectrique
VoitureElectrique
+ dmarre() {
super.dmarre();
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
keulkeul.blogspot.com
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
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
- positionx : int
- positiony : int
- liste : Forme[ ]
+ ajouter(Forme)
+ afficherForme()
keulkeul.blogspot.com
+ afficher()
...
Rectangle
- largeur : int
- hauteur : int
+ afficher()
Cercle
- rayon : int
+ 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
Forme est dfini, le code
de la classe Stockage
nest pas modifi
public Stockage(int taille) {
this.taille = taille;
liste = new Forme[this.taille];
i = 0;
}
keulkeul.blogspot.com
public void ajouter(Forme f) {
if (i < taille) {
liste[i] = f;
i++;
}
}
public class Test {
public static void main (String[] argv) {
Stockage monStock = new Stockage(10);
monStock.ajouter(new Cercle(...));
monStock.ajouter(new Rectangle(...));
public void afficherForme() {
for (int i = 0; i < taille; i++) {
liste[i].afficher();
}
}
}
Rectangle monRect = new Rectangle(...);
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
keulkeul.blogspot.com
ClasseB
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
}
}
keulkeul.blogspot.com
Attention si la compatibilit est
fausse et si le cast est effectu
une exception de type
ClassCastException est leve
Ralisation de la
conversion de lobjet de
type Forme en objet de
type Rectangle
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
keulkeul.blogspot.com
+ boolean equals(Object)
Voiture
Rappel de la classe
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 {
public boolean equals(Object o) {
if (!o instanceof Voiture) {
return false;
}
Redfinition de la mthode
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
keulkeul.blogspot.com
public class Test {
public static void main (String[] argv) {
Voiture maVoit = new Voiture(...);
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
keulkeul.blogspot.com
Si une seule des mthodes dune classe est abstraite, alors la classe
devient aussi abstraite
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
keulkeul.blogspot.com
public abstract void maMethode(...);
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}
keulkeul.blogspot.com
Les classes DeuxChevaux et C3Pluriel
hritent de VoitureDecapotable
C3Pluriel
DeuxChevaux
- capoteAttache : boolen
+ replieLeToit()
- arceauxRetirs : boolen
+ replieLeToit()
Cours Java - M. Baron - Page 146
Classes abstraites : exemple VoitureDecapotable
Exemple : une voiture dcapotable
Classe
abstraite
public abstract class VoitureDecapotable
extends Voiture {
protected boolean toitRepli;
public abstract void replieLeToit();
}
public class DeuxChevaux extends VoitureDecapotable {
private boolean capoteAttachee;
public void replieLeToit() {
this.toitReplie = true;
this.capoteAttachee = true;
}
Mthode
abstraite
keulkeul.blogspot.com
}
public class C3Pluriel extends VoitureDecapotable {
private boolean arceauxRetirs;
public void replieLeToit() {
this.toitReplie = true;
this.arceauxRetirs = true;
}
}
Attention : ce nest pas
de la redfinition. On
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
Cercle
- rayon : int
+ deplace(x,y)
+ surface() : double {abstraite}
+ primtre() : double {abstraite}
keulkeul.blogspot.com
+ surface() : double
+ primtre() : double
public abstract class Forme {
private int positionx, positiony;
public void deplacer(double dx, double dy){
x += dx; y += dy;
}
public abstract double primtre();
public abstract double surface();
}
Rectangle
- larg, haut : int
+ surface() : double
+ primtre() : double
Pas dimplmentation !!
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
keulkeul.blogspot.com
Les interfaces pourront se driver
Exemple
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
keulkeul.blogspot.com
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, ... {
...
}
Si une classe hrite dune autre classe elle peut galement implmenter 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;
}
keulkeul.blogspot.com
Une interface ne possde pas de mot cl abstract
Les interfaces ne sont pas instanciables (Mme raisonnement avec les
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();
}
keulkeul.blogspot.com
Doit implmenter
toutes les mthodes
des interfaces
public class Voiture implements Dmarrable {
...
public void dmarre() {
moteurAllum = true;
}
}
public class Ordinateur implements Dmarrable {
...
public void dmarre() {
estDemarree = true;
}
}
Une Voiture est
Dmarrable
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();
keulkeul.blogspot.com
// Dclaration et cration dun objet Personne
Personne pers1 = new Personne(dem1);
pers1.mettreEnRoute();
Une personne peut
dmarrer tous les
objets Dmarrable
// Dclaration dun objet de type Dmarrable
Dmarrable dem2;
// Cration dun objet Ordinateur
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;
keulkeul.blogspot.com
public Person(Demarrable dem) {
objetDemarrable = dem;
}
public void mettreEnRoute() {
objetDemarrable.demarre();
}
}
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
Consquences
NomInte1 << Interface >>
+
La dfinition de mthodes de linterface mre NomInte1
sont reprises dans linterface fille NomInte2. Toute classe qui
implmente linterface fille doit donner une implmentation
keulkeul.blogspot.com
toutes les mthodes mmes celle hrites
Utilisation
NomInte2 << Interface >>
+
Lorsquun modle peut se dfinir en plusieurs sous-modles complmentaires
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
keulkeul.blogspot.com
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
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 mais
le contenu est identique
saClio
maClio
- puissance = 4
- estDmarre = true
- vitesse = 179.8
- puissance = 4
- estDmarre = true
- vitesse = 179.8
recopie
keulkeul.blogspot.com
Utiliser linterface Cloneable pour garder la compatibilit avec les
autres classes de Java
Implmenter la mthode protected Object clone() de linterface
Cloneable
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
Dfinies lintrieur dautres classes
(Moteur dans Voiture)
public class Voiture {
...
class Moteur {
...
}
}
Classes anonymes
Sont des instanciations de classes et
keulkeul.blogspot.com
des implmentations dune classe
abstraite ou dune interface
La ou les mthodes abstraites doivent
Demarrable uneInstance =
new Demarrable(){
public void demarre() {
// Code ici
}
};
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
linterface Init
classe
classe anonyme
public class Voiture {
public Voiture(...) {
monMoteur = new Moteur(...);
Init monInit = new Init() {
public void initialisation() {
...
}
};
}
class Moteur {
...
public Moteur(...) {
...
}
}
classe interne
Gnration de byte-code : 3 fichiers
classe Voiture.class
Classe interne
anonyme Voiture$1.class
keulkeul.blogspot.com
interne Voiture$Moteur.class
}
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:
[email protected] ou mailto:
[email protected]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
API
0..*
Paquetage
0..*
Classe
0..*
Mthode
0..*
Attribut
0..*
keulkeul.blogspot.com
Interface
Un package est donc un groupe de classes associes une
fonctionnalit
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
keulkeul.blogspot.com
Nom complet
de la classe
java.util.Date
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;
keulkeul.blogspot.com
ou
import mesclasses.*;
import java.lang.*; // Ne sert rien puisque par dfaut
import java.io.*;
Nom du paquetage avec le nom de la classe
Ecriture trs
lourde prfrer
la solution avec
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
Un package peut contenir
Des classes ou des interfaces
keulkeul.blogspot.com
Un autre package (sous-package)
Exemple : mesclassses.ex1.Voiture
ex1
mesclasses
Le nom des
packages est
toujours crit en
minuscules
Package (mesclasses)
Sous-package (ex1)
Classe (Voiture.java)
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
keulkeul.blogspot.com
lang
util
math
dans le rpertoire src du rpertoire Java
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
Voiture
Vos rpertoires de travail
(Pas encore de notion de
package)
Geom
Package voiture :
voiture.modele.VoitureElectrique
voiture.modele.Voiture
voiture.test.Test
keulkeul.blogspot.com
voiture
Vos packages. A la
racine de Voiture vous
pouvez y placer des
informations daides
lutilisation de votre
package.
(Fichier de lancement
par exemple)
test
modele
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
keulkeul.blogspot.com
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) {
...
}
}
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
keulkeul.blogspot.com
javac voiture\modele\*.java voiture\test\*.java
Lexcution se fait en indiquant la classe principale avec son
chemin
La sparation entre
java voiture.test.Test
package, sous-packages
et classes se fait laide
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.*;
import java.util.*;
Essai utilise les classes Date
du package java.util et
keulkeul.blogspot.com
public class Essai {
...
public Essai() {
Date myDate = new Date(...);
ZipFile myZip = new ZipFile(...);
...
}
...
ZipFile du package
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
keulkeul.blogspot.com
Dernire ligne : uniquement
/**
* Description de la mthode
* Autres caractristiques
*/
public Voiture(...) {
...
}
}
*/
prcd dun espace
Ajouter du sens et des
prcision vos codes.
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
keulkeul.blogspot.com
Suivre la description des mthodes, classes,
Utilisation de tags dfinit par javadoc permettant de typer certaines
informations (utilisation possible de balise html)
@author
@version
@param
@since
@return
@throws
@deprecated
@see
Nom du ou des auteurs
Identifiant de version
Nom et signification de largument (mthodes uniquement)
Version du JDK o cest apparu (utilis par SUN)
Valeur de retour
Classe de lexception et conditions de lancement
Provoque les avertissements de dsapprobation
Cours Java - M. Baron - Page 172
Rfrence croise
Javadoc et les commentaires
keulkeul.blogspot.com
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();
...
Gnration du code html partir de loutil javadoc
Pour obtenir les
informations de javadoc
javadoc -help
javadoc [options] nomDesClassesJava.java
Cours Java - M. Baron - Page 173
Javadoc et les commentaires
keulkeul.blogspot.com
Exemple : aperu html de la description de la classe Object
gnre avec javadoc
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
keulkeul.blogspot.com
Utilisation pour la cration
Utilisation de loutil jar
Pour crer un fichier .jar contenant les fichiers du rpertoire courant
jar cvf hello.jar .
Cration Verbose Nom archive
Le . indique le
rpertoire courant
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
Cration du jar avec un fichier manifeste :
MANIFEST.MF
keulkeul.blogspot.com
jar cvfm hello.jar MANIFESTE.MF .
Utilisation pour lexcution
java jar hello.jar
Cette option permet dexcuter
partir dune archive du code java
La classe HelloWorld est
charge par lintermdiaire
du fichier MANIFESTE.MF
Cours Java - M. Baron - Page 176
Exception
Dfinition
Une exception est un signal indiquant que quelque chose dexceptionnelle (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
keulkeul.blogspot.com
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)
Vocabulaire
Lancer ou dclencher (throw) une exception consiste signaler les
erreurs
Capturer ou attraper (catch) une exception permet de traiter les
Cours Java - M. Baron - Page
erreurs
177
Exception
Exemple : lancer et capturer une exception
public class Point {
... // Dclaration des attributs
... // Autre mthodes et constructeurs
public Point(int x, int y) throws ErrConst {
if ((x < 0) || (y < 0)) throw new ErrConst();
this.x = x ; this.y = y;
}
keulkeul.blogspot.com
public void affiche() {
System.out.println("Coordonnes : " + x + " " + y);
}
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");
System.exit(-1);
}
}
}
La classe
ErrConst nest
pas encore
dfinie. A voir
plus tard
Cours Java - M. Baron - Page 178
Exception : mcanisme
Explication
Lorsquune situation exceptionnelle est rencontre, une exception est
Mthode n
lance
Si elle nest pas traite, elle est transmise au
bloc englobant, , jusqu ce quelle soit
traite ou parvienne en haut de la pile
dappel. Elle stoppe alors lapplication
bloc 1
bloc 1.1
bloc 2
bloc 2.1
Mthode 1
bloc 2.1.1
keulkeul.blogspot.com
Mthode 2
bloc 2.1.2
appel de
mthode
transmission
d'exception
Mthode n
Une exception vient
de se produire
bloc 2.2
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
keulkeul.blogspot.com
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
Soit la mthode appelle du code qui lance une exception
public Point(int x, int y) throws ErrConst {
checkXYValue(x,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 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);
a.affiche();
a = new Point(-2, 4);
a.affiche();
}
Mthodes risques. Elles
sont surveilles
keulkeul.blogspot.com
La gestion des risques est obtenue par des blocs
catch(TypeException e) {}
} 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");
System.exit(-1);
}
...
Lerreur exceptionnelle
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
Erreurs non rcuprables.
Plantage de lapplication
keulkeul.blogspot.com
Error
Erreur que lon peut
traiter puisque
rcuprable
Throwable
Exception
NullPointerException
Pour dfinir de nouveaux
types dexception, on sousclassera la classe
Exception
ErrConst
Cours Java - M. Baron - Page 183
Exception : modlisation
Les exceptions sont des objets nous pouvons donc dfinir
Des attributs particuliers
Des mthodes
Exception
Contient un message
derreur dcrivant
lexception
- message : String
keulkeul.blogspot.com
Renvoie le message derreur
dcrivant lexception
Affiche sur la sortie erreur
standard la liste des appels
de mthodes ayant conduit
lexception
+
+
+
+
+
Exception()
Exception(String)
getMessage() : String
printStackTrace()
ErrConst
Constructeur avec ou
sans argument
Classe trs simple,
puisque rien na t
redfini
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);
}
...
keulkeul.blogspot.com
Affichage de la liste des
mthodes
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;
}
public Point(int x, int y) throws ErrConst {
if ((x < 0) || (y < 0)) throw new ErrConst();
this.x = x ; this.y = y;
}
keulkeul.blogspot.com
...
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");
System.exit(-1);
} catch (ErrDepl e) {
System.out.println("Erreur Dplacement");
System.exit(-1);
}
}
}
Dfinition dune
nouvelle mthode
qui lance une
exception
Attrape la nouvelle
exception de type
ErrDepl
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
keulkeul.blogspot.com
Les exceptions leves dans la
mthode (Point) et non attrapes par
celle-ci
public Point(int x, int y) throws ErrConst {
if ((x < 0) || (y < 0)) throw new ErrConst();
this.x = x ; this.y = y;
}
Les exceptions leves dans des
mthodes (checkXYValue) appeles
par la mthode (Point) et non
attrapes par celle-ci
public Point(int x, int y) throws ErrConst {
checkXYValue(x,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
keulkeul.blogspot.com
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(...);
}
}
}
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(...);
}
}
keulkeul.blogspot.com
Soit en ajoutant explicitement
linstruction throws la
mthode transformer de faon
rediriger lerreur
public void transformer()
throws ErrDepl {
...
this.deplace(...);
}
Soit en entourant dun bloc
try catch la mthode
qui peut poser problme
public void transformer() {
try {
...
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 {
if ((x < 0) || (y < 0)) throw new ErrConst(x,y);
this.x = x ; this.y = y;
}
public class ErrConst extends Exception {
...
private int abs, ord;
}
public ErrConst(int x, int y) {
this.abs = x;
this.ord = y;
}
keulkeul.blogspot.com
public int getAbs() { return this.abs; }
public int getOrd() { return this.ord; }
}
public class Test {
public static void main(String[] argv) {
try {
...
a = new Point(-2, 4);
} catch (ErrConst e) {
System.out.println("Erreur Construction point");
System.out.println("Coordonnes souhaites : "
+ e.getAbs() + " " + e.getOrd());
System.exit(-1);
}...
ErrConst
- abs, ord : int
+ ErrConst(x,y)
+ getAbs : int
+ getOrd : int
ErrConst permet de
connatre les valeurs
qui ont fait chouer la
construction de Point
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
keulkeul.blogspot.com
Lintrt est double
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) {
System.out.println("Erreur Construction");
System.out.println("Fin du programme");
System.exit(-1);
} catch (ErrDepl e) {
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");
} catch (ErrDepl e) {
System.out.println("Erreur Dplacement");
} finally {
System.out.println("Fin du programme");
System.exit(-1);
}
}
}
keulkeul.blogspot.com
Ces instructions sont
rappeles plusieurs
fois
Au moyen du mot
cl finally, il est
possible de
factoriser
Cours Java - M. Baron - Page 192
Exception : pour ou contre
Exemple : grer les erreurs sans les exceptions
keulkeul.blogspot.com
erreurType lireFichier() {
int codeErreur = 0;
// Ouvrir le fichier
if (isFileIsOpen()) {
// Dtermine la longueur du fichier
if (getFileSize()) {
// Vrification de lallocation de la mmoire
if (getEnoughMemory()) {
// Lire le fichier en mmoire
if (readFailed()) {
codeErreur = -1;
}
} else {
codeErreur = -2;
}
} else {
codeErreur = -3;
}
// Fermeture du fichier
if (closeTheFileFailed()) {
codeErreur = - 4;
}
} else {
codeErreur = - 5;
}
La gestion des
erreurs devient trs
difficile
Difficile de grer les
retours de fonctions
Le code devient de
plus en plus
consquent
Cours Java - M. Baron - Page 193
Exception : pour ou contre
Le mcanisme dexception permet
La concision
keulkeul.blogspot.com
La lisibilit
void lireFichier() {
try {
// 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) {
...
}
}
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), mentionnes par le mot cl throws
Les exceptions implicites qui ne sont pas mentionnes par le mot cl
throws
keulkeul.blogspot.com
Liste de quelques exceptions
ArithmeticException (division par zro)
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,
keulkeul.blogspot.com
un programme ouvre un flux de donnes
Java fournit un paquetage java.io qui permet de grer les flux
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 manipulation 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)
keulkeul.blogspot.com
La classe OuputStream et ses sous-classes pour crire des octets
(FileOuputStream)
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
}
}
Fermeture du flux
myFile vers le fichier
a_ecrire.txt
Ecriture dune ligne de
texte dans le fichier
a_ecrire.txt
Cours Java - M. Baron - Page 198
Les flux de caractres
Exemple : lire lentre standard : enfin !!!
public class TestIO {
public static void main(String[] argv) {
System.out.println("Veuillez saisir votre nom :");
Convertit un objet
de type InputStream
en Reader
String inputLine = " ";
try {
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
String inputLine;
inputLine = is.readLine();
keulkeul.blogspot.com
is.close();
} catch (Exception e) {
System.out.println("Intercept : " + e);
}
Lit la ligne jusquau
prochain retour
chariot
if (inputLine != null)
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
de Reader et Writer
et permettent de
manipuler un flux
public class TestIO {
public static void main(String[] argv) {
FileReader in = new FileReader("a_lire.txt");
FileWriter out = new FileWriter("a_ecrire.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
texte associ un
fichier texte
keulkeul.blogspot.com
in.close();
out.close();
Transfert de
donnes jusqu ce
que in ne fournisse
plus rien
}
}
Fermeture des flux
et par consquent
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
caractres sauf
public class TestIO {
public static void main(String[] argv) {
FileInputStream in = new FileInputStream("a_lire.txt");
FileOutputStream out = new FileOutputStream("a_ecrire.txt");
int c;
keulkeul.blogspot.com
while ((c = in.read()) != -1) {
out.write(c);
}
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
La cration dun objet de type File
File monFichier = new File("truc.dat");
File
Attention : ne pas
confondre la cration de
lobjet avec la cration du
fichier physique
Cration du fichier
portant le nom de name
keulkeul.blogspot.com
- name : String
+
+
+
+
+
+
+
File(String nf)
createNewFile()
delete() : boolen
exists() : boolen
getName() : String
isFile() : boolen
Vrifie si le fichier existe
physiquement
File monFichier = new File("c:\toto.txt");
if (monFichier.exists()) {
monFichier.delete();
} 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
keulkeul.blogspot.com
manipuler les principales structures de donnes
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
HashSet
TreeSet
keulkeul.blogspot.com
HashSet
ArrayList
Depuis la version 5 de Java, possibilit dutiliser les gnriques
pour typer le contenu des Collections
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
keulkeul.blogspot.com
lments dune collection
Efficacit des oprations sur des collections
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
keulkeul.blogspot.com
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
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
keulkeul.blogspot.com
bidirectionnels
Le parcours de la collection peut se faire dans les deux sens ;
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
prochain
Iterator << Interface >>
+ hasNext() : boolen
+ next() : < ? >
+ remove()
Supprime le dernier
objet renvoy par
next()
keulkeul.blogspot.com
Iterator iter = c.iterator();
On vrifie sil y a
possibilit de
rcuprer un
objet
while (iter.hasNext()) {
??? o = iter.next();
...
}
Permet dobtenir
lobjet courant et
passe au suivant
c est une
collection et on
rcupre son
Iterator
On rcupre
lobjet courant
puis on passe au
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
Vrifie sil y a un
prcdent
keulkeul.blogspot.com
On vrifie sil y a
possibilit de
rcuprer un objet
prcdemment
Iterator << Interface >>
ListIterator << Interface >>
+
+
+
+
+
Ajoute ou modifie
la position courante
un lment de la
collection
previous() : < ? >
hasPrevious() : boolen
add(< ? >)
set(< ? >)
Iterator iter = c.listIterator();
Rcupre lobjet
prcdemment puis
on passe au
prcdent
while (iter.hasPrevious()) {
??? o = iter.previous();
...
}
c est une
collection et on
rcupre son
ListIterator
Initialise en dbut
de liste
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
keulkeul.blogspot.com
LinkedList<String> l1 = new LinkedList<String>();
ListIterator iter = l1.listIterator();
Plus rien
aprs ses
lments,
on fait un
retour en
arrire
iter.add("Bonjour");
iter.add("Coucou");
while(iter.hasPrevious()) {
String o = iter.previous();
System.out.println(o);
}
Ajout des
lments au
travers de
litrateur
Lutilisation de
la LinkedList est
transparente
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>();
l1.add("Bonjour");
l1.add("Coucou");
keulkeul.blogspot.com
for (int i = 0; i < l1.size(); i++) {
String o = l1.get(i);
System.out.println(o);
}
Utilisation de
la mthode
add de la
classe
LinkedList
Lutilisation
de la
LinkedList
nest pas
transparente.
Connaissance
obligatoire
de ces
mthodes
Ne pas modifier la collection
(add de LinkedList) pendant
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>();
keulkeul.blogspot.com
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));
}
if (my_object instanceof Integer) {
System.out.println("Integer:" + ((Integer)myObject));
}
} lutilisation de
Prfrer
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
keulkeul.blogspot.com
dun objet)
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);
}
keulkeul.blogspot.com
}
public static void affiche(HashSet ens) {
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;
keulkeul.blogspot.com
Point(int x, int y) {
this.x = x; this.y = y;
}
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 + "] ");
}
Redfinition des
mthodes hashCode()
et equals(Object)
Cours Java - M. Baron - Page 215
Programmation Oriente Objet
application au langage Java
Bilan
Mickal BARON - 2007
mailto:
[email protected] ou mailto:
[email protected]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
keulkeul.blogspot.com
version apporte son lot de nouvelles fonctionnalits
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