Académique Documents
Professionnel Documents
Culture Documents
et le langage Java
Master BBSG 2
Laurent Tichit
Departement Informatique et Interactions, Faculte des Sciences de Luminy
L.
c Tichit, 2015-2016 POO et Java 1/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 2/1
H
eritage, suite
Usager
emettreTicket()
...
Habituel
emettreTicket()
...
Abonn
emettreTicket()
...
Rsident
emettreTicket()
...
L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite
Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;
Abonn
emettreTicket()
...
Rsident
emettreTicket()
...
L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite
Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;
Rsident
emettreTicket()
...
L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite
Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;
Rsident
emettreTicket()
...
L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite
Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;
L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite
Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;
L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite
Usager
emettreTicket() avec la d
eclaration :
...
Usager unClient;
L.
c Tichit, 2015-2016 POO et Java 3/1
H
eritage, suite
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
L.
c Tichit, 2015-2016 POO et Java 5/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 5/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 5/1
H
eritage, suite
Methodes abstraites
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
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
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
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
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();
...
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();
...
L.
c Tichit, 2015-2016 POO et Java 8/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 9/1
H
eritage, suite
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
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
Recapitulons :
une methode (ordinaire) represente un service :
voici comment mes instances effectuent un certain traitement
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
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
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
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
Interface
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
Interface
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
Interface
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
Interface
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
Interface
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
Interface
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
Interface
L.
c Tichit, 2015-2016 POO et Java 12 / 1
H
eritage, suite
interface Pile {
boolean estVide();
void empiler(Object x);
Object depiler();
}
L.
c Tichit, 2015-2016 POO et Java 13 / 1
H
eritage, suite
interface Pile {
boolean estVide();
void empiler(Object x);
Object depiler();
}
D`
es quon a une interface on peut programmer avec :
L.
c Tichit, 2015-2016 POO et Java 13 / 1
H
eritage, suite
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
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
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 15 / 1
H
eritage, suite
Classes internes
L.
c Tichit, 2015-2016 POO et Java 16 / 1
H
eritage, suite
Classes internes
L.
c Tichit, 2015-2016 POO et Java 16 / 1
H
eritage, suite
Classes internes
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
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
Fichier Famille.java
L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite
Fichier Famille.java
public Famille(String n) {
nom = n;
membres = new Vector();
}
L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite
Fichier Famille.java
public Famille(String n) {
nom = n;
membres = new Vector();
}
L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite
Fichier Famille.java
public Famille(String n) {
nom = n;
membres = new Vector();
}
class Individu {
String prenom;
autres informations
eventuelles
L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite
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();
}
class Individu {
String prenom;
autres informations
eventuelles
L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite
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(); }
}
class Individu {
String prenom;
autres informations
eventuelles
L.
c Tichit, 2015-2016 POO et Java 17 / 1
H
eritage, suite
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
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
L.
c Tichit, 2015-2016 POO et Java 19 / 1
H
eritage, suite
Classes anonymes
(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
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
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
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
L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 22 / 1
H
eritage, suite
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
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
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
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
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
L.
c Tichit, 2015-2016 POO et Java 25 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
L.
c Tichit, 2015-2016 POO et Java 26 / 1
H
eritage, suite
Exceptions : principe
mtB mtD
mtA
mtC
prsent
mtC()
mtB()
mtD()
L.
c Tichit, 2015-2016 POO et Java 27 / 1
H
eritage, suite
Exceptions : principe
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
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
L.
c Tichit, 2015-2016 POO et Java 32 / 1
H
eritage, suite
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
L.
c Tichit, 2015-2016 POO et Java 33 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 33 / 1
H
eritage, suite
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
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
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
L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite
Types enumeres
L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite
Types enumeres
L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite
Types enumeres
L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite
Types enumeres
L.
c Tichit, 2015-2016 POO et Java 36 / 1
H
eritage, suite
Types enumeres
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
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
L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 37 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 38 / 1
H
eritage, suite
L.
c Tichit, 2015-2016 POO et Java 38 / 1