Vous êtes sur la page 1sur 133

La programmation orientee objets

et le langage Java

Master BBSG 2
Laurent Tichit
Departement Informatique et Interactions, Faculte des Sciences de Luminy

Cours 4: Heritage, polymorphisme,


abstraction. Interfaces. Exceptions.

L.
c Tichit, 2015-2016 POO et Java 1/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}

L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}

L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}
class Abonn e extends Habituel {
les abonn es payent par mois
}

L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}
class Abonn e extends Habituel {
les abonn es payent par mois
}
class Resident extends Abonn e {
les r
esidents ne payent pas
}

L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Exemple : des classes d


ecrivant les utilisateurs du parking dun immeuble
class Usager {
tout vehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager frequent (paie avec une carte)
}
class Abonn e extends Habituel {
les abonn es payent par mois
}
class Resident extends Abonn e {
les r
esidents ne payent pas
}
toutes ces classes d
efinissent ou red
efinissent la m
ethode
public void emettreTicket();

L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Usager
emettreTicket()
...

Habituel
emettreTicket()
...

Abonn
emettreTicket()
...

Rsident
emettreTicket()
...

L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;

Habituel (affectation de unClient invisible)


emettreTicket()
...

Abonn
emettreTicket()
...

Rsident
emettreTicket()
...

L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;

Habituel (affectation de unClient invisible)


emettreTicket() une expression comme
...
unClient.emettreTicket();

Abonn pose deux questions :

emettreTicket() cette expression passe-t-elle la compilation ?


...

Rsident
emettreTicket()
...

L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;

Habituel (affectation de unClient invisible)


emettreTicket() une expression comme
...
unClient.emettreTicket();

Abonn pose deux questions :

emettreTicket() cette expression passe-t-elle la compilation ?


... Oui, car emettreTicket() est membre de la classe Usager

Rsident
emettreTicket()
...

L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;

Habituel (affectation de unClient invisible)


emettreTicket() une expression comme
...
unClient.emettreTicket();

Abonn pose deux questions :

emettreTicket() cette expression passe-t-elle la compilation ?


... Oui, car emettreTicket() est membre de la classe Usager
peut-on dire quel sera son effet `
a lex
ecution ?
Rsident
emettreTicket()
...

L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;

Habituel (affectation de unClient invisible)


emettreTicket() une expression comme
...
unClient.emettreTicket();

Abonn pose deux questions :

emettreTicket() cette expression passe-t-elle la compilation ?


... Oui, car emettreTicket() est membre de la classe Usager
peut-on dire quel sera son effet `
a lex
ecution ?
Rsident
Non, car emettreTicket() etant redefinie, leffet d
epend
emettreTicket() de la valeur effective de unClient au moment de lappel.
...

L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;

Habituel (affectation de unClient invisible)


emettreTicket() une expression comme
...
unClient.emettreTicket();

Abonn pose deux questions :

emettreTicket() cette expression passe-t-elle la compilation ?


... Oui, car emettreTicket() est membre de la classe Usager
peut-on dire quel sera son effet `
a lex
ecution ?
Rsident
Non, car emettreTicket() etant redefinie, leffet d
epend
emettreTicket() de la valeur effective de unClient au moment de lappel.
...

A retenir : la methode appelee dans unObjet.uneMethode(...) est toujours


la plus  specialis
ee  possible, c.-`
a-d. la plus proche du type effectif de unObjet

L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Lexemple magique
class ObjetGraphique {
public void seDessiner() {
...
}
} Objet
class Triangle extends ObjetGraphique { Graphique
public void seDessiner() {
op
erations pour dessiner un triangle
} Triangle Cercle
}
class Cercle extends ObjetGraphique {
public void seDessiner() {
op
erations pour dessiner un cercle
}
Rectangle
}
class Rectangle extends ObjetGraphique {
public void seDessiner() {
op
erations pour dessiner un rectangle
}
}

L.
c Tichit, 2015-2016 POO et Java 4/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];

L.
c Tichit, 2015-2016 POO et Java 5/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];
Construction
image[0] = new Triangle(...);
image[1] = new Cercle(...);
image[2] = new Rectangle(...);
...

L.
c Tichit, 2015-2016 POO et Java 5/1
H
eritage, suite

Polymorphisme et methodes virtuelles

Une image (complexe) est un tableau dobjets


graphiques
Declaration
ObjetGraphique[] image
= new ObjetGraphique[n];
Construction
image[0] = new Triangle(...);
image[1] = new Cercle(...);
image[2] = new Rectangle(...);
...
Affichage
for (int i = 0; i < n; i++)
image[i].seDessiner();

L.
c Tichit, 2015-2016 POO et Java 5/1
H
eritage, suite

Methodes abstraites

Reprenons lexemple  magique  :

class ObjetGraphique { Objet


public void seDessiner() { Graphique
}
}
class Triangle extends ObjetGraphique { Triangle Cercle
public void seDessiner() {
op
erations pour dessiner un triangle
}
} Rectangle
etc.

utilisation
ObjetGraphique og;
...
og = new Triangle(...); // par exemple
...
og.seDessiner();

L.
c Tichit, 2015-2016 POO et Java 6/1
H
eritage, suite

Methodes abstraites

Reprenons lexemple  magique  :

class ObjetGraphique { Objet


public void seDessiner() { Graphique
System.out.println("ERREUR");
}
}
class Triangle extends ObjetGraphique { Triangle Cercle
public void seDessiner() {
op
erations pour dessiner un triangle
}
} Rectangle
etc.

utilisation
ObjetGraphique og;
...
og = new Triangle(...); // par exemple
...
og.seDessiner();

L.
c Tichit, 2015-2016 POO et Java 6/1
H
eritage, suite

Methodes abstraites

Reprenons lexemple  magique  :

class ObjetGraphique { Objet


public void seDessiner() { Graphique
System.out.println("ERREUR");
}
}
class Triangle extends ObjetGraphique { Triangle Cercle
public void seDessiner() {
op
erations pour dessiner un triangle
}
} Rectangle
etc.

utilisation
ObjetGraphique og;
...
og = new Triangle(...); // par exemple
...
og.seDessiner();

quelle erreur traduirait laffichage de  ERREUR  ?

L.
c Tichit, 2015-2016 POO et Java 6/1
H
eritage, suite

Methodes abstraites

Reprenons lexemple  magique  :

class ObjetGraphique { Objet


public void seDessiner() { Graphique
System.out.println("ERREUR");
}
}
class Triangle extends ObjetGraphique { Triangle Cercle
public void seDessiner() {
op
erations pour dessiner un triangle
}
} Rectangle
etc.

utilisation
ObjetGraphique og;
...
og = new Triangle(...); // par exemple
...
og.seDessiner();

quelle erreur traduirait laffichage de  ERREUR  ?


ne serait-il pas mieux de la signaler `
a la compilation ?

L.
c Tichit, 2015-2016 POO et Java 6/1
H
eritage, suite

Methodes abstraites

m
ethode abstraite = m
ethode  promise  :
une m ethode quil est n
ecessaire de d eclarer dans une classe...
...alors quelle ne pourra etre d
efinie que dans les sous-classes

L.
c Tichit, 2015-2016 POO et Java 7/1
H
eritage, suite

Methodes abstraites

m
ethode abstraite = m
ethode  promise  :
une m ethode quil est n
ecessaire de d eclarer dans une classe...
...alors quelle ne pourra etre d
efinie que dans les sous-classes
dans la classe ObjetGraphique au lieu de
public void seDessiner() {
code destin
e`a ne pas servir
}
on
ecrit
public abstract void seDessiner();

L.
c Tichit, 2015-2016 POO et Java 7/1
H
eritage, suite

Methodes abstraites

m
ethode abstraite = m
ethode  promise  :
une m ethode quil est n
ecessaire de d eclarer dans une classe...
...alors quelle ne pourra etre d
efinie que dans les sous-classes
dans la classe ObjetGraphique au lieu de
public void seDessiner() {
code destin
e`a ne pas servir
}
on
ecrit
public abstract void seDessiner();

ObjetGraphique
abstract seDessiner();
...

Triangle Cercle Rectangle


seDessiner() { ... } seDessiner() { ... } seDessiner() { ... }
... ... ...

L.
c Tichit, 2015-2016 POO et Java 7/1
H
eritage, suite

Classe abstraite

id
ee : une classe qui repr
esente seulement une partie dautres classes
techniquement : une classe qui ne doit pas avoir dinstance

L.
c Tichit, 2015-2016 POO et Java 8/1
H
eritage, suite

Classe abstraite

id
ee : une classe qui repr
esente seulement une partie dautres classes
techniquement : une classe qui ne doit pas avoir dinstance
il est obligatoire de d
eclarer abstraite une classe qui contient des m
ethodes abstraites
public abstract class ObjetGraphique {
...
public abstract void seDessiner();
...
}
ObjetGraphique l'italique indique
une classe abstraite
abstract seDessiner();
...

Triangle Cercle Rectangle


seDessiner() { ... } seDessiner() { ... } seDessiner() { ... }
... ... ...

L.
c Tichit, 2015-2016 POO et Java 8/1
H
eritage, suite

Une erreur trompeuse

comprendre lerreur  cette classe doit


etre d
eclar
ee abstraite 
public abstract class ObjetGraphique {
public abstract void seDessiner();
...
}

L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite

Une erreur trompeuse

comprendre lerreur  cette classe doit


etre d
eclar
ee abstraite 
public abstract class ObjetGraphique {
public abstract void seDessiner();
...
}
public class Rectangle extends ObjetGraphique {
public void sedessiner() {
code produisant le dessin dun rectangle
}
...
}

L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite

Une erreur trompeuse

comprendre lerreur  cette classe doit


etre d
eclar
ee abstraite 
public abstract class ObjetGraphique {
public abstract void seDessiner();
...
}
public class Rectangle extends ObjetGraphique {
public void sedessiner() {
code produisant le dessin dun rectangle
}
...
}
compilation de Rectangle (message am
elior
e dans les versions r
ecentes de javac) :
Rectangle must be declared abstract
because it not defines method seDessiner

L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite

Une erreur trompeuse

comprendre lerreur  cette classe doit


etre d
eclar
ee abstraite 
public abstract class ObjetGraphique {
public abstract void seDessiner();
...
}
public class Rectangle extends ObjetGraphique {
public void sedessiner() {
code produisant le dessin dun rectangle
}
...
}
compilation de Rectangle (message am
elior
e dans les versions r
ecentes de javac) :
Rectangle must be declared abstract
because it not defines method seDessiner
la solution nest pas de qualifier abstract la classe Rectangle...
...mais dy red
efinir la m
ethode promise seDessiner

L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite

Classes et methodes abstraites

Recapitulons :
une methode (ordinaire) represente un service :
 voici comment mes instances effectuent un certain traitement 

L.
c Tichit, 2015-2016 POO et Java 10 / 1
H
eritage, suite

Classes et methodes abstraites

Recapitulons :
une methode (ordinaire) represente un service :
 voici comment mes instances effectuent un certain traitement 

une methode abstraite represente un engagement :


 mes instances sauront effectuer un certain traitement,

mais on dira plus tard comment (quand on aura plus de details) 

L.
c Tichit, 2015-2016 POO et Java 10 / 1
H
eritage, suite

Classes et methodes abstraites

Recapitulons :
une methode (ordinaire) represente un service :
 voici comment mes instances effectuent un certain traitement 

une methode abstraite represente un engagement :


 mes instances sauront effectuer un certain traitement,

mais on dira plus tard comment (quand on aura plus de details) 

une classe abstraite melange des services rendus et des promesses ` a tenir :
Avant den creer des instances il faudra definir des sous-classes o`
u toutes les
methodes abstraites sont definies

L.
c Tichit, 2015-2016 POO et Java 10 / 1
H
eritage, suite

Classes et methodes abstraites

Ce nest pas parce quune methode est abstraite quon ne peut pas lappeler
immediatement. Exemple :

Fichier ObjetGraphique.java
public abstract class ObjetGraphique {
private Color couleur;
public abstract void seDessiner();

L.
c Tichit, 2015-2016 POO et Java 11 / 1
H
eritage, suite

Classes et methodes abstraites

Ce nest pas parce quune methode est abstraite quon ne peut pas lappeler
immediatement. Exemple :

Fichier ObjetGraphique.java
public abstract class ObjetGraphique {
private Color couleur;
public abstract void seDessiner();
public void sEffacer() {
couleur = couleurOpposee(couleur);
seDessiner();
couleur = couleurOpposee(couleur);
}
...
}

L.
c Tichit, 2015-2016 POO et Java 11 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites
variables publiques statiques finales (des constantes de classe)

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les methodes)
ou public static final (les variables)

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les methodes)
ou public static final (les variables)
une interface est donc une liste de promesses
(ou : cahier des charges, specification, etc.)

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les methodes)
ou public static final (les variables)
une interface est donc une liste de promesses
(ou : cahier des charges, specification, etc.)
lorsquune classe  tient  les promesses dune interface on dit que la classe
implemente linterface

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les methodes)
ou public static final (les variables)
une interface est donc une liste de promesses
(ou : cahier des charges, specification, etc.)
lorsquune classe  tient  les promesses dune interface on dit que la classe
implemente linterface
une classe peut implementer plusieurs interfaces

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les methodes)
ou public static final (les variables)
une interface est donc une liste de promesses
(ou : cahier des charges, specification, etc.)
lorsquune classe  tient  les promesses dune interface on dit que la classe
implemente linterface
une classe peut implementer plusieurs interfaces
les interfaces peuvent heriter les unes des autres

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`


a-d. faite de
methodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les methodes)
ou public static final (les variables)
une interface est donc une liste de promesses
(ou : cahier des charges, specification, etc.)
lorsquune classe  tient  les promesses dune interface on dit que la classe
implemente linterface
une classe peut implementer plusieurs interfaces
les interfaces peuvent heriter les unes des autres
la relation dheritage ( est une sorte de ) se note
entre deux classes ou deux interfaces, extends
entre une classe et une interface, implements

L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite

Interface, un exemple standard

Definition dune interface Pile


(en supposant que la biblioth` eque Java noffre rien de tel ce qui est faux) :

interface Pile {
boolean estVide();
void empiler(Object x);
Object depiler();
}

L.
c Tichit, 2015-2016 POO et Java 13 / 1
H
eritage, suite

Interface, un exemple standard

Definition dune interface Pile


(en supposant que la biblioth` eque Java noffre rien de tel ce qui est faux) :

interface Pile {
boolean estVide();
void empiler(Object x);
Object depiler();
}

D`
es quon a une interface on peut programmer avec :

void uneApplication(Pile unePile) {


...
for (int i = 0; i < n; i++)
unePile.empiler( acquisition(...) )
...
while ( ! unePile.estVide() )
exploitation( unePile.depiler() )
...
}

L.
c Tichit, 2015-2016 POO et Java 13 / 1
H
eritage, suite

Interface, un exemple standard

En revanche, on ne pourra pas avoir des objets Pile tant quon naura pas
ecrit une classe impl
ementant
linterface Pile :
class PileTab implements Pile {
Objet[] tab = new Object[100];
int n = 0;
public boolean estVide() {
return n == 0;
}
public void empiler(Object val) {
tab[n++] = val;
}
public Object depiler() {
return tab[--n];
}
}

L.
c Tichit, 2015-2016 POO et Java 14 / 1
H
eritage, suite

Interface, un exemple standard

En revanche, on ne pourra pas avoir des objets Pile tant quon naura pas
ecrit une classe impl
ementant
linterface Pile :
class PileTab implements Pile {
Objet[] tab = new Object[100];
int n = 0;
public boolean estVide() {
return n == 0;
}
public void empiler(Object val) {
tab[n++] = val;
}
public Object depiler() {
return tab[--n];
}
}

Et voici enfin lappel de uneApplication :


public static void main(String[] args) {
Pile unePile = new PileTab();
...
uneApplication(unePile);
...
}

L.
c Tichit, 2015-2016 POO et Java 14 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}
interface ObjectGraphique {
void seDessiner();
}

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}
interface ObjectGraphique {
void seDessiner();
}
interface Persistant {
void sauver(...);
void restaurer(...);
}

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}
interface ObjectGraphique {
void seDessiner();
}
interface Persistant {
void sauver(...);
void restaurer(...);
}
class MonBidule implements Pile, ObjectGraphique, Persistant {

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}
interface ObjectGraphique {
void seDessiner();
}
interface Persistant {
void sauver(...);
void restaurer(...);
}
class MonBidule implements Pile, ObjectGraphique, Persistant {
methodes impos
ees par linterface Pile

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}
interface ObjectGraphique {
void seDessiner();
}
interface Persistant {
void sauver(...);
void restaurer(...);
}
class MonBidule implements Pile, ObjectGraphique, Persistant {
methodes impos
ees par linterface Pile
methodes impos
ees par linterface ObjectGraphique

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}
interface ObjectGraphique {
void seDessiner();
}
interface Persistant {
void sauver(...);
void restaurer(...);
}
class MonBidule implements Pile, ObjectGraphique, Persistant {
methodes impos
ees par linterface Pile
methodes impos
ees par linterface ObjectGraphique
methodes impos
ees par linterface Persistant

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Interfaces et heritage multiple

Une classe peut implementer plusieurs interfaces :


interface Pile {
(voir pages pr
ec
edentes)
}
interface ObjectGraphique {
void seDessiner();
}
interface Persistant {
void sauver(...);
void restaurer(...);
}
class MonBidule implements Pile, ObjectGraphique, Persistant {
methodes imposees par linterface Pile
methodes imposees par linterface ObjectGraphique
methodes imposees par linterface Persistant
membres specifiques
}

L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite

Classes internes

une classe I peut


etre d
efinie `
a lint
erieur dune
autre classe E

L.
c Tichit, 2015-2016 POO et Java 16 / 1
H
eritage, suite

Classes internes

une classe I peut


etre d
efinie `
a lint
erieur dune
autre classe E
cela encapsule lacc`
es `
a I et `
a ses membres
(diminution des conflits, etc.)

L.
c Tichit, 2015-2016 POO et Java 16 / 1
H
eritage, suite

Classes internes

une classe I peut


etre d
efinie `
a lint
erieur dune
autre classe E
cela encapsule lacc`
es `
a I et `
a ses membres
(diminution des conflits, etc.)
et permet aux instances de I
dacc
eder aux membres dinstance de E

L.
c Tichit, 2015-2016 POO et Java 16 / 1
H
eritage, suite

Classes internes

class E {
une classe I peut
etre d
efinie `
a lint
erieur dune int x;
autre classe E
class I {
cela encapsule lacc`
es `
a I et `
a ses membres int y;
int test() {
(diminution des conflits, etc.) return x + y;
}
et permet aux instances de I }
}
dacc
eder aux membres dinstance de E

L.
c Tichit, 2015-2016 POO et Java 16 / 1
H
eritage, suite

Classes internes

class E {
une classe I peut
etre d
efinie `
a lint
erieur dune int x;
autre classe E
class I {
cela encapsule lacc`
es `
a I et `
a ses membres int y;
int test() {
(diminution des conflits, etc.) return x + y;
}
et permet aux instances de I }
}
dacc
eder aux membres dinstance de E

Exemple : utilisation de listes pour la repr


esentation de familles

nom membres
Dupont prnom prnom prnom

{ Alex
autres
infos
Ba
autres
infos
Carole
autres
infos }
...

L.
c Tichit, 2015-2016 POO et Java 16 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

public class Famille {


String nom;
Vector membres;

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

public class Famille {


String nom;
Vector membres;

public Famille(String n) {
nom = n;
membres = new Vector();
}

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

public class Famille {


String nom;
Vector membres;

public Famille(String n) {
nom = n;
membres = new Vector();
}

public String toString() {


return membres.toString();
}

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

public class Famille {


String nom;
Vector membres;

public Famille(String n) {
nom = n;
membres = new Vector();
}

public String toString() {


return membres.toString();
}

class Individu {
String prenom;
autres informations
eventuelles

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

Individu(String p) {
prenom = p;
public class Famille { membres.add(this);
String nom; }
Vector membres;

public Famille(String n) {
nom = n;
membres = new Vector();
}

public String toString() {


return membres.toString();
}

class Individu {
String prenom;
autres informations
eventuelles

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

Individu(String p) {
prenom = p;
public class Famille { membres.add(this);
String nom; }
Vector membres;
public String toString() {
public Famille(String n) { return prenom + " " + nom ;
nom = n; }
membres = new Vector(); }
}

public String toString() {


return membres.toString();
}

class Individu {
String prenom;
autres informations
eventuelles

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

Individu(String p) {
prenom = p;
public class Famille { membres.add(this);
String nom; }
Vector membres;
public String toString() {
public Famille(String n) { return prenom + " " + nom ;
nom = n; }
membres = new Vector(); }
}
public static void main(String[] args) {
public String toString() { Famille fam = new Famille("Dupont");
return membres.toString();
} Famille.Individu p =
fam.new Individu("Alain");
class Individu { fam.new Individu("Bea");
String prenom; fam.new Individu("Carole");
autres informations
eventuelles
System.out.println(p + " : " + fam);
}
}

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes internes, exemple

Fichier Famille.java

Individu(String p) {
prenom = p;
public class Famille { membres.add(this);
String nom; }
Vector membres;
public String toString() {
public Famille(String n) { return prenom + " " + nom ;
nom = n; }
membres = new Vector(); }
}
public static void main(String[] args) {
public String toString() { Famille fam = new Famille("Dupont");
return membres.toString();
} Famille.Individu p =
fam.new Individu("Alain");
class Individu { fam.new Individu("Bea");
String prenom; fam.new Individu("Carole");
autres informations
eventuelles
System.out.println(p + " : " + fam);
}
}

Affichage :
Alain Dupont : [Alain Dupont, Bea Dupont, Carole Dupont]

L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite

Classes anonymes

situation : on a une classe [resp. interface] et il nous faut une sous-classe [resp.
implementation] destinee `
a avoir une seule instance

L.
c Tichit, 2015-2016 POO et Java 18 / 1
H
eritage, suite

Classes anonymes

situation : on a une classe [resp. interface] et il nous faut une sous-classe [resp.
implementation] destinee `
a avoir une seule instance
exemple (naf) : cr
eer un point qui ne saffiche pas comme les autres :
Point p = new Point(3, 4); saffiche (3, 4)
Point q = new Point(0, 0); saffiche ORIGINE

L.
c Tichit, 2015-2016 POO et Java 18 / 1
H
eritage, suite

Classes anonymes

situation : on a une classe [resp. interface] et il nous faut une sous-classe [resp.
implementation] destinee `
a avoir une seule instance
exemple (naf) : cr
eer un point qui ne saffiche pas comme les autres :
Point p = new Point(3, 4); saffiche (3, 4)
Point q = new Point(0, 0); saffiche ORIGINE
premi`
ere solution : compliquer toString pour tous les points :
class Point {
...
public String toString() {
if (x == 0 && y == 0)
return "ORIGINE";
else
return "(" + x + "," + y + ")";
}
...
}

L.
c Tichit, 2015-2016 POO et Java 18 / 1
H
eritage, suite

Classes anonymes

Plus intelligent, laisser Point comme elle


etait et d
efinir une sous-classe de Point avec un
affichage diff
erent :
class Origine extends Point {
public String toString() {
return "ORIGINE";
}
}

L.
c Tichit, 2015-2016 POO et Java 19 / 1
H
eritage, suite

Classes anonymes

Plus intelligent, laisser Point comme elle


etait et d
efinir une sous-classe de Point avec un
affichage diff
erent :
class Origine extends Point {
public String toString() {
return "ORIGINE";
}
}
emploi :
Point p = new Point(3, 4); saffiche (3, 4)
Point q = new Origine(0, 0); saffiche ORIGINE

(Il aurait
et
e plus coh
erent de donner `
a Origine un constructeur sans argument)

L.
c Tichit, 2015-2016 POO et Java 19 / 1
H
eritage, suite

Classes anonymes

Puisque la classe Origine na quune instance, on peut la remplacer par une classe
anonyme :
...
Point p = new Point(3, 4); saffiche (3, 4)
Point q = new Point(0, 0) {
public String toString() {
return "ORIGINE";
}
}; saffiche ORIGINE
...

L.
c Tichit, 2015-2016 POO et Java 20 / 1
H
eritage, suite

Classes anonymes

Puisque la classe Origine na quune instance, on peut la remplacer par une classe
anonyme :
...
Point p = new Point(3, 4); saffiche (3, 4)
Point q = new Point(0, 0) {
public String toString() {
return "ORIGINE";
}
}; saffiche ORIGINE
...
Cette expression cr
ee
une sous-classe de Point avec la methode toString ainsi redefinie,
une instance de cette sous-classe

L.
c Tichit, 2015-2016 POO et Java 20 / 1
H
eritage, suite

Classes anonymes

Puisque la classe Origine na quune instance, on peut la remplacer par une classe
anonyme :
...
Point p = new Point(3, 4); saffiche (3, 4)
Point q = new Point(0, 0) {
public String toString() {
return "ORIGINE";
}
}; saffiche ORIGINE
...
Cette expression cr
ee
une sous-classe de Point avec la methode toString ainsi redefinie,
une instance de cette sous-classe
Si cela est
ecrit dans une classe Machin, en listant les fichiers on trouvera bien
Machin.java Machin.class Machin$1.class

L.
c Tichit, 2015-2016 POO et Java 20 / 1
H
eritage, suite

Classes anonymes et interfaces

Le m
ecanisme des classes anonymes peut
etre utilis
e aussi pour impl
ementer des interfaces

L.
c Tichit, 2015-2016 POO et Java 21 / 1
H
eritage, suite

Classes anonymes et interfaces

Le m
ecanisme des classes anonymes peut
etre utilis
e aussi pour impl
ementer des interfaces
Exemple : un objet Repondeur est cens
e savoir dire Oui et Non :
interface Repondeur {
void direOui();
void direNon();
}

L.
c Tichit, 2015-2016 POO et Java 21 / 1
H
eritage, suite

Classes anonymes et interfaces

Le m
ecanisme des classes anonymes peut
etre utilis
e aussi pour impl
ementer des interfaces
Exemple : un objet Repondeur est cens
e savoir dire Oui et Non :
interface Repondeur {
void direOui();
void direNon();
}
En voici une impl
ementation adapt
ee `
a la langue allemande :
Repondeur rep = new Repondeur() {
public void direOui() {
System.out.println("Ja");
}
public void direNon() {
System.out.println("Nein");
}
};

L.
c Tichit, 2015-2016 POO et Java 21 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Comment faire quune methode soit un argument dune autre ?

L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Comment faire quune methode soit un argument dune autre ?


Exemple : nous voulons ecrire une methode transfo qui
prend un tableau dobjets T = {T0 , T1 , ...Tn1 } et une fonction
rend le tableau transforme T 0 = {(T0 ), (T1 ), ...(Tn1 )}

L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Comment faire quune methode soit un argument dune autre ?


Exemple : nous voulons ecrire une methode transfo qui
prend un tableau dobjets T = {T0 , T1 , ...Tn1 } et une fonction
rend le tableau transforme T 0 = {(T0 ), (T1 ), ...(Tn1 )}
Le principe de notre fonction est facile `
a trouver :
Object[] transfo(Object[] tab, fonction )
Object[] res = new Object[tab.length];
for (int i = 0; i < tab.length; i++)
res[i] = (tab[i]);
return res;
}

L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Comment faire quune methode soit un argument dune autre ?


Exemple : nous voulons ecrire une methode transfo qui
prend un tableau dobjets T = {T0 , T1 , ...Tn1 } et une fonction
rend le tableau transforme T 0 = {(T0 ), (T1 ), ...(Tn1 )}
Le principe de notre fonction est facile `
a trouver :
Object[] transfo(Object[] tab, fonction )
Object[] res = new Object[tab.length];
for (int i = 0; i < tab.length; i++)
res[i] = (tab[i]);
return res;
}
Le probl`eme est : comment declarer ?

L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Pour representer une fonction (qui ici prend un objet et rend un objet) on introduit
une interface
interface Fonction {
Object appel(Object x);
}

L.
c Tichit, 2015-2016 POO et Java 23 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Pour representer une fonction (qui ici prend un objet et rend un objet) on introduit
une interface
interface Fonction {
Object appel(Object x);
}
nous pouvons alors ecrire notre methode transfo
Object[] transfo(Object[] tab, Fonction phi)
Object[] res = new Object[tab.length];
for (int i = 0; i < tab.length; i++)
res[i] = phi.appel(tab[i]);
return res;
}

L.
c Tichit, 2015-2016 POO et Java 23 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Exemple dutilisation : supposons que nous voulons obtenir le tableau des chanes
representant les elements dun tableau donne.
La fonction sera ici (x) = x.toString()

L.
c Tichit, 2015-2016 POO et Java 24 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Exemple dutilisation : supposons que nous voulons obtenir le tableau des chanes
representant les elements dun tableau donne.
La fonction sera ici (x) = x.toString()
Do`
u la classe
class MaFonction implements Fonction {
public Object appel(Object x) {
return x.toString();
}
}

L.
c Tichit, 2015-2016 POO et Java 24 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

Exemple dutilisation : supposons que nous voulons obtenir le tableau des chanes
representant les elements dun tableau donne.
La fonction sera ici (x) = x.toString()
Do`
u la classe
class MaFonction implements Fonction {
public Object appel(Object x) {
return x.toString();
}
}
et lappel de transfo :
Object[] tab1, tab2;
...
tab2 = transfo(tab1, new MaFonction());
...

L.
c Tichit, 2015-2016 POO et Java 24 / 1
H
eritage, suite

Application : interfaces et objets fonctionnels

La classe MaFonction ne sert qu`


a creer une instance, on pourra tirer profit dune
classe anonyme :
Object[] tab1, tab2;
...
tab2 = transfo(tab1, new Fonction() {
public Object appel(Object x) {
return x.toString();
}
});
...

L.
c Tichit, 2015-2016 POO et Java 25 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)
les  couches basses  detectent les exceptions

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)
les  couches basses  detectent les exceptions
les reactions appropriees sont dans les  couches hautes 

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)
les  couches basses  detectent les exceptions
les reactions appropriees sont dans les  couches hautes 
principe du mecanisme des exceptions :
detection de lanomalie construction dune Exception qui la decrit

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)
les  couches basses  detectent les exceptions
les reactions appropriees sont dans les  couches hautes 
principe du mecanisme des exceptions :
detection de lanomalie construction dune Exception qui la decrit
la methode qui a construit lexception la lance (throw) vers celle qui la
appelee et se termine immediatement,

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)
les  couches basses  detectent les exceptions
les reactions appropriees sont dans les  couches hautes 
principe du mecanisme des exceptions :
detection de lanomalie construction dune Exception qui la decrit
la methode qui a construit lexception la lance (throw) vers celle qui la
appelee et se termine immediatement,
lexception  remonte  de methode appelee en methode appelante, chaque
methode ainsi traversee se terminant immediatement,

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)
les  couches basses  detectent les exceptions
les reactions appropriees sont dans les  couches hautes 
principe du mecanisme des exceptions :
detection de lanomalie construction dune Exception qui la decrit
la methode qui a construit lexception la lance (throw) vers celle qui la
appelee et se termine immediatement,
lexception  remonte  de methode appelee en methode appelante, chaque
methode ainsi traversee se terminant immediatement,
jusqu`a une methode o`u on a prevu dattraper (catch) lexception (et, en
principe, de resoudre probl`eme quelle pose)

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

exception : circonstance rendant la poursuite de lexecution inutile ou impossible


(erreur dans les donnees, defaillance materielle, etc.)
les  couches basses  detectent les exceptions
les reactions appropriees sont dans les  couches hautes 
principe du mecanisme des exceptions :
detection de lanomalie construction dune Exception qui la decrit
la methode qui a construit lexception la lance (throw) vers celle qui la
appelee et se termine immediatement,
lexception  remonte  de methode appelee en methode appelante, chaque
methode ainsi traversee se terminant immediatement,
jusqu`a une methode o`u on a prevu dattraper (catch) lexception (et, en
principe, de resoudre probl`eme quelle pose)
ou, sinon, jusqu`a terminer le programme.

L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite

Exceptions : principe

Deroulement normal dun appel de la methode m


etA

mtB mtD
mtA
mtC

prsent
mtC()

mtB()
mtD()

L.
c Tichit, 2015-2016 POO et Java 27 / 1
H
eritage, suite

Exceptions : principe

Lancement dune exception (non attrapee) dans la methode m


etD

mtB mtD
mtA
mtC
fin du programme

mtC()
mtB()

mtD()

L.
c Tichit, 2015-2016 POO et Java 28 / 1
H
eritage, suite

Exceptions : principe

Lancement dune exception dans m


etD attrapee dans m
etB

mtB mtD
mtA
mtC

try
mtC()
catch
mtB() ...

mtD()

L.
c Tichit, 2015-2016 POO et Java 29 / 1
H
eritage, suite

Exceptions : syntaxe

Syntaxe :
try {
code surveill
e
} catch (typeException1 e) {
code pour  traiter  lexception e de type typeException1
} catch (typeException2 e) {
code pour  traiter  lexception e
} catch (typeException3 e) {
...
} finally {
code `a ex
ecuter dans tous les cas
}

L.
c Tichit, 2015-2016 POO et Java 30 / 1
H
eritage, suite

Exceptions : syntaxe

Syntaxe :
try {
code surveill
e
} catch (typeException1 e) {
code pour  traiter  lexception e de type typeException1
} catch (typeException2 e) {
code pour  traiter  lexception e
} catch (typeException3 e) {
...
} finally {
code `a ex
ecuter dans tous les cas
}
si le code surveill
e se d
eroule normalement, tous les blocs catch sont ignor
es

L.
c Tichit, 2015-2016 POO et Java 30 / 1
H
eritage, suite

Exceptions : syntaxe

Syntaxe :
try {
code surveill
e
} catch (typeException1 e) {
code pour  traiter  lexception e de type typeException1
} catch (typeException2 e) {
code pour  traiter  lexception e
} catch (typeException3 e) {
...
} finally {
code `a ex
ecuter dans tous les cas
}
si le code surveill
e se d
eroule normalement, tous les blocs catch sont ignor
es
si depuis le code surveill
e est lanc
ee une des exceptions guettees (cest-`
a-dire dun des
types typeException1 , typeException2 , etc.) alors le code correspondant est ex ecute et
lexception ne va pas plus loin

L.
c Tichit, 2015-2016 POO et Java 30 / 1
H
eritage, suite

Exceptions : syntaxe

Syntaxe :
try {
code surveill
e
} catch (typeException1 e) {
code pour  traiter  lexception e de type typeException1
} catch (typeException2 e) {
code pour  traiter  lexception e
} catch (typeException3 e) {
...
} finally {
code `a ex
ecuter dans tous les cas
}
si le code surveill
e se d
eroule normalement, tous les blocs catch sont ignor
es
si depuis le code surveill
e est lanc
ee une des exceptions guettees (cest-`
a-dire dun des
types typeException1 , typeException2 , etc.) alors le code correspondant est ex ecute et
lexception ne va pas plus loin
sinon la m
ethode en cours est imm
ediatement termin
ee et lexception  remonte  `
a la
methode appelante

L.
c Tichit, 2015-2016 POO et Java 30 / 1
H
eritage, suite

Exceptions : exemple

Exemple :
boolean travail(String nomFic) {
try {
ouvertureFichier(nomFic);
lectureDonnees();
}

L.
c Tichit, 2015-2016 POO et Java 31 / 1
H
eritage, suite

Exceptions : exemple

Exemple :
boolean travail(String nomFic) {
try {
ouvertureFichier(nomFic);
lectureDonnees();
} catch (FileNotFoundException e) {
System.out.println("Impossible ouvrir " + nomFic);
return false;
}

L.
c Tichit, 2015-2016 POO et Java 31 / 1
H
eritage, suite

Exceptions : exemple

Exemple :
boolean travail(String nomFic) {
try {
ouvertureFichier(nomFic);
lectureDonnees();
} catch (FileNotFoundException e) {
System.out.println("Impossible ouvrir " + nomFic);
return false;
} catch (IOException e) {
System.out.println("Erreur lecture " + e.getMessage());
return false;
}

L.
c Tichit, 2015-2016 POO et Java 31 / 1
H
eritage, suite

Exceptions : exemple

Exemple :
boolean travail(String nomFic) {
try {
ouvertureFichier(nomFic);
lectureDonnees();
} catch (FileNotFoundException e) {
System.out.println("Impossible ouvrir " + nomFic);
return false;
} catch (IOException e) {
System.out.println("Erreur lecture " + e.getMessage());
return false;
}
traitementDesDonnees();
return true;
}

L.
c Tichit, 2015-2016 POO et Java 31 / 1
H
eritage, suite

Declaration des exceptions

Lorsque le code dune m


ethode peut lancer une exception, celle-ci doit
etre
soit attrapee :
void uneMethode(String nom, int n) {
...
try {
code pouvant lancer une exception de type Machin
} catch (Machin e) {
code pour traiter lexception e
}
...
}

L.
c Tichit, 2015-2016 POO et Java 32 / 1
H
eritage, suite

Declaration des exceptions

Lorsque le code dune m


ethode peut lancer une exception, celle-ci doit
etre
soit attrapee :
void uneMethode(String nom, int n) {
...
try {
code pouvant lancer une exception de type Machin
} catch (Machin e) {
code pour traiter lexception e
}
...
}

soit declaree :
ethode(String nom, int n) throws Machin {
void uneM
...
code pouvant lancer une exception de type Machin
...
}

L.
c Tichit, 2015-2016 POO et Java 32 / 1
H
eritage, suite

Lancer ses propres exceptions

lancement dune exception :


...
public Point(int x, int y) throws Exception {
if (x < XMIN || x > XMAX || y < YMIN || y > YMAX)
throw new Exception("Coordonn
ees ill
egales");
this.x = x;
this.y = y;
}
...

L.
c Tichit, 2015-2016 POO et Java 33 / 1
H
eritage, suite

Lancer ses propres exceptions

lancement dune exception :


...
public Point(int x, int y) throws Exception {
if (x < XMIN || x > XMAX || y < YMIN || y > YMAX)
throw new Exception("Coordonn
ees ill
egales");
this.x = x;
this.y = y;
}
...
utilisation de ce constructeur :
...
try {
...
unPoint = new Point(a, b);
...
} catch (Exception e) {
System.out.println("Erreur " + e.getMessage();
System.exit(0);
}
...

L.
c Tichit, 2015-2016 POO et Java 33 / 1
H
eritage, suite

Lancer ses propres exceptions

meilleure mani`
ere (permet des catch plus s
electifs) :
...
public Point(int x, int y) throws CoordException {
if (x < XMIN || x > XMAX || y < YMIN || y > YMAX)
throw new CoordException("x " + x + ", y " + y);
this.x = x;
this.y = y;
}
...

L.
c Tichit, 2015-2016 POO et Java 34 / 1
H
eritage, suite

Lancer ses propres exceptions

meilleure mani`
ere (permet des catch plus s
electifs) :
...
public Point(int x, int y) throws CoordException {
if (x < XMIN || x > XMAX || y < YMIN || y > YMAX)
throw new CoordException("x " + x + ", y " + y);
this.x = x;
this.y = y;
}
...

utilisation :
...
try {
...
unPoint = new Point(a, b);
...
} catch (CoordException e) {
System.out.println(
"Erreur " + e.getMessage();
System.exit(0);
}
...

L.
c Tichit, 2015-2016 POO et Java 34 / 1
H
eritage, suite

Lancer ses propres exceptions

meilleure mani`
ere (permet des catch plus s
electifs) :
...
public Point(int x, int y) throws CoordException {
if (x < XMIN || x > XMAX || y < YMIN || y > YMAX)
throw new CoordException("x " + x + ", y " + y);
this.x = x;
this.y = y;
}
...

utilisation : d
efinition de la classe exception :
...
try {
... class CoordException
unPoint = new Point(a, b); extends Exception {
... public CoordException(String m) {
} catch (CoordException e) { super(m);
System.out.println( }
"Erreur " + e.getMessage(); }
System.exit(0);
}
...

L.
c Tichit, 2015-2016 POO et Java 34 / 1
H
eritage, suite

Exceptions predefinies

Object
Throwable Classe de base de toutes les exceptions.
Error Erreurs graves (dont les exceptions asynchrones)
quil nest pas raisonnable de vouloir intercepter.
Exception Exceptions m eritant detre interceptees et trait
ees
RuntimeException Exceptions pouvant survenir durant le fonctionnement
normal de la machine java :
indice de tableau hors bornes
acc` es `
a un membre dune r ef
erence null
erreur arithm etique, etc.
IOException Exceptions pouvant survenir pendant les op erations
dentree-sortie
Nombreuses autres classes exceptions pr edefinies
Vos propres classes viennent ici

Les exceptions des types Error, RuntimeException et leurs sous-classes sont non contr
ol
ees :
elles nont pas besoin d
etre  n
ecessairement attrap
ees ou d
eclar
ees .

L.
c Tichit, 2015-2016 POO et Java 35 / 1
H
eritage, suite

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles, comme
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.

L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles, comme
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques

L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles, comme
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)

L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles, comme
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis

L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles, comme
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis
forment des ensembles disjoints

L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles, comme
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis
forment des ensembles disjoints

Jusqu`
a Java 1.4
public class JourSemaine {
public static final int LUNDI = 0;
public static final int MARDI = 1;
public static final int MERCREDI = 2;
public static final int JEUDI = 3;
public static final int VENDREDI = 4;
public static final int SAMEDI = 5;
public static final int DIMANCHE = 6;
...
}

L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite

Types enumeres

Le besoin : manipuler des ensembles finis de donn


ees conventionnelles, comme
{ lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc.
Ces donn
ees
sont tr`
es symboliques
sont atomiques (simples, comme des entiers)
forment des ensembles finis
forment des ensembles disjoints

Jusqu`
a Java 1.4
public class JourSemaine { A partir de Java 5
public static final int LUNDI = 0;
public static final int MARDI = 1; public enum JourSemaine {
public static final int MERCREDI = 2; LUNDI, MARDI, MERCREDI, JEUDI,
public static final int JEUDI = 3; VENDREDI, SAMEDI, DIMANCHE
public static final int VENDREDI = 4; }
public static final int SAMEDI = 5;
public static final int DIMANCHE = 6;
...
}

L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"

L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI

L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI
int ordinal() rang (dans lordre de la d
eclaration) :
JourSemaine.MERCREDI.ordinal() 2

L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI
int ordinal() rang (dans lordre de la d
eclaration) :
JourSemaine.MERCREDI.ordinal() 2
static JourSemaine[] values() tableau de toutes les valeurs du type :
JourSemaine.LUNDI ... JourSemaine.DIMANCHE

L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite

Methodes des types enumeres

String toString() exemple : JourSemaine.LUNDI.toString() "LUNDI"


static JourSemaine valueOf(String nom) r
eciproque de la pr
ec
edente :
JourSemaine.valueOf("MARDI") JourSemaine.MARDI
int ordinal() rang (dans lordre de la d
eclaration) :
JourSemaine.MERCREDI.ordinal() 2
static JourSemaine[] values() tableau de toutes les valeurs du type :
JourSemaine.LUNDI ... JourSemaine.DIMANCHE
Exemple : obtention du jour suivant un jour donn
e:
JourSemaine jourSuivant(JourSemaine jour) {
int k = jour.ordinal();
k = (k + 1) % (JourSemaine.values().length);
return JourSemaine.values()[k];
}

L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])

L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
s
ecrit plus simplement
for (Machin e : tableau)
exploiter(e)

L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
s
ecrit plus simplement
for (Machin e : tableau)
exploiter(e)
Si collection est une collection de Machin, la boucle
for (Iterator it = collection.iterator(); it.hasNext(); )
exploiter((Machin)it.next())

L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
s
ecrit plus simplement
for (Machin e : tableau)
exploiter(e)
Si collection est une collection de Machin, la boucle
for (Iterator it = collection.iterator(); it.hasNext(); )
exploiter((Machin)it.next())
s
ecrit plus simplement
for (Machin e : collection)
exploiter(e)

L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite

Boucle for  amelioree 

Si tableau est un tableau de Machin, la boucle


for (int i = 0; i < tableau.length; i++)
exploiter(tableau[i])
s
ecrit plus simplement
for (Machin e : tableau)
exploiter(e)
Si collection est une collection de Machin, la boucle
for (Iterator it = collection.iterator(); it.hasNext(); )
exploiter((Machin)it.next())
s
ecrit plus simplement
for (Machin e : collection)
exploiter(e)
Exemple :
...
double[] t = new double[N];
...
double s = 0;
for (double x : t)
s += x;
...

L.
c Tichit, 2015-2016 POO et Java 38 / 1