Documente Academic
Documente Profesional
Documente Cultură
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)
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
keulkeul.blogspot.com
Dans les annes 90, vers une maturit des concepts objets
Standardisation de C++
Apparition de langages comme Java ou Python
Programmation Structure
keulkeul.blogspot.com
maVoiture
un tat
- couleur = bleue
un comportement
- vitesse = 100
une identit
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
dmarre
ma voiture
le moteur
Nom de la classe
- puissance : entier
keulkeul.blogspot.com
Attributs
- estDmarre : boolen
- vitesse : rel
+ deQuellePuissance() : entier
Mthodes
- Slecteur
+ demarre()
- Modificateurs
+ acclre (rel)
Visibilit
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
Droulement du cours
Structuration du cours
Prsentation des concepts
Illustration avec de nombreux exemples
Des bulles daide tout au long du cours :
keulkeul.blogspot.com
Organisation ...
keulkeul.blogspot.com
Partie 4 : Hritage
Partie 5 : Hritage et polymorphisme
Partie 7 : Les indispensables : package,collections
et exception
Dates cls
1991 : Introduction du langage Oak par James Gosling
keulkeul.blogspot.com
keulkeul.blogspot.com
Sr
Orient objet
Portable
Rparti
Performant
Interprt
Multitches
Robuste
Dynamique ...
Byte-Code Java
Code objet destin tre excut sur toute Machine Virtuelle
Java
Provient de la compilation du code source
keulkeul.blogspot.com
keulkeul.blogspot.com
Cartes puces
...
Codes Sources
Compilation en Byte-Code
javac
Byte Code
MonProgramme.class
keulkeul.blogspot.com
java
MonProgramme
Cours Java - M. Baron - Page 18
Diffrentes finalits
LAPI de Java
Packages
keulkeul.blogspot.com
Classes
Description
Attributs
Mthodes
Ouvrages dinitiation
Programmer en Java (2me dition)
Auteur : Claude Delannoy
diteur : Eyrolles
Edition : 2002 - 661 pages - ISBN : 2212111193
Java en action
keulkeul.blogspot.com
Ouvrages de rfrence
Ouvrages thmatiques aux ditions OReilly sur une slection
des Packages Java (certains traduits en Franais)
keulkeul.blogspot.com
keulkeul.blogspot.com
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
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
keulkeul.blogspot.com
Excution
java NomDeClasse
keulkeul.blogspot.com
27
Initialisation et constantes
Initialisation
Une variable peut recevoir une valeur au moment de sa dclaration :
int n = 15;
boolean b = true;
Penser linitialisation
au risque dune erreur de
compilation
int n;
System.out.println(" n = " + n);
Constantes
keulkeul.blogspot.com
Structure de contrle
Choix
Si alors sinon : if condition {} else {}
Itrations
Nouveaut Java 5
keulkeul.blogspot.com
Slection borne
Selon faire : switch ident { case valeur0 : case valeur1 :
default: }
Structure de contrle
Exemple : structure de contrle
Faisons varier n
keulkeul.blogspot.com
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 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
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;
}
}
}
keulkeul.blogspot.com
a=b
keulkeul.blogspot.com
monTableau
null
keulkeul.blogspot.com
int monTableau[];
keulkeul.blogspot.com
0
Cours Java - M. Baron - Page 36
keulkeul.blogspot.com
monTableau
monTab[1] = 2;
monTableau
monTab[2] = 3;
monTableau
est quivalent
monTab = new int[3];
monTab[0] = 1; monTab[1] = 2; monTab[2] = 3;
Cours Java - M. Baron - Page 37
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);
}
tab
null
Tableaux rectangulaires
Dimensionnement :
tab
Tableaux non-rectangulaires
keulkeul.blogspot.com
Dimensionnement :
tab
null
null
tab
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
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
keulkeul.blogspot.com
43
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
Attributs
keulkeul.blogspot.com
Slecteur
Modificateurs
}
keulkeul.blogspot.com
Attributs visibles
dans les mthodes
keulkeul.blogspot.com
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
Voiture
instance of
Relation dinstanciation
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
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
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
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
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
Utilisation
Usage des Mthodes et des Attributs (non recommand)
Les attributs de lobjet peuvent tre modifis
keulkeul.blogspot.com
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
attribut 1
attribut n
keulkeul.blogspot.com
Dclaration
Cration et
allocation
mmoire
Dclaration
keulkeul.blogspot.com
Affectation par
rfrence
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.)
keulkeul.blogspot.com
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
Dclaration
keulkeul.blogspot.com
Cration et
allocation
mmoire
avec Voiture(int)
Voiture maSecVoiture;
// Sous entendu quil existe
// explicitement un constructeur : Voiture(int)
maSecVoiture = new Voiture(); // Erreur
}
}
keulkeul.blogspot.com
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
Chaque constructeur
possde le mme nom
(le nom de la classe)
keulkeul.blogspot.com
+ v1.puissance);
}
}
keulkeul.blogspot.com
66
-
+
+
+
+
deQuellePuissance() : entier
demarre()
acclre (rel)
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);
}
}
Les objets
Leur modification dans la mthode entrane celle de loriginal!!!
Leur rfrence est recopie et non pas les attributs
Rfrence comme
paramtre
Voiture
+ 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
keulkeul.blogspot.com
Dsigne la variable
vitesse
Dsigne lattribut
vitesse
Dsigne lattribut
demarree
Le retour dUML
Association : les objets sont smantiquement lis
Exemple : une Voiture est conduite par un Conducteur
keulkeul.blogspot.com
Composition
Voiture
0..1
0..1
Conducteur
Agrgation
4..5
Roue
Moteur
0..1
Galerie
Cours Java - M. Baron - Page 72
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
keulkeul.blogspot.com
Moteur
}
Voiture
keulkeul.blogspot.com
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
keulkeul.blogspot.com
Voiture
Moteur
La puissance est
donne lors de la
construction
keulkeul.blogspot.com
0..1
Galerie
Destruction et ramasse-miettes
La destruction des objets se fait de manire implicite
Le ramasse-miettes ou Garbage Collector se met en route
Automatiquement
Manuellement :
keulkeul.blogspot.com
Destruction et ramasse-miettes
public class Voiture {
keulkeul.blogspot.com
Force le programme
se terminer
keulkeul.blogspot.com
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
Surcharge
Exemple : une voiture surcharge
keulkeul.blogspot.com
Exemple
Implantation du constructeur
public Voiture(int p) {
this(p, new Galerie());
}
keulkeul.blogspot.com
paramtres
...
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
A revoir dans la
partie suivante
Cours Java - M. Baron - Page 84
keulkeul.blogspot.com
attribut
mthode
- private
Mthode accessible
lintrieur de la dfinition de
la classe
Cours Java - M. Baron - Page 85
Encapsulation
Exemple : encapsulation
public class Voiture {
keulkeul.blogspot.com
Longueur
maChaine.length(); // Avec les parenthses car c'est une mthode
Comparaison
keulkeul.blogspot.com
Concatnation
String essai = "ess" + "ai";
String essai = "ess".concact("ai");
keulkeul.blogspot.com
keulkeul.blogspot.com
Un exemple
StringTokenizer st =
new StringTokenizer("Bonjour,
le monde|de|Java",", |");
while(st.hasMoreElements())
System.out.println("Element : " + st.nextElement());
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 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.
keulkeul.blogspot.com
Voiture.nbVoitureCreees = 3;
Constantes de classe
Usage
Ce sont des constantes lies une classe
Elles sont crites en MAJUSCULES
keulkeul.blogspot.com
keulkeul.blogspot.com
Utilisation de
Variables et
Constantes de classe
par le nom de la
classe Voiture
Dangereux car
possibilit de
modification
extrieure...
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
keulkeul.blogspot.com
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 Voiture(Galerie g) {
laGalerie = g;
...
}
public static boolean isGalerieInstall() {
return (laGalerie != null)
}
keulkeul.blogspot.com
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);
keulkeul.blogspot.com
97
2 Dimensionnement
monTableau = new Voiture[3];
3 Initialisation
keulkeul.blogspot.com
Ou 12 et 3
Voiture[] monTab = {
new Voiture(5),
new Voiture(7),
new Voiture(8)
};
keulkeul.blogspot.com
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
keulkeul.blogspot.com
keulkeul.blogspot.com
Dfinition et intrts
Hritage
Technique offerte par les langages de programmation pour
construire une classe partir dune (ou plusieurs) autre classe en
partageant ses attributs et oprations
Intrts
Spcialisation, enrichissement : une nouvelle classe rutilise les
attributs et les oprations d une classe en y ajoutant et/ou des
keulkeul.blogspot.com
104
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)
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
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
Exemple dhritage
Exemple : espces
Mammifre
keulkeul.blogspot.com
Ctac
Humain
Baleine
Dauphin
Etudiant
Enseignant
Mobi Dick
Ecco
Raoul
Mickal
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
VehiculePrioritaire
- gyrophare : boolen
+ allumeGyrophare()
Voiture
+ dmarre()
VehiculePrioritaire
keulkeul.blogspot.com
+ allumeGyrophare()
Ambulance
- malade : String
+ chercher(String)
Ambulance am =
new Ambulance(...);
am.dmarre();
am.allumeGyrophare();
am.chercher("Raoul");
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
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
keulkeul.blogspot.com
+ dmarre()
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
Surcharge
VehiculePrioritaire possde
au plus une mthode de
plus que VoitureElectrique
Cours Java - M. Baron - Page 114
super.nomSuperClasseMethodeAppelee(...);
keulkeul.blogspot.com
}
public class TestMaVoiture {
public static void main (String[] argv) {
// Dclaration puis cration
VoitureElectrique laRochelle =
new VoitureElectrique(...);
laRochelle.demarre();
}
}
keulkeul.blogspot.com
Implantation du constructeur
de VoiturePrioritaire partir
de Voiture
keulkeul.blogspot.com
public Voiture(int p) {
this(p, new Galerie());
}
keulkeul.blogspot.com
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
Constructeurs explicites
dsactivation du
constructeur par dfaut
keulkeul.blogspot.com
super();
keulkeul.blogspot.com
Object
+
+
+
+
Class getClass()
String toString()
boolean equals(Object)
int hashCode()
Aprs redfinition
keulkeul.blogspot.com
Avant redfinition
.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
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()
VehiculePrioritaire
VehiculeElectrique
+ dmarre(int code)
+ dmarre()
keulkeul.blogspot.com
keulkeul.blogspot.com
Dfinition du polymorphisme
Dfinition
Un langage orient objet est dit polymorphique, sil offre la possibilit
de pouvoir percevoir un objet en tant quinstance de classes varies,
selon les besoins
Une classe B qui hrite de la classe A peut tre vue comme un
sous-type du type dfini par la classe A
Voiture
+ dmarre()
Rappel
keulkeul.blogspot.com
voitureLarochelle
Mais aussi
voitureLarochelle est une instance de la
classe Voiture
Cours Java - M. Baron - Page 128
keulkeul.blogspot.com
+ dmarre()
VoitureElectrique
+ dmarre()
+ getVoltage() : int
Voiture voitureLarochelle =
new VoitureElectrique(...);
}
}
voitureLarochelle
keulkeul.blogspot.com
Examiner le type de
la rfrence
keulkeul.blogspot.com
Voiture
+ dmarre()
voitureLarochelle
Lobjet voitureLarochelle
initialise les attributs de la
classe VoitureElectrique
voitureLarochelle.demarre();
}
}
Voiture
+ dmarre() {
estDemarre = true;
}
keulkeul.blogspot.com
voitureLarochelle.demarre()
VoitureElectrique
+ dmarre() {
super.dmarre();
disjoncteur = true;
}
keulkeul.blogspot.com
Point
Pointcol
keulkeul.blogspot.com
Point
Pointcol
keulkeul.blogspot.com
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
VoitureElectrique
+ dmarre() {
super.dmarre();
disjoncteur = true;
}
keulkeul.blogspot.com
- liste : Forme[ ]
+ ajouter(Forme)
+ afficherForme()
keulkeul.blogspot.com
+ afficher()
...
Rectangle
- largeur : int
- hauteur : int
+ afficher()
Cercle
- rayon : int
+ afficher()
keulkeul.blogspot.com
}
}
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
keulkeul.blogspot.com
ClasseB
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
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
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
keulkeul.blogspot.com
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
keulkeul.blogspot.com
Voiture
keulkeul.blogspot.com
- arceauxRetirs : boolen
+ replieLeToit()
Mthode
abstraite
keulkeul.blogspot.com
}
public class C3Pluriel extends VoitureDecapotable {
private boolean arceauxRetirs;
public void replieLeToit() {
this.toitReplie = true;
this.arceauxRetirs = true;
}
}
}
}
Attention : La classe
VoitureDecapotable ne
peut tre instancie
puisquelle est
abstraite
Cours Java - M. Baron - Page 148
Forme {abstraite}
- positionx, positiony : int
Cercle
- rayon : int
+ deplace(x,y)
+ surface() : double {abstraite}
+ primtre() : double {abstraite}
keulkeul.blogspot.com
+ surface() : double
+ primtre() : double
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
Exemple
Les choses Dmarrable doivent possder une mthode dmarre()
Voiture
Dmarrable << Interface >>
+ dmarre
Ordinateur
Interface : ne pas
confondre avec les
interfaces graphiques
keulkeul.blogspot.com
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
keulkeul.blogspot.com
Ordinateur
keulkeul.blogspot.com
Doit implmenter
toutes les mthodes
des interfaces
keulkeul.blogspot.com
Dmarrable
public class Person {
private Demarrable objetDemarrable;
keulkeul.blogspot.com
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
saClio
maClio
- puissance = 4
- estDmarre = true
- vitesse = 179.8
- puissance = 4
- estDmarre = true
- vitesse = 179.8
recopie
keulkeul.blogspot.com
Classes anonymes
Sont des instanciations de classes et
keulkeul.blogspot.com
Demarrable uneInstance =
new Demarrable(){
public void demarre() {
// Code ici
}
};
classe
classe anonyme
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 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
keulkeul.blogspot.com
Nom complet
de la classe
java.util.Date
keulkeul.blogspot.com
ou
import mesclasses.*;
import java.lang.*; // Ne sert rien puisque par dfaut
import java.io.*;
Ecriture trs
lourde prfrer
la solution avec
le mot cl import
Exemple : mesclassses.Voiture
Voiture.java
Classe
mesclasses
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
keulkeul.blogspot.com
lang
util
math
String.java
Voiture
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
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) {
...
}
}
keulkeul.blogspot.com
package, sous-packages
et classes se fait laide
de point . et non de
anti-slash \
import java.util.zip.*;
import java.util.*;
keulkeul.blogspot.com
ZipFile du package
java.util.zip
/**
et
*/
*/
Utilisation
Lentit documente est prcde par son commentaire
keulkeul.blogspot.com
keulkeul.blogspot.com
keulkeul.blogspot.com
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
keulkeul.blogspot.com
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
MANIFEST.MF
keulkeul.blogspot.com
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
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
La classe
ErrConst nest
pas encore
dfinie. A voir
plus tard
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
bloc 2.2
constructeur Point de
lancer une exception
ErrConst
keulkeul.blogspot.com
Cration dune
nouvelle valeur
dexception
keulkeul.blogspot.com
181
Lerreur exceptionnelle
est traite par le bloc
catch
keulkeul.blogspot.com
}
}
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
Throwable
Exception
NullPointerException
ErrConst
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
+
+
+
+
+
Exception()
Exception(String)
getMessage() : String
printStackTrace()
ErrConst
Constructeur avec ou
sans argument
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
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
keulkeul.blogspot.com
keulkeul.blogspot.com
keulkeul.blogspot.com
keulkeul.blogspot.com
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
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
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
Au moyen du mot
cl finally, il est
possible de
factoriser
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
Le code devient de
plus en plus
consquent
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) {
...
}
}
keulkeul.blogspot.com
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
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
}
}
Fermeture du flux
myFile vers le fichier
a_ecrire.txt
Convertit un objet
de type InputStream
en Reader
keulkeul.blogspot.com
is.close();
} catch (Exception e) {
System.out.println("Intercept : " + e);
}
if (inputLine != null)
System.out.println("Votre nom est :" + inputLine);
}
}
Chane saisie
Cours Java - M. Baron - Page 199
texte associ un
fichier texte
keulkeul.blogspot.com
in.close();
out.close();
Transfert de
donnes jusqu ce
que in ne fournisse
plus rien
}
}
200
keulkeul.blogspot.com
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
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
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
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
keulkeul.blogspot.com
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
Supprime le dernier
objet renvoy par
next()
keulkeul.blogspot.com
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
keulkeul.blogspot.com
On vrifie sil y a
possibilit de
rcuprer un objet
prcdemment
Ajoute ou modifie
la position courante
un lment de la
collection
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
keulkeul.blogspot.com
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
keulkeul.blogspot.com
Utilisation de
la mthode
add de la
classe
LinkedList
Lutilisation
de la
LinkedList
nest pas
transparente.
Connaissance
obligatoire
de ces
mthodes
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
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
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();
}
}
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)
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