Vous êtes sur la page 1sur 38

JAVA

Programmation oriente objet


1
Programmation orient objet
JAVA
Pr Hafidi Imad imad.hafidi@gmail.com

Troisime partie
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Hafidi Imad -ENSA de Khouribga-Cours JAVA
2
Collections
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
3
Motivations
1, 2, plusieurs
monme, binme, polynme
point, segment, triangle, polygone
Importance en conception
Relation entre classes
est une collection de
a pour composant une collection de
Choisir la meilleure structure collective
plus ou moins facile mettre en uvre
permettant des traitements efficaces
selon la taille (prvue) de la collection
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
4
Dfinition d une collection
Une collection regroupe plusieurs donnes de
mme nature
Exemples : promotion dtudiants, sac de billes, ...
Une structure collective implante une collection
plusieurs implantations possibles
ordonnes ou non, avec ou sans doublons, ...
accs, recherche, tris (algorithmes) plus ou moins efficaces
Objectifs
adapter la structure collective aux besoins de la
collection
ne pas re-programmer les traitements rptitifs
classiques (affichage, saisie, recherche dlments,
)
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
5
Tableau
accs par index
recherche efficace si le tableau est tri (dichotomie)
insertions et suppressions peu efficaces
dfaut majeur : nombre dlments born
Liste
accs squentiel : premier, suivant
insertions et suppressions efficaces
recherche lente, non efficace

Tableau dynamique = tableau + liste
Structures collectives classiques
type[] et Array
interface List
class ArrayList
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
6
Paquetage java.util de Java 2
Interface Collection
Interfaces Set et List
Mthodes
boolean add(Object o)
boolean remove(Object o)

Plusieurs implantations
tableau : ArrayList
liste chane : LinkedList
Set
ArrayList LinkedList
List
Collection
Algorithmes gnriques : tri, maximum, copie
...
mthodes statiques de Collection
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
7
Collection : mthodes communes
boolean add(Object) : ajouter un lment
boolean addAll(Collection) : ajouter plusieurs lments
void clear() : tout supprimer
boolean contains(Object) : test d'appartenance
boolean containsAll(Collection) : appartenance collective
boolean isEmpty() : test de l'absence d'lments
Iterator iterator() : pour le parcours (cf Iterator)
boolean remove(Object) : retrait d'un lment
boolean removeAll(Collection) : retrait de plusieurs lments
boolean retainAll(Collection) : intersection
int size() : nombre d'lments
Object[] toArray() : transformation en tableau
Object[] toArray(Object[] a) : tableau de mme type que a
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
8
Exemple : ajout dlments
import java.util.*;

public class MaCollection {
static final int N = 25000;
List listEntier = new ArrayList();

public static void main(String args[]) {
MaCollection c = new MaCollection();
int i;

for (i = 0; i < N; i++) {
c.listEntier.add(new Integer(i));
}
}
}
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
9
Ordonnes ou non
Ordre sur les lments ? voir tri
Doublons autoriss ou non
liste (List) : avec doubles
ensemble (Set) : sans doubles
Besoins daccs
index
squentiel, via Iterator
Caractristiques des collections
interface Set
interface SortedSet
interface Collection
public Iterator iterator()
interface List
... get(int index)
... set(int index,Object o)
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
10
Fonctionnalits des Listes
Implantent l'interface List
ArrayList
Liste implante dans un tableau
accs immdiat chaque lment
ajout et suppression lourdes
LinkedList
accs aux lments lourd
ajout et suppression trs efficaces
permettent d'implanter les structures FIFO (file) et LIFO
(pile)
mthodes supplmentaires : addFirst(), addLast(),
getFirst(), getLast(), removeFisrt(),
removeLast()
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
11
Fonctionnalits des ensembles
Implantent l'interface Set
Elments non dupliqus
HashSet
table de hashage
utiliser la mthode hashCode()
accs trs performant aux lments
TreeSet
arbre binaire de recherche
maintient l'ensemble tri en permanence
mthodes supplmentaires
first() (mini), last() (maxi), subSet(deb,fin), headSet(fin),
tailSet(deb)
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
12
Recherche dun lment
Mthode
public boolean contains(Object o)
interface Collection, redfinie selon les sous-
classes
Utilise lgalit entre objets
galit dfinie par boolean equals(Object o)
par dfaut (classe Object) : galit de rfrences
redfinir dans chaque classe dlments
Cas spciaux
doublons : recherche du premier ou de toutes les
occurrences ?
structures ordonnes : plus efficace, si les lments sont
comparables (voir tri)
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
13
Tri dune structure collective
Algorithmes gnriques
Collections.sort(List l)
Arrays.sort(Object[] a,)
Condition : collection dlments dont la classe dfinit
des rgles de comparaison
en implmentant linterface java.lang.Comparable
o implements Comparable
en dfinissant la mthode de comparaison
o public int compareTo(Object o)
a.compareTo(b) == 0 si a.equals(b)
a.compareTo(b) < 0 pour a strictement infrieur b
a.compareTo(b) > 0 pour a strictement suprieur b
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
14
Gnricit des algorithmes
N'utiliser que les mthodes communes
Dclaration
Collection col = new ArrayList();
Parcours des lments de la collection :
Iterator
accs index pas toujours disponible (mthode
get())
utiliser la mthode Iterator iterator()
se dplacer avec les mthodes next() et
hasNext()
exemple
Collection col = new TreeSet();
Iterator i = col.iterator();
while (i.hasNext())
traiter ((transtypage)i.next());
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
15
Vue d'ensemble des collections
Hirarchie simplifie

Hafidi Imad -ENSA de Khouribga-Cours JAVA
16
Exceptions
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
17
Prvoir les erreurs d'utilisation
Certains cas d'erreurs peuvent tre prvus l'avance
par le programmeur.
exemples:
erreurs d'entre-sortie (I/O fichiers)
erreurs de saisie de donnes par lutilisateur

Le programmeur peut :
Laisser planter le programme lendroit o lerreur est
dtecte
Manifester explicitement le problme la couche
suprieure
Tenter une correction

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
18
Notion d'exception
En Java, les erreurs se produisent lors d'une
excution sous la forme d'exceptions.
Une exception :
est un objet, instance d'une classe d'exception
provoque la sortie d'une mthode
correspond un type d'erreur
contient des informations sur cette erreur

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
19
Les exceptions
Exception
situation particulire imposant une rupture dans le cours dun
programme : erreur, impossibilit

Un objet JAVA Exception est une bulle logicielle
produite dans cette situation qui va remonter la pile dexcution
pour trouver une portion de code apte la traiter

Si cette portion nexiste pas, le programme sarrte en affichant
la pile dexcution. Sinon, la portion de code sert pallier au
problme (poursuite ventuelle, ou sortie)

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
20
Terminologie
Une exception est un signal qui indique que
quelque chose d'exceptionnel est survenu en
cours d'excution.
Deux solutions alors :
laisser le programme se terminer avec une erreur,
essayer, malgr l'exception, de continuer l'excution
normale.
Lever une exception consiste signaler quelque
chose d'exceptionnel.
Capturer l'exception consiste essayer de la
traiter.

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
21
Arbre des exceptions
Throwable
String (message d'erreur)
Error Exception
RunTimeException
VosExceptions...
OutOfMemoryError
NullPointerException
ClassCastException
...
Les erreurs sont graves et il est
recommand de ne pas les
corriger.
exceptions prdfinies
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
22
Nature des exceptions
En Java, les exceptions sont des objets ayant 3
caractristiques:
Un type dexception (dfini par la classe de lobjet
exception)
Une chane de caractres (option), (hrit de la
classe Throwable).
Un instantan de la pile dexcution au moment
de la cration.
Les exceptions construites par l'utilisateur
tendent la classe Exception
RunTimeException, Error sont des exceptions et
des erreurs prdfinies et/ou gres par Java
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
23
Quelques exceptions prdfinies en
Java
Division par zro pour les entiers :
ArithmeticException
Rfrence nulle : NullPointerException
Tentative de forage de type illgale :
ClassCastException
Tentative de cration d'un tableau de taille ngative :
NegativeArraySizeException
Dpassement de limite d'un tableau :
ArrayIndexOutOfBoundsException
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
24
Capture d'une exception
Les sections try et catch servent capturer une
exception dans une mthode (attraper la bulle)
exemple :
public void XXX() {
try{ .. }
catch {


}
}

Si une erreur
se produit
ici.
On tente de rcuprer l.
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
25
try / catch / finally
try
{
...
}
catch (<une-exception>)
{
...
}
catch (<une_autre_exception>)
{
...
}

...

finally
{
...
}

Autant de blocs catch que l'on veut.
Bloc finally facultatif.
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
26
Traitement des exceptions (1)
Le bloc try est excut jusqu' ce qu'il se termine
avec succs ou bien qu'une exception soit leve.
Dans ce dernier cas, les clauses catch sont
examines l'une aprs l'autre dans le but d'en
trouver une qui traite cette classe d'exceptions
(ou une superclasse).
Les clauses catch doivent donc traiter les
exceptions de la plus spcifique la plus
gnrale.
Si une clause catch convenant cette exception a
t trouve et le bloc excut, l'excution du
programme reprend son cours.

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
27
Traitement des exceptions (2)
Si elles ne sont pas immdiatement captures par un bloc
catch, les exceptions se propagent en remontant la pile
d'appels des mthodes, jusqu' tre traites.
Si une exception n'est jamais capture, elle se propage
jusqu' la mthode main(), ce qui pousse l'interprteur
Java afficher un message d'erreur et s'arrter.
L'interprteur Java affiche un message identifiant :
l'exception,
la mthode qui l'a cause,
la ligne correspondante dans le fichier.

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
28
Bloc finally
Un bloc finally permet au programmeur
de dfinir un ensemble d'instructions qui
est toujours excut, que l'exception soit
leve ou non, capture ou non.
La seule instruction qui peut faire qu'un
bloc finally ne soit pas excut est
System.exit().

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
29
Interception vs propagation
Si une mthode peut mettre une exception
(ou appelle une autre mthode qui peut en
mettre une) il faut :

soit propager l'exception (la mthode doit
l'avoir dclare);
soit intercepter et traiter l'exception.

Hafidi Imad -ENSA de
Khouribga-Cours JAVA
30
Exemple de propagation
public int ajouter(int a, String str) throws NumberFormatException
int b = Integer.parseInt(str);
a = a + b;
return a;
}
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
31
Exemple d'interception
public int ajouter(int a, String str) {
try {
int b = Integer.parseInt(str);
a = a + b;
} catch (NumberFormatException e) {
System.out.println(e.getMessage());
}
return a;
}
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
32
Les objets Exception
La classe Exception hrite de La classe Throwable.
La classe Throwable dfinit un message de type
String qui est hrit par toutes les classes
d'exception.
Ce champ est utilis pour stocker le message
dcrivant l'exception.
Il est positionn en passant un argument au
constructeur.
Ce message peut tre rcupr par la mthode
getMessage().
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
33
Exemple
public class MonException extends Exception
{
public MonException()
{
super();
}
public MonException(String s)
{
super(s);
}
}
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
34
Leve d'exceptions
Le programmeur peut lever ses propres exceptions
l'aide du mot rserv throw.
throw prend en paramtre un objet instance de
Throwable ou d'une de ses sous-classes.
Les objets exception sont souvent instancis dans
l'instruction mme qui assure leur lancement.

throw new MonException("Mon exception s'est produite !!!");
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
35
Emission d'une exception
L'exception elle-mme est leve par l'instruction
throw.

Une mthode susceptible de lever une exception
est identifie par le mot-cl throws suivi du type de
l'exception

exemple :
public void ouvrirFichier(String name) throws MonException
{if (name==null) throw new MonException();
else
{...}
}
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
36
throws (1)
Pour "laisser remonter" la mthode appelante une
exception qu'il ne veut pas traiter, le programmeur rajoute
le mot rserv throws la dclaration de la mthode dans
laquelle l'exception est susceptible de se manifester.

public void uneMethode() throws IOException
{
// ne traite pas l'exception IOException
// mais est succeptible de la gnrer
}
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
37
throws (2)
Les programmeurs qui utilisent une mthode connaissent ainsi
les exceptions qu'elle peut lever.
La classe de l'exception indique peut tout fait tre une super-
classe de l'exception effectivement gnre.
Une mme mthode peut tout fait "laisser remonter" plusieurs
types d'exceptions (spars par des ,).
Une mthode doit traiter ou "laisser remonter" toutes les
exceptions qui peuvent tre gnres dans les mthodes qu'elle
appelle.
Hafidi Imad -ENSA de
Khouribga-Cours JAVA
38
Conclusion
Grce aux exceptions, Java possde un
mcanisme sophistiqu de gestion des erreurs
permettant d crire du code robuste
Le programme peut dclencher des exceptions au
moment opportun.
Le programme peut capturer et traiter les
exceptions grce au bloc dinstruction catch
try finally
Le programmeur peut dfinir ses propres classes
d exceptions