La programmation orient´ee objets

et le langage Java

Master BBSG 2
Laurent Tichit
D´epartement Informatique et Interactions, Facult´e des Sciences de Luminy

Cours 4: H´eritage, polymorphisme,
abstraction. Interfaces. Exceptions.

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


eritage, suite

Polymorphisme et m´ethodes virtuelles

Exemple : des classes d´
ecrivant les utilisateurs du parking d’un immeuble
class Usager {
tout v´ehicule se trouvant dans le parking
}

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


eritage, suite

Polymorphisme et m´ethodes virtuelles

Exemple : des classes d´
ecrivant les utilisateurs du parking d’un immeuble
class Usager {
tout v´ehicule se trouvant dans le parking
}
class Habituel extends Usager {
usager fr´equent (paie avec une carte)
}

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

c Tichit. suite Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } class Habituel extends Usager { usager fr´equent (paie avec une carte) } class Abonn´ e extends Habituel { les abonn´ es payent par mois } L. H´ eritage. 2015-2016 POO et Java 2/1 .

suite Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } class Habituel extends Usager { usager fr´equent (paie avec une carte) } class Abonn´ e extends Habituel { les abonn´ es payent par mois } class R´esident extends Abonn´ e { les r´ esidents ne payent pas } L. 2015-2016 POO et Java 2/1 . c Tichit. H´ eritage.

H´ eritage. 2015-2016 POO et Java 2/1 . L. c Tichit. suite Polymorphisme et m´ethodes virtuelles Exemple : des classes d´ ecrivant les utilisateurs du parking d’un immeuble class Usager { tout v´ehicule se trouvant dans le parking } class Habituel extends Usager { usager fr´equent (paie avec une carte) } class Abonn´ e extends Habituel { les abonn´ es payent par mois } class R´esident extends Abonn´ e { les r´ esidents ne payent pas } toutes ces classes d´ efinissent ou red´ efinissent la m´ ethode public void emettreTicket().

.. Résident emettreTicket() . suite Polymorphisme et m´ethodes virtuelles Usager emettreTicket() .. Abonné emettreTicket() ... 2015-2016 POO et Java 3/1 . H´ eritage.. Habituel emettreTicket() . c Tichit... L.

Usager unClient. suite Polymorphisme et m´ethodes virtuelles Usager emettreTicket() avec la d´ eclaration : ... c Tichit. 2015-2016 POO et Java 3/1 .... Résident emettreTicket() ... L.. Habituel (affectation de unClient invisible) emettreTicket() . Abonné emettreTicket() . H´ eritage.

H´ eritage. unClient... Habituel (affectation de unClient invisible) emettreTicket() une expression comme .. Usager unClient. 2015-2016 POO et Java 3/1 .... L. Abonné pose deux questions : emettreTicket() cette expression passe-t-elle la compilation ? . c Tichit..emettreTicket(). suite Polymorphisme et m´ethodes virtuelles Usager emettreTicket() avec la d´ eclaration : . Résident emettreTicket() ..

.emettreTicket(). Abonné pose deux questions : emettreTicket() cette expression passe-t-elle la compilation ? . c Tichit.. Usager unClient. suite Polymorphisme et m´ethodes virtuelles Usager emettreTicket() avec la d´ eclaration : . car emettreTicket() est membre de la classe Usager Résident emettreTicket() .. Oui... L.. Habituel (affectation de unClient invisible) emettreTicket() une expression comme .. 2015-2016 POO et Java 3/1 . H´ eritage.. unClient.

. Habituel (affectation de unClient invisible) emettreTicket() une expression comme . L. Oui. suite Polymorphisme et m´ethodes virtuelles Usager emettreTicket() avec la d´ eclaration : .. H´ eritage... Abonné pose deux questions : emettreTicket() cette expression passe-t-elle la compilation ? .. unClient. car emettreTicket() est membre de la classe Usager peut-on dire quel sera son effet ` a l’ex´ ecution ? Résident emettreTicket() . 2015-2016 POO et Java 3/1 .emettreTicket()... Usager unClient. c Tichit..


eritage, suite

Polymorphisme et m´ethodes 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 l’ex´
ecution ?
Résident
Non, car emettreTicket() ´ etant red´efinie, l’effet d´
epend
emettreTicket() de la valeur effective de unClient au moment de l’appel.
...

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


eritage, suite

Polymorphisme et m´ethodes 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 l’ex´
ecution ?
Résident
Non, car emettreTicket() ´ etant red´efinie, l’effet d´
epend
emettreTicket() de la valeur effective de unClient au moment de l’appel.
...

A retenir : la m´ethode appel´ee dans unObjet.uneMethode(...) est toujours
la plus  sp´ecialis´
ee  possible, c.-`
a-d. la plus proche du type effectif de unObjet

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


eritage, suite

Polymorphisme et m´ethodes virtuelles

L’exemple 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

L. c Tichit. H´ eritage. suite Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n]. 2015-2016 POO et Java 5/1 .

). image[2] = new Rectangle(.)..... c Tichit. L.... 2015-2016 POO et Java 5/1 . image[1] = new Cercle(.). suite Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n].. Construction image[0] = new Triangle(. . H´ eritage.

seDessiner(). i < n.).. H´ eritage.. image[2] = new Rectangle(..).). suite Polymorphisme et m´ethodes virtuelles Une image (complexe) est un tableau d’objets graphiques D´eclaration ObjetGraphique[] image = new ObjetGraphique[n].. Affichage for (int i = 0... 2015-2016 POO et Java 5/1 . L. . c Tichit.. i++) image[i]. Construction image[0] = new Triangle(. image[1] = new Cercle(..

. og = new Triangle(. c Tichit.. H´ eritage.....seDessiner().). og. suite M´ethodes abstraites Reprenons l’exemple  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. // par exemple . 2015-2016 POO et Java 6/1 . utilisation ObjetGraphique og. L..

2015-2016 POO et Java 6/1 . og = new Triangle(..out.. } } class Triangle extends ObjetGraphique { Triangle Cercle public void seDessiner() { op´ erations pour dessiner un triangle } } Rectangle etc. // par exemple .. H´ eritage. og. utilisation ObjetGraphique og. suite M´ethodes abstraites Reprenons l’exemple  magique  : class ObjetGraphique { Objet public void seDessiner() { Graphique System.).seDessiner(). L.. c Tichit.println("ERREUR"). ...

println("ERREUR").seDessiner(). } } class Triangle extends ObjetGraphique { Triangle Cercle public void seDessiner() { op´ erations pour dessiner un triangle } } Rectangle etc. quelle erreur traduirait l’affichage de  ERREUR  ? L.). // par exemple . og = new Triangle(.. og.. utilisation ObjetGraphique og.out. 2015-2016 POO et Java 6/1 .... suite M´ethodes abstraites Reprenons l’exemple  magique  : class ObjetGraphique { Objet public void seDessiner() { Graphique System. H´ eritage. . c Tichit..

.. c Tichit. suite M´ethodes abstraites Reprenons l’exemple  magique  : class ObjetGraphique { Objet public void seDessiner() { Graphique System. H´ eritage. . og.. 2015-2016 POO et Java 6/1 .out.).seDessiner().println("ERREUR"). quelle erreur traduirait l’affichage de  ERREUR  ? ne serait-il pas mieux de la signaler ` a la compilation ? L.. // par exemple . utilisation ObjetGraphique og. } } class Triangle extends ObjetGraphique { Triangle Cercle public void seDessiner() { op´ erations pour dessiner un triangle } } Rectangle etc... og = new Triangle(.

2015-2016 POO et Java 7/1 .. H´ eritage. . c Tichit.alors qu’elle ne pourra ˆetre d´ efinie que dans les sous-classes L. suite M´ethodes abstraites m´ ethode abstraite = m´ ethode  promise  : une m´ ethode qu’il est n´ ecessaire de d´ eclarer dans une classe....

. 2015-2016 POO et Java 7/1 .. L.. . H´ eritage. suite M´ethodes abstraites m´ ethode abstraite = m´ ethode  promise  : une m´ ethode qu’il est n´ ecessaire de d´ eclarer dans une classe.alors qu’elle 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().. c Tichit.

. Triangle Cercle Rectangle seDessiner() { . suite M´ethodes abstraites m´ ethode abstraite = m´ ethode  promise  : une m´ ethode qu’il est n´ ecessaire de d´ eclarer dans une classe. L.... . . 2015-2016 POO et Java 7/1 . } seDessiner() { .. ....... ObjetGraphique abstract seDessiner().. H´ eritage.. } .. } seDessiner() { ..alors qu’elle 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()... c Tichit. ..

2015-2016 POO et Java 8/1 . c Tichit. H´ eritage. suite Classe abstraite id´ ee : une classe qui repr´ esente seulement une partie d’autres classes techniquement : une classe qui ne doit pas avoir d’instance L.

public abstract void seDessiner(). Triangle Cercle Rectangle seDessiner() { .. H´ eritage. suite Classe abstraite id´ ee : une classe qui repr´ esente seulement une partie d’autres classes techniquement : une classe qui ne doit pas avoir d’instance il est obligatoire de d´ eclarer abstraite une classe qui contient des m´ ethodes abstraites public abstract class ObjetGraphique { ... c Tichit. } seDessiner() { ......... L. } . .. 2015-2016 POO et Java 8/1 . . ... } seDessiner() { . } ObjetGraphique l'italique indique une classe abstraite abstract seDessiner()..... .

} L.. 2015-2016 POO et Java 9/1 . suite Une erreur trompeuse comprendre l’erreur  cette classe doit ˆ etre d´ eclar´ ee abstraite  public abstract class ObjetGraphique { public abstract void seDessiner(). H´ eritage. c Tichit.. .

} public class Rectangle extends ObjetGraphique { public void sedessiner() { code produisant le dessin d’un rectangle } .. suite Une erreur trompeuse comprendre l’erreur  cette classe doit ˆ etre d´ eclar´ ee abstraite  public abstract class ObjetGraphique { public abstract void seDessiner()... H´ eritage. 2015-2016 POO et Java 9/1 . } L. .. c Tichit.

suite Une erreur trompeuse comprendre l’erreur  cette classe doit ˆ etre d´ eclar´ ee abstraite  public abstract class ObjetGraphique { public abstract void seDessiner().. .. } 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 . } public class Rectangle extends ObjetGraphique { public void sedessiner() { code produisant le dessin d’un rectangle } . H´ eritage..

} public class Rectangle extends ObjetGraphique { public void sedessiner() { code produisant le dessin d’un 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 n’est pas de qualifier abstract la classe Rectangle.mais d’y red´ efinir la m´ ethode promise seDessiner L. 2015-2016 POO et Java 9/1 .. c Tichit. H´ eritage. suite Une erreur trompeuse comprendre l’erreur  cette classe doit ˆ etre d´ eclar´ ee abstraite  public abstract class ObjetGraphique { public abstract void seDessiner().... ....

suite Classes et m´ethodes abstraites R´ecapitulons : une m´ethode (ordinaire) repr´esente un service :  voici comment mes instances effectuent un certain traitement  L. c Tichit. H´ eritage. 2015-2016 POO et Java 10 / 1 .

suite Classes et m´ethodes abstraites R´ecapitulons : une m´ethode (ordinaire) repr´esente un service :  voici comment mes instances effectuent un certain traitement  une m´ethode abstraite repr´esente un engagement :  mes instances sauront effectuer un certain traitement. c Tichit. mais on dira plus tard comment (quand on aura plus de d´etails)  L. 2015-2016 POO et Java 10 / 1 . H´ eritage.

2015-2016 POO et Java 10 / 1 . c Tichit. mais on dira plus tard comment (quand on aura plus de d´etails)  une classe abstraite m´elange des services rendus et des promesses ` a tenir : ⇒ Avant d’en cr´eer des instances il faudra d´efinir des sous-classes o` u toutes les m´ethodes abstraites sont d´efinies L. suite Classes et m´ethodes abstraites R´ecapitulons : une m´ethode (ordinaire) repr´esente un service :  voici comment mes instances effectuent un certain traitement  une m´ethode abstraite repr´esente un engagement :  mes instances sauront effectuer un certain traitement. H´ eritage.

Exemple : Fichier ObjetGraphique.java public abstract class ObjetGraphique { private Color couleur. public abstract void seDessiner(). L. c Tichit. H´ eritage. suite Classes et m´ethodes abstraites Ce n’est pas parce qu’une m´ethode est abstraite qu’on ne peut pas l’appeler imm´ediatement. 2015-2016 POO et Java 11 / 1 .

public abstract void seDessiner(). suite Classes et m´ethodes abstraites Ce n’est pas parce qu’une m´ethode est abstraite qu’on ne peut pas l’appeler imm´ediatement. H´ eritage. 2015-2016 POO et Java 11 / 1 . } . seDessiner(). c Tichit. couleur = couleurOpposee(couleur). } L. Exemple : Fichier ObjetGraphique...java public abstract class ObjetGraphique { private Color couleur. public void sEffacer() { couleur = couleurOpposee(couleur).

-` a-d. 2015-2016 POO et Java 12 / 1 . faite de m´ethodes publiques abstraites L. c Tichit. H´ eritage. c. suite Interface une interface est une classe  compl`etement  abstraite.


eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`
a-d. faite de
m´ethodes publiques abstraites
variables publiques statiques finales (des constantes de classe)

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


eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`
a-d. faite de
m´ethodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les m´ethodes)
ou public static final (les variables)

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


eritage, suite

Interface

une interface est une classe  compl`etement  abstraite, c.-`
a-d. faite de
m´ethodes publiques abstraites
variables publiques statiques finales (des constantes de classe)
tous ces membres sont implicitement public abstract (les m´ethodes)
ou public static final (les variables)
une interface est donc une liste de promesses
(ou : cahier des charges, sp´ecification, etc.)

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

H´ eritage. c Tichit. c. 2015-2016 POO et Java 12 / 1 . etc. suite Interface une interface est une classe  compl`etement  abstraite.) lorsqu’une classe  tient  les promesses d’une interface on dit que la classe impl´emente l’interface L.-` a-d. sp´ecification. faite de m´ethodes publiques abstraites variables publiques statiques finales (des constantes de classe) tous ces membres sont implicitement public abstract (les m´ethodes) ou public static final (les variables) une interface est donc une liste de promesses (ou : cahier des charges.

sp´ecification. H´ eritage. etc.-` a-d. 2015-2016 POO et Java 12 / 1 .) lorsqu’une classe  tient  les promesses d’une interface on dit que la classe impl´emente l’interface une classe peut impl´ementer plusieurs interfaces L. suite Interface une interface est une classe  compl`etement  abstraite. c. c Tichit. faite de m´ethodes publiques abstraites variables publiques statiques finales (des constantes de classe) tous ces membres sont implicitement public abstract (les m´ethodes) ou public static final (les variables) une interface est donc une liste de promesses (ou : cahier des charges.

c.) lorsqu’une classe  tient  les promesses d’une interface on dit que la classe impl´emente l’interface une classe peut impl´ementer plusieurs interfaces les interfaces peuvent h´eriter les unes des autres L. c Tichit. H´ eritage. 2015-2016 POO et Java 12 / 1 . faite de m´ethodes publiques abstraites variables publiques statiques finales (des constantes de classe) tous ces membres sont implicitement public abstract (les m´ethodes) ou public static final (les variables) une interface est donc une liste de promesses (ou : cahier des charges. sp´ecification. suite Interface une interface est une classe  compl`etement  abstraite.-` a-d. etc.

) lorsqu’une classe  tient  les promesses d’une interface on dit que la classe impl´emente l’interface une classe peut impl´ementer plusieurs interfaces les interfaces peuvent h´eriter les unes des autres la relation d’h´eritage ( est une sorte de ) se note entre deux classes ou deux interfaces. suite Interface une interface est une classe  compl`etement  abstraite. H´ eritage. c. extends entre une classe et une interface.-` a-d. faite de m´ethodes publiques abstraites variables publiques statiques finales (des constantes de classe) tous ces membres sont implicitement public abstract (les m´ethodes) ou public static final (les variables) une interface est donc une liste de promesses (ou : cahier des charges. etc. 2015-2016 POO et Java 12 / 1 . sp´ecification. c Tichit. implements L.

c Tichit. H´ eritage. Object depiler(). suite Interface. 2015-2016 POO et Java 13 / 1 . un exemple standard D´efinition d’une interface Pile (en supposant que la biblioth` eque Java n’offre rien de tel – ce qui est faux) : interface Pile { boolean estVide(). } L. void empiler(Object x).

Object depiler().estVide() ) exploitation( unePile. c Tichit....empiler( acquisition(.. for (int i = 0. } L. i < n. suite Interface. } D` es qu’on a une interface on peut programmer avec : void uneApplication(Pile unePile) { . un exemple standard D´efinition d’une interface Pile (en supposant que la biblioth` eque Java n’offre rien de tel – ce qui est faux) : interface Pile { boolean estVide().) ) . 2015-2016 POO et Java 13 / 1 ... i++) unePile.depiler() ) . H´ eritage... void empiler(Object x). while ( ! unePile.

} } L. } public Object depiler() { return tab[--n]. int n = 0. public boolean estVide() { return n == 0. suite Interface. 2015-2016 POO et Java 14 / 1 . c Tichit. un exemple standard En revanche. on ne pourra pas avoir des objets Pile tant qu’on n’aura pas ´ ecrit une classe impl´ ementant l’interface Pile : class PileTab implements Pile { Objet[] tab = new Object[100]. } public void empiler(Object val) { tab[n++] = val. H´ eritage.

. public boolean estVide() { return n == 0. H´ eritage. uneApplication(unePile). } public Object depiler() { return tab[--n]. . } } Et voici enfin l’appel de uneApplication : public static void main(String[] args) { Pile unePile = new PileTab(). .. } L. 2015-2016 POO et Java 14 / 1 .. un exemple standard En revanche. suite Interface. } public void empiler(Object val) { tab[n++] = val. int n = 0.. on ne pourra pas avoir des objets Pile tant qu’on n’aura pas ´ ecrit une classe impl´ ementant l’interface Pile : class PileTab implements Pile { Objet[] tab = new Object[100]. c Tichit.

H´ eritage. c Tichit. suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } L. 2015-2016 POO et Java 15 / 1 .

suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } interface ObjectGraphique { void seDessiner(). H´ eritage. 2015-2016 POO et Java 15 / 1 . c Tichit. } L.

). } interface Persistant { void sauver(. suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } interface ObjectGraphique { void seDessiner()... 2015-2016 POO et Java 15 / 1 .. } L. H´ eritage.. void restaurer(. c Tichit.).

ObjectGraphique. c Tichit. } interface Persistant { void sauver(.. H´ eritage. 2015-2016 POO et Java 15 / 1 .)... } class MonBidule implements Pile.). Persistant { L. suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } interface ObjectGraphique { void seDessiner(). void restaurer(..

. c Tichit. Persistant { m´ethodes impos´ ees par l’interface Pile L..). void restaurer(.. suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } interface ObjectGraphique { void seDessiner().). } class MonBidule implements Pile. } interface Persistant { void sauver(. 2015-2016 POO et Java 15 / 1 . H´ eritage. ObjectGraphique..

c Tichit. } class MonBidule implements Pile..). Persistant { m´ethodes impos´ ees par l’interface Pile m´ethodes impos´ ees par l’interface ObjectGraphique L. void restaurer(. ObjectGraphique... } interface Persistant { void sauver(. H´ eritage. suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } interface ObjectGraphique { void seDessiner().. 2015-2016 POO et Java 15 / 1 .).

c Tichit.)... suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } interface ObjectGraphique { void seDessiner(). ObjectGraphique. } interface Persistant { void sauver(.. void restaurer(.). 2015-2016 POO et Java 15 / 1 . H´ eritage. } class MonBidule implements Pile.. Persistant { m´ethodes impos´ ees par l’interface Pile m´ethodes impos´ ees par l’interface ObjectGraphique m´ethodes impos´ ees par l’interface Persistant L.

suite Interfaces et h´eritage multiple Une classe peut impl´ementer plusieurs interfaces : interface Pile { (voir pages pr´ ec´ edentes) } interface ObjectGraphique { void seDessiner(). } class MonBidule implements Pile. } interface Persistant { void sauver(.). H´ eritage. Persistant { m´ethodes impos´ees par l’interface Pile m´ethodes impos´ees par l’interface ObjectGraphique m´ethodes impos´ees par l’interface Persistant membres sp´ecifiques } L... void restaurer(. c Tichit...). 2015-2016 POO et Java 15 / 1 . ObjectGraphique.

suite Classes internes une classe I peut ˆ etre d´ efinie ` a l’int´ erieur d’une autre classe E L. H´ eritage. 2015-2016 POO et Java 16 / 1 . c Tichit.

H´ eritage. c Tichit. 2015-2016 POO et Java 16 / 1 . suite Classes internes une classe I peut ˆ etre d´ efinie ` a l’int´ erieur d’une autre classe E cela encapsule l’acc` es ` a I et ` a ses membres (diminution des conflits. etc.) L.

suite Classes internes une classe I peut ˆ etre d´ efinie ` a l’int´ erieur d’une autre classe E cela encapsule l’acc` es ` a I et ` a ses membres (diminution des conflits. H´ eritage.) et permet aux instances de I d’acc´ eder aux membres d’instance de E L. c Tichit. 2015-2016 POO et Java 16 / 1 . etc.

) return x + y. int test() { (diminution des conflits. 2015-2016 POO et Java 16 / 1 . etc. } et permet aux instances de I } } d’acc´ eder aux membres d’instance de E L. H´ eritage. suite Classes internes class E { une classe I peut ˆ etre d´ efinie ` a l’int´ erieur d’une int x. autre classe E class I { cela encapsule l’acc` es ` a I et ` a ses membres int y. c Tichit.


eritage, suite

Classes internes

class E {
une classe I peut ˆ
etre d´
efinie `
a l’int´
erieur d’une int x;
autre classe E
class I {
cela encapsule l’acc`
es `
a I et `
a ses membres int y;
int test() {
(diminution des conflits, etc.) return x + y;
}
et permet aux instances de I }
}
d’acc´
eder aux membres d’instance de E

Exemple : utilisation de listes pour la repr´
esentation de familles

nom membres
Dupont prénom prénom prénom

{ Alex
autres
infos
Béa
autres
infos
Carole
autres
infos }
...

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


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


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

Vector membres. exemple Fichier Famille. } L.toString(). 2015-2016 POO et Java 17 / 1 . c Tichit.java public class Famille { String nom. public Famille(String n) { nom = n. suite Classes internes. membres = new Vector(). } public String toString() { return membres. H´ eritage.

Vector membres.java public class Famille { String nom. autres informations ´ eventuelles L. exemple Fichier Famille. } public String toString() { return membres. public Famille(String n) { nom = n. H´ eritage. c Tichit. suite Classes internes. 2015-2016 POO et Java 17 / 1 . membres = new Vector().toString(). } class Individu { String prenom.

String nom. public class Famille { membres. } class Individu { String prenom. H´ eritage. suite Classes internes.add(this). exemple Fichier Famille. c Tichit. } Vector membres. autres informations ´ eventuelles L.toString(). } public String toString() { return membres. public Famille(String n) { nom = n. membres = new Vector().java Individu(String p) { prenom = p. 2015-2016 POO et Java 17 / 1 .

} Vector membres. H´ eritage.add(this).java Individu(String p) { prenom = p. } membres = new Vector(). } } public String toString() { return membres. suite Classes internes. 2015-2016 POO et Java 17 / 1 . } class Individu { String prenom. c Tichit. nom = n. public String toString() { public Famille(String n) { return prenom + " " + nom .toString(). exemple Fichier Famille. public class Famille { membres. String nom. autres informations ´ eventuelles L.

H´ eritage.toString(). String nom.new Individu("Bea"). } Vector membres. return membres.new Individu("Carole"). fam. } } public static void main(String[] args) { public String toString() { Famille fam = new Famille("Dupont").out. exemple Fichier Famille. 2015-2016 POO et Java 17 / 1 . } Famille. class Individu { fam. } membres = new Vector().println(p + " : " + fam). suite Classes internes. } } L. String prenom. autres informations ´ eventuelles System.new Individu("Alain").add(this).Individu p = fam. public class Famille { membres. public String toString() { public Famille(String n) { return prenom + " " + nom . c Tichit. nom = n.java Individu(String p) { prenom = p.

Carole Dupont] L. } membres = new Vector().add(this). } } public static void main(String[] args) { public String toString() { Famille fam = new Famille("Dupont"). String nom. return membres.Individu p = fam.java Individu(String p) { prenom = p. } Famille. String prenom.println(p + " : " + fam). nom = n. exemple Fichier Famille. public class Famille { membres. suite Classes internes. fam.out. } Vector membres. 2015-2016 POO et Java 17 / 1 . } } Affichage : Alain Dupont : [Alain Dupont. autres informations ´ eventuelles System. H´ eritage. c Tichit.new Individu("Carole"). public String toString() { public Famille(String n) { return prenom + " " + nom .new Individu("Alain").new Individu("Bea"). Bea Dupont. class Individu { fam.toString().

impl´ementation] destin´ee ` a avoir une seule instance L. H´ eritage. c Tichit. suite Classes anonymes situation : on a une classe [resp. 2015-2016 POO et Java 18 / 1 . interface] et il nous faut une sous-classe [resp.

suite Classes anonymes situation : on a une classe [resp. H´ eritage. 4) Point q = new Point(0. 0). s’affiche (3. impl´ementation] destin´ee ` a avoir une seule instance exemple (na¨ıf) : cr´ eer un point qui ne s’affiche pas comme les autres : Point p = new Point(3. s’affiche ORIGINE L. interface] et il nous faut une sous-classe [resp. 4). c Tichit. 2015-2016 POO et Java 18 / 1 .

4) Point q = new Point(0.. c Tichit." + y + ")". 4).. impl´ementation] destin´ee ` a avoir une seule instance exemple (na¨ıf) : cr´ eer un point qui ne s’affiche pas comme les autres : Point p = new Point(3.. s’affiche ORIGINE premi` ere solution : compliquer toString pour tous les points : class Point { . suite Classes anonymes situation : on a une classe [resp. H´ eritage. } L. s’affiche (3. interface] et il nous faut une sous-classe [resp. public String toString() { if (x == 0 && y == 0) return "ORIGINE".. else return "(" + x + ". 2015-2016 POO et Java 18 / 1 . } . 0).

2015-2016 POO et Java 19 / 1 . 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". H´ eritage. c Tichit. } } L.

4) Point q = new Origine(0. suite Classes anonymes Plus intelligent. 2015-2016 POO et Java 19 / 1 . s’affiche (3. H´ eritage. c Tichit. s’affiche ORIGINE (Il aurait ´ et´ e plus coh´ erent de donner ` a Origine un constructeur sans argument) L. } } emploi : Point p = new Point(3. 4). 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". 0).

4) Point q = new Point(0. 2015-2016 POO et Java 20 / 1 . s’affiche ORIGINE . H´ eritage. L. suite Classes anonymes Puisque la classe Origine n’a qu’une instance. on peut la remplacer par une classe anonyme : . s’affiche (3. c Tichit.. 4).. 0) { public String toString() { return "ORIGINE". } }. Point p = new Point(3...

4).. suite Classes anonymes Puisque la classe Origine n’a qu’une instance. 0) { public String toString() { return "ORIGINE". Point p = new Point(3.. Cette expression cr´ ee une sous-classe de Point avec la m´ethode toString ainsi red´efinie. 2015-2016 POO et Java 20 / 1 .. une instance de cette sous-classe L. } }. on peut la remplacer par une classe anonyme : . s’affiche ORIGINE . 4) Point q = new Point(0.. H´ eritage. s’affiche (3. c Tichit.

c Tichit. 2015-2016 POO et Java 20 / 1 . 4). s’affiche ORIGINE . suite Classes anonymes Puisque la classe Origine n’a qu’une instance. en listant les fichiers on trouvera bien Machin... } }. s’affiche (3. Cette expression cr´ ee une sous-classe de Point avec la m´ethode toString ainsi red´efinie.. 4) Point q = new Point(0.java Machin. une instance de cette sous-classe Si cela est ´ ecrit dans une classe Machin.. Point p = new Point(3.class Machin$1. H´ eritage. 0) { public String toString() { return "ORIGINE".class L. on peut la remplacer par une classe anonyme : .

c Tichit. H´ eritage. suite Classes anonymes et interfaces Le m´ ecanisme des classes anonymes peut ˆ etre utilis´ e aussi pour impl´ ementer des interfaces L. 2015-2016 POO et Java 21 / 1 .

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(). } L. c Tichit. 2015-2016 POO et Java 21 / 1 . void direNon(). H´ eritage.

void direNon(). H´ eritage. 2015-2016 POO et Java 21 / 1 .println("Ja").println("Nein"). 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(). } En voici une impl´ ementation adapt´ ee ` a la langue allemande : Repondeur rep = new Repondeur() { public void direOui() { System.out. c Tichit. } }. L.out. } public void direNon() { System.

c Tichit. suite Application : interfaces et objets fonctionnels Comment faire qu’une m´ethode soit un argument d’une autre ? L. 2015-2016 POO et Java 22 / 1 . H´ eritage.

Tn−1 } et une fonction ϕ rend le tableau transform´e T 0 = {ϕ(T0 ). 2015-2016 POO et Java 22 / 1 .. . H´ eritage. . c Tichit..ϕ(Tn−1 )} L. T1 . suite Application : interfaces et objets fonctionnels Comment faire qu’une m´ethode soit un argument d’une autre ? Exemple : nous voulons ´ecrire une m´ethode transfo qui prend un tableau d’objets T = {T0 .. ϕ(T1 )..

. return res. suite Application : interfaces et objets fonctionnels Comment faire qu’une m´ethode soit un argument d’une autre ? Exemple : nous voulons ´ecrire une m´ethode transfo qui prend un tableau d’objets T = {T0 .length..Tn−1 } et une fonction ϕ rend le tableau transform´e T 0 = {ϕ(T0 ).. T1 . i++) res[i] = ϕ(tab[i]). } L. .ϕ(Tn−1 )} Le principe de notre fonction est facile ` a trouver : Object[] transfo(Object[] tab. c Tichit. 2015-2016 POO et Java 22 / 1 . fonction ϕ) Object[] res = new Object[tab.length].. for (int i = 0.. ϕ(T1 ). H´ eritage. i < tab.

suite Application : interfaces et objets fonctionnels Comment faire qu’une m´ethode soit un argument d’une autre ? Exemple : nous voulons ´ecrire une m´ethode transfo qui prend un tableau d’objets T = {T0 ... . . c Tichit. } Le probl`eme est : comment d´eclarer ϕ ? L. fonction ϕ) Object[] res = new Object[tab. i < tab. i++) res[i] = ϕ(tab[i]).length]. 2015-2016 POO et Java 22 / 1 . ϕ(T1 ). T1 . H´ eritage..ϕ(Tn−1 )} Le principe de notre fonction est facile ` a trouver : Object[] transfo(Object[] tab.length. return res. for (int i = 0..Tn−1 } et une fonction ϕ rend le tableau transform´e T 0 = {ϕ(T0 ).

c Tichit. H´ eritage. 2015-2016 POO et Java 23 / 1 . } L. suite Application : interfaces et objets fonctionnels Pour repr´esenter une fonction (qui ici prend un objet et rend un objet) on introduit une interface interface Fonction { Object appel(Object x).

2015-2016 POO et Java 23 / 1 . c Tichit. } L. i < tab. for (int i = 0. i++) res[i] = phi. return res.appel(tab[i]). Fonction phi) Object[] res = new Object[tab.length. } nous pouvons alors ´ecrire notre m´ethode transfo Object[] transfo(Object[] tab.length]. H´ eritage. suite Application : interfaces et objets fonctionnels Pour repr´esenter une fonction (qui ici prend un objet et rend un objet) on introduit une interface interface Fonction { Object appel(Object x).

2015-2016 POO et Java 24 / 1 . H´ eritage. c Tichit. La fonction sera ici ϕ(x) = x.toString() L. suite Application : interfaces et objets fonctionnels Exemple d’utilisation : supposons que nous voulons obtenir le tableau des chaˆınes repr´esentant les ´el´ements d’un tableau donn´e.

} } L. 2015-2016 POO et Java 24 / 1 .toString() D’o` u la classe class MaFonction implements Fonction { public Object appel(Object x) { return x. La fonction sera ici ϕ(x) = x. suite Application : interfaces et objets fonctionnels Exemple d’utilisation : supposons que nous voulons obtenir le tableau des chaˆınes repr´esentant les ´el´ements d’un tableau donn´e. c Tichit.toString(). H´ eritage.

. .toString(). La fonction sera ici ϕ(x) = x..toString() D’o` u la classe class MaFonction implements Fonction { public Object appel(Object x) { return x. L.. tab2.. suite Application : interfaces et objets fonctionnels Exemple d’utilisation : supposons que nous voulons obtenir le tableau des chaˆınes repr´esentant les ´el´ements d’un tableau donn´e. tab2 = transfo(tab1. } } et l’appel de transfo : Object[] tab1. c Tichit. H´ eritage. . 2015-2016 POO et Java 24 / 1 . new MaFonction()).

tab2 = transfo(tab1. new Fonction() { public Object appel(Object x) { return x. 2015-2016 POO et Java 25 / 1 . L. } }).toString(). . c Tichit. on pourra tirer profit d’une classe anonyme : Object[] tab1. tab2.. .. H´ eritage. suite Application : interfaces et objets fonctionnels La classe MaFonction ne sert qu’` a cr´eer une instance...

2015-2016 POO et Java 26 / 1 . H´ eritage. c Tichit. d´efaillance mat´erielle. suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees.) L. etc.

suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees. d´efaillance mat´erielle. 2015-2016 POO et Java 26 / 1 . etc. c Tichit.) les  couches basses  d´etectent les exceptions L. H´ eritage.

) les  couches basses  d´etectent les exceptions les r´eactions appropri´ees sont dans les  couches hautes  L. suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees. 2015-2016 POO et Java 26 / 1 . H´ eritage. etc. c Tichit. d´efaillance mat´erielle.

suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees. H´ eritage. 2015-2016 POO et Java 26 / 1 . c Tichit.) les  couches basses  d´etectent les exceptions les r´eactions appropri´ees sont dans les  couches hautes  principe du m´ecanisme des exceptions : d´etection de l’anomalie ⇒ construction d’une Exception qui la d´ecrit L. d´efaillance mat´erielle. etc.

L. H´ eritage. c Tichit. d´efaillance mat´erielle. suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees.) les  couches basses  d´etectent les exceptions les r´eactions appropri´ees sont dans les  couches hautes  principe du m´ecanisme des exceptions : d´etection de l’anomalie ⇒ construction d’une Exception qui la d´ecrit la m´ethode qui a construit l’exception la lance (throw) vers celle qui l’a appel´ee et se termine imm´ediatement. 2015-2016 POO et Java 26 / 1 . etc.

c Tichit. 2015-2016 POO et Java 26 / 1 . H´ eritage. l’exception  remonte  de m´ethode appel´ee en m´ethode appelante. L. chaque m´ethode ainsi travers´ee se terminant imm´ediatement. suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees. etc.) les  couches basses  d´etectent les exceptions les r´eactions appropri´ees sont dans les  couches hautes  principe du m´ecanisme des exceptions : d´etection de l’anomalie ⇒ construction d’une Exception qui la d´ecrit la m´ethode qui a construit l’exception la lance (throw) vers celle qui l’a appel´ee et se termine imm´ediatement. d´efaillance mat´erielle.

2015-2016 POO et Java 26 / 1 . en principe. etc. jusqu’`a une m´ethode o`u on a pr´evu d’attraper (catch) l’exception (et. l’exception  remonte  de m´ethode appel´ee en m´ethode appelante. c Tichit. chaque m´ethode ainsi travers´ee se terminant imm´ediatement.) les  couches basses  d´etectent les exceptions les r´eactions appropri´ees sont dans les  couches hautes  principe du m´ecanisme des exceptions : d´etection de l’anomalie ⇒ construction d’une Exception qui la d´ecrit la m´ethode qui a construit l’exception la lance (throw) vers celle qui l’a appel´ee et se termine imm´ediatement. de r´esoudre probl`eme qu’elle pose) L. d´efaillance mat´erielle. H´ eritage. suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees.

H´ eritage. c Tichit. jusqu’`a une m´ethode o`u on a pr´evu d’attraper (catch) l’exception (et. d´efaillance mat´erielle. en principe. chaque m´ethode ainsi travers´ee se terminant imm´ediatement. etc. 2015-2016 POO et Java 26 / 1 .) les  couches basses  d´etectent les exceptions les r´eactions appropri´ees sont dans les  couches hautes  principe du m´ecanisme des exceptions : d´etection de l’anomalie ⇒ construction d’une Exception qui la d´ecrit la m´ethode qui a construit l’exception la lance (throw) vers celle qui l’a appel´ee et se termine imm´ediatement. L. de r´esoudre probl`eme qu’elle pose) ou. sinon. l’exception  remonte  de m´ethode appel´ee en m´ethode appelante. jusqu’`a terminer le programme. suite Exceptions : principe exception : circonstance rendant la poursuite de l’ex´ecution inutile ou impossible (erreur dans les donn´ees.

c Tichit. H´ eritage. 2015-2016 POO et Java 27 / 1 . suite Exceptions : principe D´eroulement normal d’un appel de la m´ethode m´ etA métB métD métA métC présent métC() métB() métD() L.

H´ eritage. c Tichit. suite Exceptions : principe Lancement d’une exception (non attrap´ee) dans la m´ethode m´ etD métB métD métA métC fin du programme métC() métB() métD() L. 2015-2016 POO et Java 28 / 1 .

métD() L. c Tichit.. suite Exceptions : principe Lancement d’une exception dans m´ etD attrap´ee dans m´ etB métB métD métA métC try métC() catch métB() . 2015-2016 POO et Java 29 / 1 .. H´ eritage.

. H´ eritage. suite Exceptions : syntaxe Syntaxe : try { code surveill´ e } catch (typeException1 e) { code pour  traiter  l’exception e de type typeException1 } catch (typeException2 e) { code pour  traiter  l’exception e } catch (typeException3 e) { . 2015-2016 POO et Java 30 / 1 . } finally { code `a ex´ ecuter dans tous les cas } L. c Tichit..

c Tichit. tous les blocs catch sont ignor´ es L. H´ eritage. 2015-2016 POO et Java 30 / 1 .. } finally { code `a ex´ ecuter dans tous les cas } si le code surveill´ e se d´ eroule normalement. suite Exceptions : syntaxe Syntaxe : try { code surveill´ e } catch (typeException1 e) { code pour  traiter  l’exception e de type typeException1 } catch (typeException2 e) { code pour  traiter  l’exception e } catch (typeException3 e) { ..

tous les blocs catch sont ignor´ es si depuis le code surveill´ e est lanc´ ee une des exceptions guett´ees (c’est-` a-dire d’un des types typeException1 .) alors le code correspondant est ex´ ecut´e et l’exception ne va pas plus loin L.. etc. typeException2 . 2015-2016 POO et Java 30 / 1 . } finally { code `a ex´ ecuter dans tous les cas } si le code surveill´ e se d´ eroule normalement.. suite Exceptions : syntaxe Syntaxe : try { code surveill´ e } catch (typeException1 e) { code pour  traiter  l’exception e de type typeException1 } catch (typeException2 e) { code pour  traiter  l’exception e } catch (typeException3 e) { . H´ eritage. c Tichit.

. etc. c Tichit. tous les blocs catch sont ignor´ es si depuis le code surveill´ e est lanc´ ee une des exceptions guett´ees (c’est-` a-dire d’un des types typeException1 . } finally { code `a ex´ ecuter dans tous les cas } si le code surveill´ e se d´ eroule normalement. suite Exceptions : syntaxe Syntaxe : try { code surveill´ e } catch (typeException1 e) { code pour  traiter  l’exception e de type typeException1 } catch (typeException2 e) { code pour  traiter  l’exception e } catch (typeException3 e) { . typeException2 . 2015-2016 POO et Java 30 / 1 .) alors le code correspondant est ex´ ecut´e et l’exception ne va pas plus loin sinon la m´ ethode en cours est imm´ ediatement termin´ ee et l’exception  remonte  ` a la m´ethode appelante L. H´ eritage..

} L. lectureDonnees(). 2015-2016 POO et Java 31 / 1 . c Tichit. suite Exceptions : exemple Exemple : boolean travail(String nomFic) { try { ouvertureFichier(nomFic). H´ eritage.

c Tichit. lectureDonnees(). return false. H´ eritage.println("Impossible ouvrir " + nomFic). suite Exceptions : exemple Exemple : boolean travail(String nomFic) { try { ouvertureFichier(nomFic). } catch (FileNotFoundException e) { System.out. 2015-2016 POO et Java 31 / 1 . } L.

} L. return false. 2015-2016 POO et Java 31 / 1 . return false. } catch (IOException e) { System. lectureDonnees(). H´ eritage.getMessage()).println("Impossible ouvrir " + nomFic).println("Erreur lecture " + e. c Tichit.out. } catch (FileNotFoundException e) { System. suite Exceptions : exemple Exemple : boolean travail(String nomFic) { try { ouvertureFichier(nomFic).out.

return true. H´ eritage. } catch (IOException e) { System. c Tichit. 2015-2016 POO et Java 31 / 1 . lectureDonnees().println("Impossible ouvrir " + nomFic). } traitementDesDonnees().out.out. suite Exceptions : exemple Exemple : boolean travail(String nomFic) { try { ouvertureFichier(nomFic). } L.println("Erreur lecture " + e. return false.getMessage()). return false. } catch (FileNotFoundException e) { System.

2015-2016 POO et Java 32 / 1 .. H´ eritage. celle-ci doit ˆ etre soit attrap´ee : void uneM´ethode(String nom. int n) { ... c Tichit. suite D´eclaration des exceptions Lorsque le code d’une m´ ethode peut lancer une exception. try { code pouvant lancer une exception de type Machin } catch (Machin e) { code pour traiter l’exception e } . } L..

2015-2016 POO et Java 32 / 1 . int n) throws Machin { void uneM´ . try { code pouvant lancer une exception de type Machin } catch (Machin e) { code pour traiter l’exception e } ... int n) { . code pouvant lancer une exception de type Machin . } soit d´eclar´ee : ethode(String nom. } L. celle-ci doit ˆ etre soit attrap´ee : void uneM´ethode(String nom.. suite D´eclaration des exceptions Lorsque le code d’une m´ ethode peut lancer une exception. H´ eritage..... c Tichit..

suite Lancer ses propres exceptions lancement d’une exception : .x = x.... c Tichit.y = y. } . L.. this. this. public Point(int x. 2015-2016 POO et Java 33 / 1 . int y) throws Exception { if (x < XMIN || x > XMAX || y < YMIN || y > YMAX) throw new Exception("Coordonn´ ees ill´ egales"). H´ eritage.

. public Point(int x.exit(0). } catch (Exception e) { System.. int y) throws Exception { if (x < XMIN || x > XMAX || y < YMIN || y > YMAX) throw new Exception("Coordonn´ ees ill´ egales").. 2015-2016 POO et Java 33 / 1 ... this.. L. try { . this.x = x. System.y = y. utilisation de ce constructeur : .. b).. suite Lancer ses propres exceptions lancement d’une exception : . } .getMessage(). c Tichit.. unPoint = new Point(a. H´ eritage. } . ..out...println("Erreur " + e.

this..y = y. L. int y) throws CoordException { if (x < XMIN || x > XMAX || y < YMIN || y > YMAX) throw new CoordException("x " + x + ". } . y " + y).. H´ eritage. 2015-2016 POO et Java 34 / 1 .. c Tichit. public Point(int x..x = x. suite Lancer ses propres exceptions meilleure mani` ere (permet des catch plus s´ electifs) : . this.

} catch (CoordException e) { System.. . suite Lancer ses propres exceptions meilleure mani` ere (permet des catch plus s´ electifs) : .exit(0). y " + y). } ..out. c Tichit.x = x.. public Point(int x.getMessage(). L. utilisation : .y = y.. int y) throws CoordException { if (x < XMIN || x > XMAX || y < YMIN || y > YMAX) throw new CoordException("x " + x + ". try { . H´ eritage.println( "Erreur " + e... System.. unPoint = new Point(a. b).... 2015-2016 POO et Java 34 / 1 ... this. this. } .

class CoordException unPoint = new Point(a.println( } "Erreur " + e. int y) throws CoordException { if (x < XMIN || x > XMAX || y < YMIN || y > YMAX) throw new CoordException("x " + x + ". } . suite Lancer ses propres exceptions meilleure mani` ere (permet des catch plus s´ electifs) : . public Point(int x.out.. } ..exit(0). this. this.. extends Exception { . 2015-2016 POO et Java 34 / 1 . c Tichit. System..x = x.. try { ...y = y. } System. H´ eritage..getMessage()... y " + y). L.. utilisation : d´ efinition de la classe exception : . b).. public CoordException(String m) { } catch (CoordException e) { super(m).

H´ eritage. Error Erreurs graves (dont les exceptions asynchrones) qu’il n’est pas raisonnable de vouloir intercepter. L. suite Exceptions pr´ed´efinies Object Throwable Classe de base de toutes les exceptions. c Tichit. etc. IOException Exceptions pouvant survenir pendant les op´ erations d’entr´ee-sortie Nombreuses autres classes exceptions pr´ ed´efinies Vos propres classes viennent ici Les exceptions des types Error. RuntimeException et leurs sous-classes sont non contrˆ ol´ ees : elles n’ont pas besoin d’ˆ etre  n´ ecessairement attrap´ ees ou d´ eclar´ ees . Exception Exceptions m´ eritant d’ˆetre intercept´ees 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 d’une r´ ef´ erence null – erreur arithm´ etique. 2015-2016 POO et Java 35 / 1 .

comme { lundi. est. L. dimanche }. c Tichit. 2015-2016 POO et Java 36 / 1 . mardi. suite Types ´enum´er´es Le besoin : manipuler des ensembles finis de donn´ ees conventionnelles. ouest }. { nord.. H´ eritage. sud. . etc..

comme { lundi. etc. 2015-2016 POO et Java 36 / 1 . H´ eritage. dimanche }... . sud. { nord. Ces donn´ ees sont tr` es symboliques L. est. ouest }. c Tichit. suite Types ´enum´er´es Le besoin : manipuler des ensembles finis de donn´ ees conventionnelles. mardi.

suite Types ´enum´er´es Le besoin : manipuler des ensembles finis de donn´ ees conventionnelles. comme des entiers) L. H´ eritage. sud. . ouest }.. Ces donn´ ees sont tr` es symboliques sont atomiques (simples. mardi.. 2015-2016 POO et Java 36 / 1 . etc. est. comme { lundi. c Tichit. { nord. dimanche }.

Ces donn´ ees sont tr` es symboliques sont atomiques (simples. est.. ouest }. . 2015-2016 POO et Java 36 / 1 . H´ eritage. mardi. dimanche }. comme { lundi. comme des entiers) forment des ensembles finis L.. c Tichit. suite Types ´enum´er´es Le besoin : manipuler des ensembles finis de donn´ ees conventionnelles. sud. etc. { nord.

2015-2016 POO et Java 36 / 1 . est. mardi.. Ces donn´ ees sont tr` es symboliques sont atomiques (simples. suite Types ´enum´er´es Le besoin : manipuler des ensembles finis de donn´ ees conventionnelles. H´ eritage. c Tichit. dimanche }. sud. . { nord.. etc. comme { lundi. comme des entiers) forment des ensembles finis forment des ensembles disjoints L. ouest }.

H´ eritage. public static final int JEUDI = 3. ..4 public class JourSemaine { public static final int LUNDI = 0. . { nord. comme { lundi.. 2015-2016 POO et Java 36 / 1 . public static final int MARDI = 1. public static final int DIMANCHE = 6. etc. c Tichit. dimanche }. sud.. suite Types ´enum´er´es Le besoin : manipuler des ensembles finis de donn´ ees conventionnelles.. Ces donn´ ees sont tr` es symboliques sont atomiques (simples. public static final int MERCREDI = 2. est. ouest }. public static final int SAMEDI = 5. mardi. comme des entiers) forment des ensembles finis forment des ensembles disjoints Jusqu’` a Java 1. } L. public static final int VENDREDI = 4.

SAMEDI.4 public class JourSemaine { A partir de Java 5 public static final int LUNDI = 0. dimanche }. etc. } L. H´ eritage. VENDREDI. suite Types ´enum´er´es Le besoin : manipuler des ensembles finis de donn´ ees conventionnelles. 2015-2016 POO et Java 36 / 1 . ouest }. JEUDI. . public static final int DIMANCHE = 6. DIMANCHE public static final int VENDREDI = 4. public static final int MARDI = 1. comme { lundi. LUNDI. public static final int JEUDI = 3. Ces donn´ ees sont tr` es symboliques sont atomiques (simples. c Tichit. public enum JourSemaine { public static final int MERCREDI = 2. mardi.. MERCREDI.. est. } public static final int SAMEDI = 5. MARDI. sud.. . comme des entiers) forment des ensembles finis forment des ensembles disjoints Jusqu’` a Java 1. { nord..

LUNDI. suite M´ethodes des types ´enum´er´es String toString() – exemple : JourSemaine.toString() → "LUNDI" L. H´ eritage. c Tichit. 2015-2016 POO et Java 37 / 1 .

valueOf("MARDI") → JourSemaine. c Tichit. suite M´ethodes des types ´enum´er´es String toString() – exemple : JourSemaine.LUNDI.MARDI L.toString() → "LUNDI" static JourSemaine valueOf(String nom) – r´ eciproque de la pr´ ec´ edente : JourSemaine. 2015-2016 POO et Java 37 / 1 . H´ eritage.

ordinal() → 2 L. suite M´ethodes des types ´enum´er´es String toString() – exemple : JourSemaine. 2015-2016 POO et Java 37 / 1 .valueOf("MARDI") → JourSemaine.MERCREDI.MARDI int ordinal() – rang (dans l’ordre de la d´ eclaration) : JourSemaine.toString() → "LUNDI" static JourSemaine valueOf(String nom) – r´ eciproque de la pr´ ec´ edente : JourSemaine. c Tichit. H´ eritage.LUNDI.

valueOf("MARDI") → JourSemaine. 2015-2016 POO et Java 37 / 1 .toString() → "LUNDI" static JourSemaine valueOf(String nom) – r´ eciproque de la pr´ ec´ edente : JourSemaine. H´ eritage.MERCREDI.ordinal() → 2 static JourSemaine[] values() – tableau de toutes les valeurs du type : JourSemaine.LUNDI.LUNDI ...DIMANCHE L. suite M´ethodes des types ´enum´er´es String toString() – exemple : JourSemaine. c Tichit.MARDI int ordinal() – rang (dans l’ordre de la d´ eclaration) : JourSemaine. JourSemaine.

} L.length). 2015-2016 POO et Java 37 / 1 .values()[k].MARDI int ordinal() – rang (dans l’ordre de la d´ eclaration) : JourSemaine..toString() → "LUNDI" static JourSemaine valueOf(String nom) – r´ eciproque de la pr´ ec´ edente : JourSemaine. return JourSemaine.LUNDI . k = (k + 1) % (JourSemaine.ordinal() → 2 static JourSemaine[] values() – tableau de toutes les valeurs du type : JourSemaine. c Tichit.LUNDI.values().valueOf("MARDI") → JourSemaine..ordinal().DIMANCHE Exemple : obtention du jour suivant un jour donn´ e: JourSemaine jourSuivant(JourSemaine jour) { int k = jour.MERCREDI. suite M´ethodes des types ´enum´er´es String toString() – exemple : JourSemaine. JourSemaine. H´ eritage.

c Tichit. i++) exploiter(tableau[i]) L. la boucle for (int i = 0. i < tableau. H´ eritage.length. 2015-2016 POO et Java 38 / 1 . suite Boucle for  am´elior´ee  Si tableau est un tableau de Machin.

2015-2016 POO et Java 38 / 1 . i++) exploiter(tableau[i]) s’´ ecrit plus simplement for (Machin e : tableau) exploiter(e) L.length. i < tableau. H´ eritage. c Tichit. la boucle for (int i = 0. suite Boucle for  am´elior´ee  Si tableau est un tableau de Machin.

) exploiter((Machin)it. i < tableau. 2015-2016 POO et Java 38 / 1 . i++) exploiter(tableau[i]) s’´ ecrit plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin.next()) L. la boucle for (int i = 0. suite Boucle for  am´elior´ee  Si tableau est un tableau de Machin. it.hasNext().length.iterator(). H´ eritage. c Tichit. la boucle for (Iterator it = collection.

hasNext().next()) s’´ ecrit plus simplement for (Machin e : collection) exploiter(e) L. ) exploiter((Machin)it. la boucle for (Iterator it = collection. c Tichit. 2015-2016 POO et Java 38 / 1 .length. suite Boucle for  am´elior´ee  Si tableau est un tableau de Machin. H´ eritage. la boucle for (int i = 0. i < tableau. it. i++) exploiter(tableau[i]) s’´ ecrit plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin.iterator().

hasNext().. H´ eritage.. double[] t = new double[N]. for (double x : t) s += x.iterator().next()) s’´ ecrit plus simplement for (Machin e : collection) exploiter(e) Exemple : .. la boucle for (int i = 0. i < tableau. c Tichit. L. ) exploiter((Machin)it.length... .. double s = 0. suite Boucle for  am´elior´ee  Si tableau est un tableau de Machin. la boucle for (Iterator it = collection. 2015-2016 POO et Java 38 / 1 . . it. i++) exploiter(tableau[i]) s’´ ecrit plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin.