Académique Documents
Professionnel Documents
Culture Documents
http://www.pdfmail.com
try {
< bloc de code à protéger>
}
catch ( TypeException1 E ) { <Traitement TypeException1 > }
catch ( TypeException2 E ) { <Traitement TypeException2 > }
.....
catch ( TypeExceptionk E ) { <Traitement TypeExceptionk > }
Où TypeException1, TypeException12, ... , TypeExceptionk
sont des classes d'exceptions obligatoirement toutes distinctes.
Seule une seule clause catch ( TypeException E ) {...}est
exécutée (celle qui correspond au bon type de l'objet
d'exception instancié).
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Résultats de l'exécution :
---- java UseAction2
UseAction2.java:19: exception java.lang.ArithmeticException has
already been caught
catch(ArithmeticException E){
UseAction2.java:22: exception java.lang.ArrayStoreException has
already been caught
catch(ArrayStoreException E){
UseAction2.java:25: exception java.lang.ClassCastException has
already been caught
catch(ClassCastException E){
3 errors Le compilateur proteste à partir de la clause catch
(ArithmeticException E )en nous indiquant que l'exception est déjà
interceptée et ceci trois fois de suite.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Redéclenchement d'une
exception : throw
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Erreurs non
réparables
Exceptions
vérifiées
Listing des 3 exécutions dans chacun des cas d'appel de Résultats de l'exécution
la méthode meth :
---- java UseAction5
Résultats de l'exécution
Début du programme.
---- java UseAction5
Début du programme. Appel meth(2)
Appel meth(0) ...Avant incident-fille
...Avant incident-fille Interception exception_2 :
...Avant incident-mère Problème de champ !-fille
Interception exception_0 : Problème conversion de Fin du programme.
caractère !-mère
Fin du programme.
Résultats de l'exécution
---- java UseAction5
Début du programme.
Appel meth(1)
...Avant incident-fille
Interception exception_1 : Problème d'E/S !-fille
Fin du programme.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Clause finally
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
<Ouverture du fichier>
try {
< action sur fichier>
}
finally {
<fermeture du fichier>
}
.... suite
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple 1
class Pile{
private int table [] ;
private int hauteur = 0 ;
public Pile () { table = new int [3] ; }
public Pile (int h) { table = new int [h] ; }
public void insertValue (int valeur) throws PileException{
if (hauteur == table.length) throw new PileException ("Pile
pleine") ;
else table [hauteur++] = valeur ;}
public int removeValue () throws PileException{
if (hauteur == 0) throw new PileException ("Pile vide") ;
else return table [--hauteur] ;}}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple 2
class Point{
public Point(int x, int y) throws ErrConst
{ if ( (x<0) || (y<0)) throw new ErrConst() ;
this.x = x ; this.y = y ; }
public void deplace (int dx, int dy) throws ErrDepl
{ if ( ((x+dx)<0) || ((y+dy)<0)) throw new ErrDepl() ;
x += dx ; y += dy ;
}
public void affiche()
{ System.out.println ("coordonnees : " + x + " " + y) ; }
private int x, y ;
}
class ErrConst extends Exception
{}
class ErrDepl extends Exception
{}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple 3
class Point
{ public Point(int x, int y) throws ErrConst
{ if ( (x<0) || (y<0)) throw new ErrConst() ;
this.x = x ; this.y = y ;
}
private int x, y ;
}
class ErrConst extends Exception
{}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'abstraction
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Présentation
Une classe abstraite est une classe qui ne permet pas
d’instancier des objets.Elle ne peut servir que de classe de
base pour une dérivation.Elle se déclare ainsi:
abstract class Nom_de_la_classe
{
…
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple (suite)
A a;
a = new A(…); //Erreur
En revanche, si on dérive de A une classe B qui définit
la méthode abstraite g:
Class B extends A{
Public void g(int n){…}
…
}
On pourra alors instancier un objet de type B
A a=new B(…); //OK
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Abstraction : Exemple 1
abstract class Affichable{
abstract public void affiche() ;}
class Entier extends Affichable{
public Entier (int n)
{ valeur = n ; }
public void affiche()
{ System.out.println ("Je suis un entier de valeur " + valeur) ;
}
private int valeur ;
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Abstraction : Exemple 2
class Vehicule { class Voiture extends Vehicule{
abstract void demarrer(); void demarrer()
{…}
}
}
class Garagiste {
public static void garer(Vehicule vA) l'exécution, Java sait
{v.demarrer(); } que l'objet est une voiture
}
class Main {
public static void main(String args[]){
Voiture voiture = new Voiture();
Garagiste.garer(voiture); }
}
• La classe Vehicule possède une méthode
demarrer(), donc la compilation fonctionne.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Abstraction : Exemple 3
abstract class Mot
{
abstract void mettreAuPluriel();
}
class Verbe extends Mot
{
void mettreAuPluriel()
{ // fait appel aux conjugaisons;}
}
class Nom extends Mot
{
void mettreAuPluriel()
{ // ajoute un "s" sauf exception;}
}
• Le traitement mettreAuPluriel() existe pour tous les
mots, mais il est spécifique à chaque type de mot
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Travaux Dirigés
Articles à vendre
Une société vend des articles de papeterie. Vous vous limiterez
aux articles suivants :
•stylos décrits par une référence, un nom ou descriptif (par
exemple "stylo noir B2"), une marque, un prix unitaire et une
couleur,
•ramettes de papier décrites par une référence, un nom, une
marque, un prix unitaire et le grammage du papier (par exemple,
80 g/m²).
De plus cette société peut vendre ces articles par lots. Vous
supposerez que les lots sont composés d'un certain nombre d'un
même type d'articles, par exemple un lot de 10 stylos noirs B2 de
la marque WaterTruc.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Article (abstraite)
String reference
ArticleUnitaire (abstraite)
Article (abstraite)
private String marque;
private double pu;
private String descriptif;
Protected ArticleUnitaire (String reference)
public ArticleUnitaire(String reference, String
descriptif, String marque, double pu)
public String getMarque()
public void setMarque(String marque)
public double getPU()
public void setPU(double pu)
public String getDescriptif()
public void setDescriptif(String descriptif)
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Article (abstraite)
Lot
private Article article
private int nb
private int pourcentage
public Lot(String reference)
public Lot(String reference, Article article, int
nb, int pourcentage)
public double getPU()
public String getDescriptif()
public String getMarque()
public String toString()
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Stylo
private String couleur;
public Stylo(String reference)
public Stylo(String reference, String descriptif,
String marque, double pu, String couleur)
public String getCouleur()
public String toString()
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ramette
private int grammage
public Ramette(String reference)
public Ramette(String reference, String
descriptif, String marque, double pu, int
grammage)
public int getGrammage()
public String toString()
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Article (abstraite)
ArticleUnitaire(abstraite) Lot
Stylo Ramette
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Le Polymorphisme
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Héritage et traitements
• L'héritage permet d'organiser les données sous
forme de classes de façon à coller à la
sémantique du domaine modélisé
• Mais l'héritage permet aussi d'organiser les
traitements de façon à éviter les répétitions de
code
• Pour utiliser correctement l’héritage, il faut de
l'abstraction et du polymorphisme
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Le polymorphisme
• On appelle polymorphisme le fait qu'un objet d'une
classe puisse être manipulé comme s'il appartenait à
une autre classe
• Distinguer :
– le vrai type de l'objet : celui qui lui est donné lors de
l'appel du constructeur
– le type mentionné dans le code source
• Java peut convertir dynamiquement tout objet d'une
classe en un objet d'une classe plus générique ou
plus spécifique
• On dit que Java dispose d’un mécanisme de typage
dynamique
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Polymorphisme implicite :
synthèse
• Java est capable de retrouver le vrai type de l'objet
même si ce n'est pas le type spécifié dans le code
source
• Si l'objet passé en paramètre (Vehicule v) est une
Voiture, il appellera la méthode demarrer() de la
classe Voiture
• Il suffit que Voiture hérite de Vehicule
• Si la méthode appelée existe pour les deux types,
alors Java appellera celle du vrai type de l'objet
même si le type mentionné est différent
• Si la méthode appelée n'existe pas pour le type
spécifié, alors Java refuse de compiler
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple de polymorphisme
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
{ public Point (int x, int y)
{ this.x = x ; this.y = y ; }
public void deplace (int dx, int dy)
{ x += dx ; y += dy ; }
public void affiche ()
{ System.out.println ("Je suis en " + x + " " + y) ; }
protected int x, y ;
}
class Pointcol extends Point
{ public Pointcol (int x, int y, byte couleur)
{ super (x, y) ; this.couleur = couleur ; }
public void affiche ()
{ super.affiche() ;
System.out.println (" et ma couleur est : " + couleur) ; }
private byte couleur ;}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple d’utilisation
du polymorphisme pour gerer
un tableau heterogene
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
{ public Point (int x, int y)
{ this.x = x ; this.y = y ; }
public void affiche ()
{ System.out.println ("Je suis en " + x + " " + y) ; }
private int x, y ;
}
class Pointcol extends Point
{ public Pointcol (int x, int y, byte couleur)
{ super (x, y) ; // obligatoirement comme première instruction
this.couleur = couleur ; }
public void affiche ()
{ super.affiche() ;
System.out.println (" et ma couleur est : " + couleur) ; }
private byte couleur ;}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
{ public Point (int x, int y)
{ this.x = x ; this.y = y ; }
public void affiche ()
{ identifie() ;
System.out.println (" Mes coordonnees sont : " + x + " " + y) ;
}
public void identifie ()
{ System.out.println ("Je suis un point ") ; }
private int x, y ;
}
class Pointcol extends Point
{ public Pointcol (int x, int y, byte couleur)
{ super (x, y) ;
this.couleur = couleur ; }
public void identifie ()
{ System.out.println ("Je suis un point colore de couleur " + couleur) ; }
private byte couleur ;
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Polymorphisme explicite
• Si l’on veut appeler une méthode qui n'existe que
pour le type spécifique, alors il faut << caster >>,
c'est à dire déclarer le type spécifique de l'objet
• Le << cast >> est utile à la compilation : permet à
Java de connaître le vrai type, donc de savoir quelle
est la méthode spécifique qui sera appelée
• Si l'on << caste >> alors que l'objet n'est pas du type
casté, Java lève à l'exécution l'exception :
ClassCastException
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Polymorphisme explicite :
exemple (1)
class Vehicule { class Voiture extends Vehicule{
} void demarrer()
class Garagiste { {…}
public static void garer(Vehicule v) }
{((Voiture)v).demarrer(); } Java sait que l'objet sera
} une voiture
class Main {
public static void main(String args[]){
Voiture voiture = new Voiture();
Garagiste.garer(voiture); }
}
• Problème : la méthode garer(Vehicule v) n'est plus
générique, elle ne marche que pour les voitures
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Polymorphisme explicite :
exemple (2)
class Vehicule { class Voiture extends Vehicule{
} void demarrer(){…}
class Garagiste { }
public static void garer(Vehicule v)
{((Voiture)v).demarrer(); } ClassCastException à
} l'exécution
class Main {
public static void main(String args[]){
Camion cam = new Camion();
Garagiste.garer(cam); }
}
• Solution éventuelle : vérifier le type de l'objet
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Polymorphisme explicite :
exemple (3)
class Vehicule { class Voiture extends Vehicule{
} void demarrer(){…}
}
class Garagiste {
public static void garer(Vehicule v)
{ if (v instanceof Voiture)
((Voiture)v).demarrer();
else if (v instanceof Camion)
((Camion)v).demarrer(); // …
}
}
• Problème : il faut connaître la liste des types
possibles
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Les collections
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Présentation du framework
collection
• Dans la version 1 du J.D.K., il n'existe qu'un
nombre restreint de classes pour gérer des
ensembles de données :
• · Vector
• · Stack
• · Hashtable
• · Bitset
• L'interface Enumeration permet de parcourir le
contenu de ces objets.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface Collection
• Cette interface définit des méthodes pour des
objets qui gèrent des éléments d'une façon assez
générale.
• Elle est la super interface de plusieurs interfaces
du framework.
• Plusieurs classes qui gèrent une collection
implémentent une interface qui hérite de l'interface
Collection.
• Cette interface est une des deux racines de
l'arborescence des collections.
• Cette interface définit plusieurs méthodes :
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface Iterator
• Cette interface définit des méthodes pour
des objets capables de parcourir les données
d'une collection.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemples
Iterator iterator = collection.Iterator();
while (iterator.hasNext()) {
System.out.println(“objet = ”+iterator.next());
}
Iterator iterator = collection.Iterator();
if (iterator.hasNext()) {
iterator.next();
itérator.remove();
}
Si aucun appel à la méthode next() ne correspond à
celui de la méthode remove(), une exception de type
IllegalStateException est levée
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Les listes
• Une liste est une collection ordonnée
d'éléments qui autorise d'avoir des
doublons.
• Etant ordonnée, un élément d'une liste peut
être accédé à partir de son index.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface List
• Cette interface étend l'interface Collection.
• Les collections qui implémentent cette interface
autorisent les doublons dans les éléments de la
liste.
• Ils autorisent aussi l'insertion d'éléments null.
• L'interface List propose plusieurs méthodes pour
un accès à partir d'un index aux éléments de la
liste. La gestion de cet index commence à zéro.
• Pour les listes, une interface particulière est
définie pour assurer le parcours dans les deux sens
de la liste et assurer des mises à jour : l'interface
ListIterator
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
import java.util.*;
public class ListExemple {
public static void main(String args[]) {
List list = new ArrayList();
list.add("ALI");
list.add("MOHAMED");
list.add("SARA");
list.add("ILHAM");
list.add("NAWAL");
System.out.println(list);
System.out.println("2: " + list.get(2));
System.out.println("0: " + list.get(0));
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface ListIterator
• Cette interface définit des méthodes pour parcourir
la liste dans les deux sens et effectuer des mises à
jour qui agissent par rapport à l'élément courant dans
le parcours.
• En plus des méthodes définies dans l'interface
Iterator dont elle hérite, elle définit les méthodes
suivantes :
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Les ensembles
• Un ensemble (Set) est une collection qui
n'autorise pas l'insertion de doublons.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface Set
• Cette classe définit les méthodes d'une collection qui
n'accepte pas de doublons dans ces éléments. Elle hérite de
• l'interface Collection mais elle ne définie pas de nouvelle
méthode.
• Pour déterminer si un élément est déjà inséré dans la
collection, la méthode equals() est utilisée.
• Le framework propose deux classes qui implémentent
l'interface Set : TreeSet et HashSet
• Le choix entre ces deux objets est liés à la nécessité de trié
les éléments :
• · les éléments d'un objet HashSet ne sont pas triés :
l'insertion d'un nouvel élément est rapide
• · les éléments d'un objet TreeSet sont triés : l'insertion d'un
nouvel éléments est plus long
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface SortedSet
• Cette interface définit une collection de type
ensemble triée. Elle hérite de l'interface Set.
• Le tri de l'ensemble peut être assuré par deux
façons :
• · les éléments contenus dans l'ensemble
implémentent l'interface Comparable pour définir
leur ordre naturel
• · il faut fournir au constructeur de l'ensemble un
objet Comparator qui définit l'ordre de tri à utiliser
• Elle définit plusieurs méthodes pour tirer parti de
cette ordre :
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La classe HashSet
• Cette classe est un ensemble sans ordre de
tri particulier.
• Les éléments sont stockés dans une table de
hashage : cette table possède une capacité.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemples
import java.util.*;
public class TestHashSet {
public static void main(String args[]) {
Set set = new HashSet();
set.add("CCCCC");
set.add("BBBBB");
set.add("DDDDD");
set.add("BBBBB");
set.add("AAAAA");
Iterator iterator = set.iterator();
while (iterator.hasNext())
{System.out.println(iterator.next());}}}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La classe TreeSet
• Cette classe est un arbre qui représente un ensemble trié
d'éléments.
• Cette classe permet d'insérer des éléments dans n'importe
quel ordre et de restituer ces éléments dans un ordre précis
lors de son parcours.
• L'implémentation de cette classe insère un nouvel élément
dans l'arbre à la position correspondant à celle déterminée
par l'ordre de tri.
• L'insertion d'un nouvel élément dans un objet de la classe
TreeSet est donc plus lent mais le tri est directement
effectué.
• L'ordre utilisé est celui indiqué par les objets insérés si ils
implémentent l'interface Comparable pour un ordre de tri
• naturel ou fournir un objet de type Comparator au
constructeur de l'objet TreeSet pour définir l'ordre de tri.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple
import java.util.*;
public class TestTreeSet {
public static void main(String args[]) {
Set set = new TreeSet();
set.add("CCCCC");
set.add("BBBBB");
set.add("DDDDD");
set.add("BBBBB");
set.add("AAAAA");
Iterator iterator = set.iterator();
while (iterator.hasNext())
{System.out.println(iterator.next());}}}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface Map
• Cette interface est une des deux racines de
l'arborescence des collections.
• Les collections qui implémentent cette
interface ne peuvent contenir des doublons.
Les collections qui implémentent cette
interface utilise une association entre une
clé et une valeur.
• Elle définit plusieurs méthodes pour agir sur
la collection :
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface SortedMap
• Cette interface définit une collection de type Map
triée sur la clé. Elle hérite de l'interface Map.
• Le tri peut être assuré par deux façons :
• · les clés contenues dans la collection
implémentent l'interface Comparable pour définir
leur ordre naturel
• · il faut fournir au constructeur de la collection un
objet Comparator qui définit l'ordre de tri à utiliser
• Elle définit plusieurs méthodes pour tirer parti de
cette ordre :
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La classe Hashtable
• Cette classe qui existe depuis le premier jdk
implémente une table de hachage.
• La clé et la valeur de chaque élément de la
collection peut être n'importe quel objet non nul.
• A partir de Java 1.2 cette classe implémente
l'interface Map.
• Une des particularités de classe HashTable est
quelle est synchronisée.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
import java.util.*;
public class TestHashtable {
public static void main(String[] args) {
Hashtable htable = new Hashtable();
htable.put(new Integer(3), "données
3");
htable.put(new Integer(1), "données
1");
htable.put(new Integer(2), "données
2");
System.out.println(htable.get(new
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La classe TreeMap
• Cette classe gère une collection d'objets sous la
forme clé/valeur stockés dans un arbre de type
rouge?noir (Red?black tree).
• Elle implémente l'interface SortedMap. L'ordre
des éléments de la collection est maintenu grace à
un objet de type Comparable.
• Elle possède plusieurs constructeurs dont un qui
permet de préciser l'objet Comparable pour définir
l'ordre dans la collection.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple
import java.util.*;
public class TestTreeMap {
public static void main(String[] args) {
TreeMap arbre = new TreeMap();
arbre.put(new Integer(3), "données 3");
arbre.put(new Integer(1), "données 1");
arbre.put(new Integer(2), "données 2");
Set cles = arbre.keySet();
Iterator iterator = cles.iterator();
while (iterator.hasNext()) {
System.out.println(arbre.get(iterator.next()));
}}}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La classe HashMap
• La classe HashMap est similaire à la classe
Hashtable. Les trois grandes différences sont :
• · elle est apparue dans le JDK 1.2
• · elle n'est pas synchronisée
• · elle autorise les objets null comme clé ou valeur
• Cette classe n'étant pas synchonisée, pour assurer
la gestion des accès concurents sur cet objet, il
faut l'envelopper dans un objet Map en tulisant la
méthode synchronizedMap de la classe Collection.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface Comparable
• Tous les objets qui doivent définir un ordre naturel utilisé
par le tri d'une collection avec cet ordre doivent
implémenter cette interface.
• Cette interface ne définit qu'une seule méthode : int
compareTo(Object).
• Cette méthode doit renvoyer :
• · une valeur entière négative si l'objet courant est inférieur à
l'objet fourni
• · une valeur entière positive si l'objet courant est supérieur à
l'objet fourni
• · une valeur nulle si l'objet courant est égal à l'objet fourni
• Les classes wrappers, String et Date implémentent cette
interface.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'interface Comparator
• Cette interface représente un ordre de tri quelconque. Elle
est utile pour permettre le tri d'objet qui n'implémente pas
l'interface Comparable ou pour définir un ordre de tri
différent de celui défini avec Comparable ( l'interface
Comparable représente un ordre naturel : il ne peut y en
avoir qu'un)
• Cette interface ne définit qu'une seule méthode : int
compare(Object, Object).
• Cette méthode compare les deux objets fournis en paramètre
et renvoie :
• · une valeur entière négative si le premier objet est inférieur
au second
• · une valeur entière positive si le premier objet est supérieur
au second
• · une valeur nulle si les deux objets sont égaux
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple
import java.util.*;
public class TestUnmodifiable{
public static void main(String args[])
{
List list = new LinkedList();
list.add("1");
list.add("2");
list = Collections.unmodifiableList(list);
list.add("3");
}}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
import java.util.*;
public class TestSynchronized{
public static void main(String args[])
{
List maList = new LinkedList();
maList.add("1");
maList.add("2");
maList.add("3");
maList = Collections.synchronizedList(maList);
synchronized(maList) {
Iterator i = maList.iterator();
while (i.hasNext())
System.out.println(i.next());}}}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Les exceptions du
framework
• L'exception de type
UnsupportedOperationException est levée lorsque
qu'une opération optionnelle n'est pas supportée
par l'objet qui gère la collection.
• L'exception ConcurrentModificationException est
levée lors du parcours d'une collection avec un
objet Iterator et que cette collection subi une
modification structurelle.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
L'héritage
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Un cas concret
• La classe Voiture représente toutes sortes de
voitures possibles
• On pourrait définir un camion comme une voiture
très longue, très haute, etc.
• Mais un camion a des spécificités vis-à-vis des
voitures : remorque, cargaison, boîte noire, etc.
• On pourrait créer une classe Camion qui ressemble
à la classe Voiture
• Mais on ne veut pas réécrire tout ce qu'elles ont en
commun
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Solution
Vehicule
Voiture Camion
Objectif de l'héritage
• On souhaite ne décrire qu'une seule fois le même
traitement lorsqu'il s'applique à plusieurs classes
• Evite de recopier (notamment les modifications)
• On crée une classe plus générique à laquelle
s'applique le traitement
• Toutes les classes plus spécifiques, héritant de cette
classe, héritent de ce traitement, elles peuvent
l'exécuter
• Le traitement n'est décrit qu'au niveau de la classe
mère
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Usage de l'héritage
• Une classe spécifique hérite des méthodes et des
attributs de sa classe mère (sauf ceux qui sont
privés)
• On n'a pas besoin de les réécrire pour la classe fille
• On peut cependant redéfinir une méthode de la
classe mère dans la classe fille (de même signature)
• Le constructeur d'un objet doit toujours commencer
par appeler le constructeur de sa classe mère
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
héritage : Exemple 1
class Vehicule {
// Vehicule() {}
}
Exemple 1 : suite
class Garagiste {
public boolean garer(Vehicule v)
{
v.demarrer();
for (int pl=0;pl<nbPlaces;++pl)
{
if (place[pl].estLibre())
{
v.amener(place[pl]);
v.arreter();
return true;
}
}
System.out.println(« Aucune place libre »);
return false;
}
}
On peut appliquer la méthode garer() à une Voiture, un Camion…
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
// classe de base
class Point
{ public void initialise (int abs, int ord)
{ x = abs ; y = ord ; }
public void deplace (int dx, int dy)
{ x += dx ; y += dy ; }
public void affiche ()
{ System.out.println ("Je suis en " + x + " " + y) ; }
protected int x, y ;
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Construction et
initialisation des objets
dérivés
super() et super
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La méthode super()
• super() permet d'appeler le constructeur de la
classe mère
• C'est la première chose à faire dans la construction
d'une sous-classe
• Appeler le constructeur de la classe mère garantit
que l’on peut initialiser les arguments de la classe
mère
• On passe les paramètres nécessaires
• Si l’on n’indique pas super(), appel du
constructeur par défaut de la classe mère
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
super() : Exemple
{ public Point (int x, int y)
{ this.x = x ; this.y = y ;
}
public void deplace (int dx, int dy)
{ x += dx ; y += dy ;
}
public void affiche ()
{ System.out.println ("Je suis en " + x + " " + y) ;
}
protected int x, y ;
}
class Pointcol extends Point
{ public Pointcol (int x, int y, byte couleur)
{ super (x, y) ; // obligatoirement comme première instruction
this.couleur = couleur ;
}
public void affichec ()
{ affiche() ;
System.out.println (" et ma couleur est : " + couleur) ;
}
private byte couleur ;
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
super() : Exemple(suite)
public class TstPcol3
{ public static void main (String args[])
{ Pointcol pc1 = new Pointcol(3, 5, (byte)3) ;
pc1.affiche() ; // attention, ici affiche
pc1.affichec() ; // et ici affichec
Héritage
et appel de méthodes
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Héritage et visibilité
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Héritage et visibilité
• Une classe fille hérite des attributs et
méthodes public et protected de la classe mère
• Elle n’hérite pas des attributs et méthodes
private
• La classe mère ne voit que ce qui est public
dans la classe fille
• Un objet d’une classe mère n’hérite pas des
attributs et méthodes de ses classes filles
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
visibilité : exemple
class Vehicule {
protected double longueur;
}
Surcharge (rappel)
• On appelle surcharge le fait d’avoir plusieurs
méthodes qui ont le même nom au sein de la
même classe
• Les exemplaires de la méthode ont des
paramètres différents
• Ils peuvent avoir le même type de retour
• Par contre, impossible d’avoir des types de
retour différents pour les mêmes paramètres
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Surcharge : exemple
class Additionneur {
static int somme(int a, int b)
{
return (a+b);
}
static int somme(int a, int b, int c)
{
return (a+b+c);
}
}
Redéfinition
• On appelle redéfinition d’une méthode le fait
de définir dans une classe fille une méthode
qui a le même nom, les mêmes paramètres et
le même type de retour qu’une méthode de la
classe mère
• La méthode redéfinie « masque » celle de la
classe mère
• Ne pas confondre avec surcharge : paramètres
différents
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Redéfinition : exemple
class Personne{
void garer(Vehicule v)
{
v.demarrer();
//…
}
}
Surcharge ou redéfinition ?
class Personne{
void garer(Vehicule v)
{
v.demarrer();
//…
}
}
Redéfinition et Surcharge
• Quand il y a des paramètres différents, mais
qui héritent les uns des autres…
• Ils sont vus comme effectivement différents
• C’est donc un cas de surcharge
• La méthode appelée sera celle dont les
paramètres sont du type le plus spécialisé qui
correspondent au type d’appel
• Le choix est fait à la compilation
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Le typage dynamique
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
• p1.moveTo(1,2);
• pc1 = p2;
• pc1 = (PointCol) p2;
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Solution
• Point p1 = new Point(); // OK
• Point p2 = new PointCol(); // OK
• PointCol pc1 = new PointCol(); // OK
• PointCol pc2 = new Point(); // erreur compilation
• p1.moveTo(1,2); // OK
• pc1 = p2; // erreur compilation (!)
• pc1 = (PointCol) p2; // OK (cast)
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemples de synthèse
Cet exemple comporte trois classes :
• la classe Nom qui représente un nom de famille. Cette classe
comporte comme attribut une chaîne de caractères qui s'appelle
nom, un constructeur et une méthode qui retourne une chaîne de
caractères qui est l'inverse de nom.
• la classe Identite qui représente l'identité d'une personne.
Cette classe étend la classe Nom. Du point de vue de la syntaxe,
cela se lit sur l'en-tête de la classe Identite : class Identite
extends Nom
On dit aussi, et cela a la même signification, que la classe
Identite hérite de la classe Nom. On dit encore que la classe
Nom est la super-classe de la classe Identite. On dit enfin que la
classe Identite est une sous-classe de la classe Nom.
La conséquence de cette héritage est que l'attribut et la
méthodes de la classe Nom appartiennent aussi à la classe
Identite. On peut si on le veut ajouter des attributs et des
méthodes supplémentaires à la classe Identite. C'est ce qui est
fait ici avec l'attribut prenom et la méthode toString.
Les instances de la classe Identite sont aussi des instances de la
la classe Nom.
• la classe PremierHeritage qui instancie la classe Identite et l'utilise.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Nom {
String nom;
Nom(String nom) { this.nom = nom; }
String renverseNom()
{ StringBuffer envers=new StringBuffer(nom);
for (int i=0;i< nom.length();i++)
envers.setCharAt(i,nom.charAt(nom.length() – i -1));
return envers.toString(); }
}
class Identite extends Nom {
String prenom;
Identite(String prenom, String nom)
{ super(nom);
this.prenom = prenom; }
public String toString() {
return prenom+" "+nom; } }
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class AvecSuper {
public static void main(String[] arg) {
Inferieure unInferieure = new
Inferieure(); unInferieure.affiche(); } }
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Phénomènes de masquage
class Sup {
int i=1;
void affiche() {
System.out.println("je suis en-haut "); } }
class Inf extends Sup {
int i=2;
void affiche() {
System.out.println("je suis en-bas"); } }
class Point
{ public Point () // constructeur 1 (sans argument)
{x=0; y=0;
}
public Point (int abs) // constructeur 2 (un argument)
{ x = y = abs ;
}
public Point (int abs, int ord ) // constructeur 3 (deux arguments)
{ x = abs ; y = ord ;
}
public void affiche ()
{ System.out.println ("Coordonnees : " + x + " " + y) ;
}
private int x, y ;
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
{ public Point(int abs, int ord)
{ x = abs ;
y = ord ;
System.out.println ("constructeur deux arguments : " + x + " " + y) ;
}
public Point()
{ this (0,0) ; // appel Point (0,0) ; doit etre la premiere instruction
System.out.println ("constructeur sans argument") ;
}
private int x, y ;
}
public class Consthis
{ public static void main (String args[])
{ Point a = new Point (1, 2) ;
Point b = new Point() ;
}
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class A
{ public void f(float x)
{ System.out.println ("f(float) x = " + x ) ;
}
private void f(int n)
{ System.out.println ("f(int) n = " + n) ;
}
public void g()
{ int n=1 ; float x=1.5f ;
System.out.println ("--- dans g ") ;
f(n) ; f(x) ;
}
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La méthode main()
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class param
{
public static void main(String args[])
{
String param0;
int param1;
Float param2;
System.out.println("le nombre de paramètre passé est :" + args.length);
param0 = args[0];
param1 = Integer.parseInt(args[1]);
param2 = Float.valueOf(args[2]);
System.out.println("le paramètre 1 est égal :" + param0);
System.out.println("le paramètre 2 est égal :" + param1);
System.out.println("le paramètre 3 est égal :" + param2);
}
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Affectation et comparaison
d’objets
• Supposons que nous disposions d’une classe
point possédant un constructeur à deux
arguments.
• Point A,B;
• A=new point(3,5);
• B =new point(2,0);
• A=B;//dans ce cas A et B désigne le même
objet et non deux objets de même valeur.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
La notion de clone
• La démarche la plus réaliste c’est de prévoire une
méthode destinée à fournir une copie de l’objet
concerné.
class point{
…
Public point copie(){
Point p =new point(x,y);
p.x=x;p.y=y;return p;}
…
Point a=new point(1,2);
Point b=a.copie();//b est une copie conforme de a
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Comparaison d’objets
• Les opérateurs == et != comparent les
références d’objets et non leurs valeurs.
• Point A,B;
• ...
• A==B est vraie uniquement si A et B font
référence à un seul et même objet, et non
pas aux valeur des champs de a et b.
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
{ public Point(int abs, int ord)
{ x = abs ; y = ord ; }
public boolean coincide (Point pt)
{ return ((pt.x == x) && (pt.y == y)) ;
}
private int x, y ;
}
public class Coincide
{ public static void main (String args[])
{ Point a = new Point (1, 3) ;
Point b = new Point (2, 5) ;
Point c = new Point (1,3) ;
System.out.println ("a et b : " + a.coincide(b) + " " + b.coincide(a)) ;
System.out.println ("a et c : " + a.coincide(c) + " " + c.coincide(a)) ;
}
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
{ public Point(int abs, int ord)
{ x = abs ; y = ord ;
}
public void permute (Point a) // methode d'echange les coordonnees
// du point courant avec celles de a
{ Point c = new Point(0,0) ;
c.x = a.x ; c.y = a.y ; // copie de a dans c
a.x = x ; a.y = y ; // copie du point courant dans a
x = c.x ; y = c.y ; // copie de c dans le point courant
}
public void affiche ()
{ System.out.println ("Coordonnees : " + x + " " + y) ;
}
private int x, y ;
}
public class Permute
{ public static void main (String args[])
{ Point a = new Point (1, 2) ;
Point b = new Point (5, 6) ;
a.affiche() ; b.affiche() ;
a.permute (b) ; a.affiche() ; b.affiche() ; }}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Point
{ public Point(int abs, int ord)
{ x = abs ; y = ord ; }
public Point symetrique()
{ Point res ;
res = new Point (y, x) ;
return res ; }
public void affiche ()
{ System.out.println ("Coordonnees : " + x + " " + y) ; }
private int x, y ;
}
public class Sym
{ public static void main (String args[])
{ Point a = new Point (1, 2) ;
a.affiche() ;
Point b = a.symetrique() ;
b.affiche() ; }}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
Exemple :
Class test{
…
Public long fac(long n){
If (n>1) return (fac(n-1)*n);
else return 1;}
…
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com
class Util
{ public static long fac (long n)
{ long res ;
System.out.println ("** entree dans fac : n = " + n) ;
if (n<=1) res = 1 ;
else res = fac(n-1) * n ;
System.out.println ("** sortie de fac : res = " + res) ;
return res ;
}
}
public class TstFac2
{ public static void main (String [] args)
{ int n=Integer.parseInt(args[0]);
System.out.println ("Voici sa factorielle : " + Util.fac(n) ) ;
}
}
Ce document a été fabriqué par PDFmail (Copyright RTE Multimedia)
http://www.pdfmail.com