Programmation Orientée Objet - Licence TIS CM5/9

Transcription

Programmation Orientée Objet - Licence TIS CM5/9
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Programmation Orientée Objet - Licence TIS
CM5/9
Lancelot Pecquet
[email protected]
Poitiers, le 06/02/2006
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
1
Interruptions
2
Paquetages
3
Javadoc
4
Collections et itérateurs (interface Collection)
5
Quelques nouveautés de Java 1.5
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Rappel sur la séance précédente
La fois précédente, nous avons vu :
1
les classes abstraites
2
l’héritage multiple et les interfaces
Aujourd’hui, nous voyons :
1
interruptions
2
paquetages
3
javadoc
4
collections et itérateurs
5
quelques nouveautés de Java 1.5
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Principe des interruptions
Il est plus clair de séparer cas général et cas particuliers. . .
« premièrement : on appuie sur le bouton copie ;
deuxièmement : on récupère la copie et l’original.
si un problème de bourrage survient, on retire la feuille qui bourre ;
si un problème autre problème survient, on fait réparer le copieur. »
. . . plutôt que de prévoir tous les cas au milieu du programme
« premièrement : on appuie sur le bouton copie ;
si un problème de bourrage survient, on retire la feuille qui bourre ;
si un problème autre problème survient, on fait réparer le copieur ;
sinon (c’est le deuxièmement) : on récupère la copie et l’original. »
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Objectif du mécanisme d’interruption
Objectif
séparer le typique de l’atypique (à traiter à part).
Interruption = rupture du déroulement normal des instructions
Principe : émission avec throw dans un bloc try d’un signal
(Throwable) capté dans un bloc catch.
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Syntaxe try. . . catch et throw
try{
code susceptible de lever une interruption (throw direct ou indirect) ;
}catch(type T1 d’une interruption e1 ){
traitement de l’interruption e1 ;
...
}catch(type Tn d’une interruption en ){
traitement de l’interruption en ;
}finally{ // optionnel
instructions effectuees systematiquement ;
une fois termines l’execution du bloc try et des blocs catch eventuels,
y compris en presence de return, continue ou break,
(sauf, en cas de System.exit()) ;
}
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
De la classe Throwable dérivent :
Error : erreurs graves (non-vérifiée, cf. infra) comme, par
exemple :
StackOverFlowError
OutOfMemoryError
...
Exception pour les autres événements comme, par exemple :
FileNotFoundException (vérifiée, cf. infra)
ArrayIndexOutOfBoundsException (non-vérifiée, cf. infra)
...
Les Throwable ont des constructeurs à paramètre String :
récupérable par getMessage()
affichée par toString(), après le nom de l’exception levée
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Exemple de gestion d’exception
Fichier ProblemePhotocopieuseException.java
1
2
3
4
5
6
7
8
9
class ProblemePhotocopieuseException extends Exception{
public ProblemePhotocopieuseException(){super();}
public ProblemePhotocopieuseException(String s){super(s);}
}
class ProblemeBourragePhotocopieuseException extends ProblemePhotocopieuseException{
public ProblemeBourragePhotocopieuseException(){super();}
public ProblemeBourragePhotocopieuseException(String s){super(s);}
}
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Exemple : Exception et throw (suite)
Méthode bouton copie() du fichier Photocopieuse.java
1
2
3
4
5
6
7
8
9
10
11
// La methode suivante leve une exception (annonce avec throws...):
public void bouton copie() throws ProblemePhotocopieuseException{
System.out.println("Appuie sur copie");
if(R.nextDouble()>0.75){
// R est un generateur pseudo−aleatoire...
if(R.nextDouble()<0.75){
// ...prealablement defini
throw new ProblemeBourragePhotocopieuseException(">>>Bourrage papier");
}else{
throw new ProblemePhotocopieuseException(">>>Autre probleme");
}
}else{setCopieOK(true);}
}
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Exemple : Exception et throw (suite)
Méthode photocopie() du fichier Photocopieuse.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// La methode va capter les ProblemePhotocopieuseException emis par bouton copie()
public void photocopie(int n){
for(int i=0;i<n;i++){
place original(i);
while(!getCopieOK()){
try{bouton copie(); recupere(i);}
catch(ProblemeBourragePhotocopieuseException e){
System.out.println(e.getMessage());
traiter bourrage();
}
catch(ProblemePhotocopieuseException e){
System.out.println(e.getMessage());
reparation();
}
finally{ // toujours execute une fois les blocs try et/ou catch termines
System.out.println("−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−");
}
}
}
}
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Exemple : Exception et throw (suite)
Exemple de sortie (console)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Met l’original de 0 sur la vitre
Appuie sur copie
Recupere l’original 0 et sa copie
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Met l’original de 1 sur la vitre
Appuie sur copie
>>>Autre probleme
Fait reparer la photocopieuse
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
...
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Met l’original de 9 sur la vitre
Appuie sur copie
>>>Bourrage papier
Enleve la feuille qui bourre sous le capot
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Appuie sur copie
Recupere l’original 9 et sa copie
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Exceptions vérifiées et non-vérifiées, RuntimeException
Une situation atypique peut être attendue. . . ou pas :
interruptions vérifiées (Exceptions et héritières directes)
interruptions non-vérifiées (Error, RuntimeException et
héritières) : pas de throws (trop lourd)
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Interruptions vérifiées, deux cas
Traitement local avec un catch (pas de throws)
1
2
3
4
5
6
7
public void photocopie(int n){...
try{bouton copie(); recupere(i);}
catch(ProblemeBourragePhotocopieuseException e){
System.out.println(e.getMessage());
traiter bourrage();
}
...}
Propagation de l’exception vérifiée avec un throws
1
public void bouton copie() throws ProblemePhotocopieuseException{...}
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Interruptions non-vérifiées
Pas de throws pour Error et RuntimeException
1
2
3
4
5
6
7
8
class vecteur{...
private double[] x;
// La ligne suivante ne mentionne pas ‘‘throws ArrayIndexOutOfBoundsException’’...
// ... ni aucune des dizaines d’autres interruptions non−verifiees:
// ce serait ingerable!
public double get x(int i){return x[i];}
...}
Paradoxe !
RuntimeException hérite d’Exception. . .
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Où traiter une interruption ?
Question
Doit-on choisir un traitement local, propager ?
Bref : où traiter une interruption ?
Réponse
On traite une exception là où l’on sait la traiter :
partiellement, avec repropagation (catch, puis throw)
complètement, sans propagation
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des interruptions
Error et Exception
Exemple de gestion d’exception
Exceptions vérifiées et non-vérifiées, RuntimeException
Où traiter une interruption ?
Questions ?
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des paquetages
Structure d’un paquetage dans le système de fichiers
Utilisation d’un paquetage
Principe des paquetages
Objectif
Définir une entité cohérente comportant un certain nombre de
classes.
Avantages
encapsulation simplifiée au sein du paquetage (package)
seuls les services visibles (protected et public) sont visibles
de l’extérieur.
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des paquetages
Structure d’un paquetage dans le système de fichiers
Utilisation d’un paquetage
Sortie d’une commande tree (console)
1
2
3
4
5
6
7
8
9
10
$ tree
|−− Recettes
|
|−− Plats
|
|
|−− PotAuFeu.class
|
|
‘−− PotAuFeu.java
|
‘−− Tartes
|
|−− Pommes.class
|
‘−− Pommes.java
|−− dejeuner.class
‘−− dejeuner.java
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Principe des paquetages
Structure d’un paquetage dans le système de fichiers
Utilisation d’un paquetage
Fichier Pommes.java
1
2
3
4
package Recettes.Tartes;
public class Pommes{ // classe publique => connue en dehors du package:
public String toString(){return "Tarte aux pommes";}
}
Fichier dejeuner.java
1
2
3
4
5
6
7
8
9
import Recettes.Plats.PotAuFeu;
class dejeuner{
public static void main(String[] args){
PotAuFeu plat = new PotAuFeu();
// Espace de noms implicite
Recettes.Tartes.Pommes dessert = new Recettes.Tartes.Pommes(); // Nom complet
System.out.println("Votre plat: " + plat + "votre dessert: " + dessert);
}
}
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Principe des paquetages
Structure d’un paquetage dans le système de fichiers
Utilisation d’un paquetage
Questions ?
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Construction d’une javadoc
Consultation d’une javadoc
Utilisation courante de javadoc
Quelques mots-clés
Construction d’une javadoc
Programmation documentée dans le source foo.java
1
2
3
4
5
/∗∗ Cette classe sert a donner un exemple de <b>javadoc</b>
@author <a href="http://lancelot.pecquet.org">Lancelot Pecquet</a>
@version 1.0 (2004−04−06)
∗/
public class foo{...}
On produit la documentation dans un répertoire doc (console)
1
2
3
4
5
6
7
8
$ mkdir doc
$ javadoc −d doc foo.java
$ ls doc
allclasses−frame.html
help−doc.html
allclasses−noframe.html index−all.html
constant−values.html
index.html
deprecated−list.html
overview−tree.html
foo.html
package−frame.html
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
package−list
package−summary.html
package−tree.html
resources
stylesheet.css
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Construction d’une javadoc
Consultation d’une javadoc
Utilisation courante de javadoc
Quelques mots-clés
Consultation d’une javadoc
Le fichier foo.html peut être lu avec un navigateur (Firefox. . .)
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Construction d’une javadoc
Consultation d’une javadoc
Utilisation courante de javadoc
Quelques mots-clés
Utilisation courante de javadoc
http ://java.sun.com/j2se/1.5.0/docs/api/index.html. . .
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Construction d’une javadoc
Consultation d’une javadoc
Utilisation courante de javadoc
Quelques mots-clés
Quelques mots-clés
@author : auteur de la classe ;
@version : numéro de version de la classe ;
@return : commentaire d’une variable retournée par une
méthode ;
@exception : commentaire d’une exception levée dans une
méthode ;
@see : lien vers la documentation d’une classe.
@param : commentaire d’un argument d’une méthode ;
@since : code ajouté depuis une date donnée.
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Construction d’une javadoc
Consultation d’une javadoc
Utilisation courante de javadoc
Quelques mots-clés
Questions ?
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Interface Collection
Dérive de Collection :
Set : chaque élément n’apparaı̂t qu’une fois ;
SortedSet (dérive de Set) : les éléments sont ordonnés ;
List : chaque élément peut apparaı̂tre plusieurs fois
(ordonnée) ;
Map : application définie par un tableau associatif (clé,valeur) ;
SortedMap (dérive de Map) : les clés sont ordonnées.
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Méthodes de Collection
void add(Object o)
void addAll(Collection c)
void clear()
boolean contains(Object o)
boolean containsAll(Collection c)
boolean equals(Object o)
int hashCode()
boolean isEmpty()
Iterator iterator()
boolean remove(Object o)
boolean removeAll(Collection c)
boolean retainAll(Collection c)
int size()
Object[] toArray()
Object[] toArray(Object[] t)
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Méthodes de List
void add(int index, Object element)
boolean addAll(int index, Collection c)
int indexOf(Object o)
int lastIndexOf(Object o)
ListIterator listIterator()
ListIterator listIterator(int index)
Object remove(int index)
Object set(int index, Object element)
List subList(int fromIndex, int toIndex)
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Interface Iterator
Déplacement dans la Collection associée :
boolean hasNext() : fin de l’énumération ?
Object next() : élément suivant (à downcaster).
Modifications locales :
void add(Object o) : ajoute un objet ;
void remove() : enlève l’objet courant.
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Utilisation sur une Collection K d’objets de type A
1
2
3
4
5
Iterator it = K.iterator();
while(it.hasNext()){
x = (A)it.next();
// downcast ou ClassCastException
System.out.println(x);
// par exemple
}
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Implémentations de Set
HashSet implémente l’interface Set par une table de hachage.
Opérations rapides :
test d’appartenance ;
ajout d’élément ;
retrait d’élément.
peut nécessiter de redéfinir hashCode() et equals().
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Utilisation de HashSet
Code source
1
2
3
4
5
6
7
8
9
10
import java.util.∗;
class Main{
public static void main(String[] args){
HashSet X = new HashSet();
X.add("Liberte"); X.add("Egalite"); X.add("Fraternite");
Iterator it = X.iterator();
while(it.hasNext()){System.out.print((String)(it.next()) + " ");}
}
}
Sortie : pas d’ordre défini dans un HashSet
1
Fraternite Egalite Liberte
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Implémentation TreeSet de SortedSet
TreeSet implémente l’interface SortedSet par arbre binaire
équilibré : (préservation de l’ordre).
Opérations relativement rapides :
test d’appartenance ;
ajout d’élément ;
retrait d’élément.
nécessite d’implémenter compareTo() (interface Comparable).
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Utilisation de TreeSet
Code source
1
2
3
4
5
6
7
8
9
10
import java.util.∗;
class Main{
public static void main(String[] args){
TreeSet X = new TreeSet();
X.add("Liberte"); X.add("Egalite"); X.add("Fraternite");
Iterator it = X.iterator();
while(it.hasNext()){System.out.print((String)(it.next()) + " ");}
}
}
Sortie, selon l’ordre lexicographique des String
1
Egalite Fraternite Liberte
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Implémentation ArrayList de List
ArrayList implémente l’interface List par un tableau.
Opérations rapides :
accès au i-ième élément ;
Opérations lentes :
ajout/retrait d’un élément en début de liste (copie) ;
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Implémentation LinkedList de List
ArrayList implémente l’interface List par une liste doublement
chaı̂née.
Opérations rapides :
ajout/retrait d’un élément ;
Opérations lentes :
accès à un élément central (parcours linéaire) ;
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Utilisation de LinkedList
Code source
1
2
3
4
5
6
7
8
9
10
import java.util.∗;
class Main{
public static void main(String[] args){
LinkedList X = new LinkedList();
X.add("Liberte"); X.add("Egalite"); X.add("Fraternite");
Iterator it = X.iterator();
while(it.hasNext()){System.out.print((String)(it.next()) + " ");}
}
}
Sortie, selon l’ordre d’insertion des éléments
1
Liberte Egalite Fraternite
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Implémentation HashMap de Map
HashMap implémente l’interface Map par une table de hachage.
Opérations rapides :
calcul de valeur (= appartenance d’une clé) ;
définition d’une image (ajout d’un couple clé-valeur) ;
changement d’une image (retrait/ajout d’un couple
clé-valeur) ;
peut nécessiter de redéfinir hashCode() et equals() des clés.
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Implémentation TreeMap de SortedMap
TreeMap implémente l’interface SortedMap par un arbre binaire
équilibré.
Opérations relativement rapides :
calcul de valeur (= appartenance d’une clé) ;
définition d’une image (ajout d’un couple clé-valeur) ;
changement d’une image (retrait/ajout d’un couple
clé-valeur) ;
nécessite d’implémenter compareTo() (interface Comparable).
Lancelot Pecquet ([email protected])
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interface Collection
Interface Iterator
Implémentation HashSet de Set
Implémentations de List
Implémentations de Map
Questions ?
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Types génériques de Java 1.5
Java < 1.4 : tout est Object (risque de ClassCastException)
1
2
3
ArrayList list = new ArrayList();
list.add(0, new Integer(42));
int total = ((Integer)list.get(0)).intValue();
Java 1.5 : types génériques vérifiés à la compilation
1
2
3
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = list.get(0).intValue();
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Autoboxing des classes enveloppantes de types primitifs
Sans autoboxing : code lourd
1
2
3
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = (list.get(0)).intValue();
Avec autoboxing : code allégé
1
2
3
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, 42);
int total = list.get(0);
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Boucles for allégées
Boucle for sans allègement
1
2
3
4
ArrayList<Integer> list = new ArrayList<Integer>();
for (Iterator i = list.iterator(); i.hasNext();) {
Integer value=(Integer)i.next();
}
Boucle for allégées
1
2
ArrayList<Integer> list = new ArrayList<Integer>();
for (Integer i : list) { ... }
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Types énumérés
1
2
enum StopLight { red, amber, green };
System.out.println(StopLight.red);
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Formatage des entrées/sorties (java.util.Formatter)
Formatage des sorties
1
2
System.out.printf("name count%n");
System.out.printf("%s %5d%n", user,total);
Noter l’utilisation de %n au lieu de \n (portabilité).
Formatage des entrées
1
2
3
4
Scanner s= new Scanner(System.in);
String param= s.next();
int value=s.nextInt();
s.close();
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Nombre d’arguments variable
1
2
3
4
5
6
void argtest(Object ... args){
for (int i=0;i <args.length; i++) {
...
}
}
argtest("test", "data");
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Questions ?
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
Types génériques
Autoboxing des classes enveloppantes de types primitifs
Boucles for allégées
Types énumérés
Formatage des entrées/sorties
Nombre d’arguments variable
Conclusion
Aujourd’hui, nous avons vu :
1
2
3
4
5
Interruptions
Paquetages
Javadoc
Collections et itérateurs (interface Collection)
Quelques nouveautés de Java 1.5
La séance prochaine, nous verrons :
1
égalité
2
transtypage
3
comparabilité
4
clonage
Lancelot Pecquet ([email protected])
POO - Licence TIS - CM5/9 – Poitiers, le 23/01/2006