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