La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 Cours JAVA / Y.Laborde Java : Le Collections Framework (JCF) Java Collections Framework : Introduction(diapo 2) La JCF (6) Les interfaces (6) Les implémentations.

Présentations similaires


Présentation au sujet: "1 Cours JAVA / Y.Laborde Java : Le Collections Framework (JCF) Java Collections Framework : Introduction(diapo 2) La JCF (6) Les interfaces (6) Les implémentations."— Transcription de la présentation:

1 1 Cours JAVA / Y.Laborde Java : Le Collections Framework (JCF) Java Collections Framework : Introduction(diapo 2) La JCF (6) Les interfaces (6) Les implémentations (classes) (7) Les interfaces Collection (8) Les classes Collection (9) Les interfaces Map (10) Les classes Map (11) Détails (12) Comment spécialiser une classe du JCF (16) Les Wrappers (18) Interopérabilité entre API (22) Compatibilité entre API Java (22) Guide de bon usage du JCF (23)

2 2 JCF : Introduction (1) Cours JAVA / Y.Laborde Le Java Collections Framework (Java SE 6) utilise abondamment des classes déclarées comme des types génériques. Malgré une complexité apparente, ces classes sont très simples demploi. Ex: public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable public abstract class AbstractList extends AbstractCollection implements List public interface List extends Collection public interface Collection extends Iterable public interface Iterable Ici, nous supposons que lusage de types génériques est connu. Quest-ce quune collection (au sens général) ? Voir The Java Tutorials : JCF = Java Collections Framework = Bibliothèque de classes Java spécialisées pour les collections Une collection est simplement un objet qui regroupe de multiples éléments dans une unité unique – une classe en Java. Les collections sont utilisées pour ajouter, récupérer, manipuler et, plus généralement, pour communiquer avec les éléments agrégés. Typiquement, elles représentent des éléments de données qui forment naturellement un groupe, comme : une main de poker (une collection de cartes), un dossier de mail (une collection de messages), un répertoire de téléphone (une association de noms avec des numéros de téléphone). ATTENTION : les collections nont été introduites (sous la forme dun Framework) que depuis la version 5.0 du JDK (J2SE 1.4) => (J2SE 1.5 =J2SE 5.0) => (Java SE 6). Java SE 6: We recommend using the Java SE 6 specification even when writing programs for older releases.

3 3 JCF : Introduction (2) Cours JAVA / Y.Laborde Quest-ce quun Collections Framework ? Un Collections Framework est une architecture unifiée pour représenter et manipuler des collections. Tous les Collections Frameworks contiennent : des interfaces : Ce sont des types abstraits qui permettent de manipuler les différents types de collections, indépendamment des détails de leur représentation. des implémentations :Ce sont les implémentations concrètes des interfaces de collections. Ce sont des structures de données réutilisables. des algorithmes :Ce sont des méthodes qui réalisent des traitements spécifiques, comme la recherche ou le tri, sur les objets qui implémentent les interfaces de collections. Les algorithmes sont dits « polymorphiques » car les mêmes méthodes peuvent être utilisées à partir de multiples implémentations différentes dinterfaces de collections appropriées. Ce sont des fonctionnalités réutilisables. En Orienté-Objet, les implémentations et les algorithmes sont réunis dans des classes organisées hiérarchiquement. En Java, les interfaces sont un élément même du langage. Exemple dautres Collections Framworks : - la C++ Standard Template Library (STL) - la hiérarchie de collection de Smalltalk En comparaison, le hiérarchie de collections de Java est beaucoup plus aisée dapprentissage.

4 4 JCF : Introduction (3) Cours JAVA / Y.Laborde Quels sont les bénéfices du Java Collections Framework ? Daprès Sun System, le JCF apporte les avantages suivants : il réduit leffort de programmation : en libérant le programmeur de toute la gestion des structures de données et algorithmes ayant traits aux collections et donc en permettant de se concentrer sur les parties importantes du programme. il augmente la vitesse et la qualité des programmes : les implémentations des structures et des algorithmes du JCF sont de hautes performances et une grande qualité. Les différentes implémentations sont interchangeables ; il est ainsi facile de passer dun type de collection à un autre. il autorise linteropérabilité avec les autres API : car les autres API peuvent échanger leur propres collections par le biais des interfaces vernaculaires du JCF qui en effectue lui-même linteropérabilité. il diminue leffort dapprentissage de nouvelles API : car les nouvelles API utiliseront maintenant les mêmes collections Java en entrée et les fourniront également en sortie. il diminue leffort de développement de nouvelles API : par le biais des interfaces et implémentations standards de collections du JCF prévues pour la spécialisation. il décuple la réutilisabilité des programmes : de par la conformité aux interfaces standards de collections du JCF, les nouvelles structures de données et aussi les nouveaux algorithmes sont naturellement réutilisables sur les objets qui opèrent avec ses interfaces.

5 5 JCF : Introduction (4) Cours JAVA / Y.Laborde Trois nouvelles fonctionnalités du langage Java accroissent sensiblement la puissance du JCF : Nouvelles fonctionnalités du langage Java utilisées dans le cadre du JCF (J2SE 6.0) généricité – ajout de linférence de typage qui certifie que les typages génériques sont correctement résolus dès la compilation + élimination de la nécessité de coercitions explicites (cast) lors de la lecture des éléments des collections, amélioration des boucles – nouvelle syntaxe adaptée à litération des collections et des tableaux (dite instruction « for each » ou « enhanced for »), Ex: class EnhancedForDemo { public static void main (String[] args){ int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) { // itération sur les éléments du tableau System.out.println ( "Elément : " + item ); } Autoboxing/unboxing – cest une partie de linteropérabilité par la conversion automatique des types primitifs (comme int) en leurs homologues objets (comme Integer) lors de leur insertion dans des collections, et inversement lors de leur lecture depuis des collections.

6 6 JCF : Les interfaces* Cours JAVA / Y.Laborde Les interfaces de collection sont le cœur du JCF ; elles permettent de manipuler les collections indépendamment des détails de leurs représentations. Les programmeurs devront être attentifs à ne conserver de référence sur une collection quau travers des interfaces (et non au travers des classes vraies ou apparentes des collections). Ex1: Set pioche = new HashSet ( ); // le HashSet est désormais vu comme un Set Ex2: Collection pioche = new HashSet ( ); // le HashSet est désormais vu comme une Collection Ici, Set et Collection sont bien sûr des interfaces ! Les interfaces de collections (core collection interfaces) Note1: la hiérarchie est faite de deux hiérarchies principales distinctes. Lune initiée par Collection, lautre par Map. Note2: toutes les interfaces de collection sont génériques. ex:la déclaration de Collection est : public interface Collection..., la déclaration de Map est : public interface Map... Un Set est une sorte spéciale de Collection ; un SortedSet est une sorte spéciale de Set, etc. * hors package java.util.concurrent

7 7 JCF : Les implémentations* Cours JAVA / Y.Laborde Interfaces Implémentations Table de hachage (Hash Table) Tableau variable (Resizable Array) Arbre équilibré (Balanced Tree) Liste chaînée (Linked List) Hash Table + Linked List Set HashSet, EnumSet LinkedHashSet NavigableSet TreeSet List ArrayList, Vector, Stack LinkedList Queue PriorityQueue Deque ArrayDeque LinkedList Map HashMap, IdentityHashMap WeakHashMap LinkedHashMap NavigableMap TreeMap Pour obtenir des classes synchronisées (thread-safe), utilisez les wrappers de la classe Collections Voir The Java Tutorials : * hors package java.util.concurrent

8 8 JCF : Les interfaces Collection * Cours JAVA / Y.Laborde Collection Set SortedSet NavigableSet List Queue Deque Les interfaces Collection (core Collection interfaces) (en italique : interfaces qui ne sont jamais implémentées directement dans le JCF 6.0) InterfaceCommentaireAccès direct Ordre maintenuDoublons admis Élément null admis Collection Collection générale - groupe dobjetsNon/// Set Ensemble - notion mathématique densembleNon Oui (en g al ) SortedSet Ensemble ordonné – ordre naturel ou à laide dun comparateur (interface Comparator) NonOuiNonOui (en g al ) NavigableSet Ensemble ordonné étendu – pour la recherche ("le(s) précédent(s) de", "le(s) inférieur(s) à", etc.) NonOuiNonNon conseillé List Séquence - collection ordonnéeOui (en g al )OuiOui (en g al ) Queue File dattente – empilement/dépilement dobjets par une des extrémités NonOui: FIFO, LIFO, autre OuiNon Deque File dattente à double sens – op. aux 2 extrémitésNonOui: FIFO+LIFOOuiNon conseillé lire [deck] * hors package java.util.concurrent

9 9 JCF : Les classes Collection * Cours JAVA / Y.Laborde Les interfaces Collection (core Collection interfaces) Collection Set SortedSet NavigableSet List Queue Deque EnumSet > HashSet LinkHashSet TreeSet AbstractSet ArrayList Vector Stack AbstractList AbstractSequentialList LinkedList RandomAccess AbstractCollection ArrayDeque Les classes Collection (core Collection types) Iterable * hors package java.util.concurrent implements AbstractQueue PriorityQueue Pour naccepter quun type enum unique (explicite ou implicite)

10 10 JCF : Les interfaces Map * Cours JAVA / Y.Laborde Les interfaces Map (core Map interfaces) InterfaceCommentaireAccès direct Ordre maintenu Doublons admisÉlément null admis Map Dictionnaire – objets (V) rangées à laide de clés (K)Non Seulement sur VOui (K ou V) SortedMap Dictionnaire ordonné par les clés – ordre naturel ou à laide dun comparateur (interface Comparator) NonOui (K)Seulement sur VOui (K ou V) NavigableMap Dictionnaire ordonné étendu – pour la recherche ("le(s) précédent(s) de", "le(s) inférieur(s) à", etc.) NonOui (K)Seulement sur VOui (K ou V) * hors package java.util.concurrent Map SortedMap NavigableMap Map.Entry (en italique : interfaces qui ne sont jamais implémentées directement dans le JCF 6.0) Linterface Map.Entry (paire de clé/valeur ) : La méthode Map.entrySet() renvoie une collection-view du Map (de type Set >), dont les éléments sont des paires de clé/valeur. Attention, celles-ci restent liées à lobjet Map ! La seule façon d'obtenir une référence à une paires de clé/valeur est dutiliser l'itérateur de cette collection. Les objets Map.Entry ne sont valables que pour la durée de l'itération ; plus formellement, le comportement d'une Map.Entry est indéfini si le Map lié a été modifié après que l'entrée ait été renvoyé par l'itérateur, sauf par le biais de l'opération V setValue(V value) sur la paire de clé/valeur. public static interface

11 11 JCF : Les classes Map* Cours JAVA / Y.Laborde Les interfaces Map (core Map interfaces) Map SortedMap NavigableMap Map.Entry EnumMap,V> HashMap LinkHashMap TreeMap AbstractMap Les classes Map (core Map types) * hors package java.util.concurrent implements IdentityHashMap WeakHashMap AbstractMap.SimpleImmutableEntry Hashtable Properties Dictionary AbstractMap.SimpleEntry public static

12 12 JCF : Détails (1) Cours JAVA / Y.Laborde public interface Collection Cest linterface racine de la hiérarchie des collections. Le JDK ne fournit aucune implémentation directe de linterface Collection ; il fournit des implémentations de sous- interfaces plus spécifiques comme Set ou List. Linterface Collection est typiquement utilisée pour envoyer ou manipuler des collections lorsque quon désire un maximum de généralisation. Toutes les implémentations du JCF qui implémentent Collection (toujours indirectement par le biais de sous- interfaces) fournissent deux constructeurs standards : un constructeur par défaut (sans argument) qui crée une collection vide, un constructeur avec un seul argument de type Collection qui crée une nouvelle collection avec les mêmes éléments que son argument. Ce dernier constructeur permet de transformer nimporte quelle collection en une implémentation dun autre type ! Mais, comme les interfaces ne peuvent contenir de constructeurs, il ny a aucun moyen de rendre obligatoire cette convention. On ne peut donc compter que sur le fait que toutes les implémentations standards du JCF lassument. Voir The Java Tutorials : ATTENTION : Nombre de méthodes des interfaces de collection sont étiquetées « optional ». Les implémentations peuvent ne pas fournir certaines de ces opérations ; si elles sont invoquées, elles déclenchent alors une exception à lexécution (UnsupportedOperationException). Mais les implémentations standards du JCF supportent toutes les opérations optionnelles des interfaces de collection, et nont aucune restriction sur les éléments quelles peuvent contenir.

13 13 JCF : Détails (2) Cours JAVA / Y.Laborde Voir Tutorials & Code Camps (par MageLang Institute): n.html#CollectionInterfacesAndClasses Les interfaces de Collection densembles : Set, SortedSet et NavigableSet Ces interfaces densembles sont implémentées par les classes : - EnumSet, HashSet, LinkedHashSet (: Set) - TreeSet (: NavigableSet)

14 14 JCF : Détails (3) Cours JAVA / Y.Laborde Voir Tutorials & Code Camps (par MageLang Institute): n.html#CollectionInterfacesAndClasses Ces interfaces de files dattente sont implémentées par les classes : - PriorityQueue (: Queue) - ArrayDeque et LinkedList (: Deque) Les interfaces de Collection de files dattente : Queue et Deque Ces interfaces de séquences sont implémentées par les classes : ArrayList, Vector, Stack et LinkedList (: List) Les interfaces de Collection de séquences : List

15 15 JCF : Détails (4) Cours JAVA / Y.Laborde Voir Tutorials & Code Camps (par MageLang Institute): n.html#CollectionInterfacesAndClasses Ces interfaces de dictionnaires sont implémentées par les classes : - EnumMap, HashMap, IdentidyMap, WeakHashMap et LinkedHashMap (: Map) - TreeMap (: SortedMap) Les interfaces de Collection de dictionnaires : Map et SortedMap et Deque Autres interfaces utiles

16 16 JCF : Spécialiser une classe du JCF (1) Cours JAVA / Y.Laborde Par exemple, comment disposer dune liste de dominos qui permette de piocher ? 1) Par dérivation dune classe du JCF public class DominoList extends ArrayList { // Constructeurs public DominoList ( ) { super ( ); } public DominoList (Collection c) { super (c); } // Méthode pioche public Domino piocher ( ) { if ( this.isEmpty ( ) ) return null; int index = (int) (java.lang.Math.random ( ) * this.size ( )); return this.remove (index); } Comment peut-on piocher un domino ? Écrivez un code qui utilise la classe DominoList. 2) A laide dune classe externe public class PiocheInList { // Méthode pioche public static E piocher ( List laPioche) { if ( laPioche.isEmpty ( ) ) return null; int index = (int) (java.lang.Math.random ( ) * this.size ( )); return laPioche.remove (index); } Comment peut-on piocher un domino ? Écrivez un code qui utilise la classe PiocheInList. Piocher un domino List pioche = new ArrayList ( ); pioche.add ( new Domino(1,2) ); etc. if ( ! Pioche.isEmpty ( ) ) { Domino dominoPioché = PiocheInList.piocher (pioche); …} Piocher un domino DominoList pioche = new DominoList ( ); pioche.add ( new Domino(1,2) ); etc. if ( ! Pioche.isEmpty ( ) ) { Domino dominoPioché = pioche.piocher ( ); …} * DominoList est très spécialisée. Elle ne permet de supporter et de ne piocher que des dominos ! * De plus, si on regarde une DominoList au travers de List, on ne peut plus piocher ! * PiocheInList est générique. Elle permet de piocher toutes sortes dobjets mis en liste et pas seulement des dominos ! * La pioche est naturellement vue comme une List dans laquelle on peut toujours piocher !

17 17 JCF : Spécialiser une classe du JCF (2) Cours JAVA / Y.Laborde 3) Par encapsulation dune classe du JCF public class DominoList { // Encapsulation dune ArrayList protected ArrayList laListe; // Constructeurs public DominoList ( ) { this.laListe = new ArrayList ( ); } public DominoList (Collection c) { this.laListe = new ArrayList (c); } // Méthode pioche public Domino piocher ( ) { if ( laListe.isEmpty ( ) ) return null; int index = (int) (java.lang.Math.random ( ) * this.size ( )); return laListe.remove (index); } // Méthodes de liste (à transférer à laListe) public boolean add (Domino d) { return laListe.add (d); } public boolean isEmpty ( ) { return laListe.isEmpty (); } public int size ( ) { return laListe.size (); } etc. public Domino[] toArray ( ) { return laListe.toArray (new Domino[ ]); } } Piocher un domino (identique à la première méthode) DominoList pioche = new DominoList ( ); pioche.add ( new Domino(1,2) ); etc. if ( ! Pioche.isEmpty ( ) ) { Domino dominoPioché = pioche.piocher ( ); …} * Ici, il faudrait implémenter toutes les méthodes de linterface List pour en faire une List ! * Mais, si on regarde une DominoList au travers de List, on ne peut plus piocher ! Chacune de ces 3 techniques a ses avantages propres ! On pourra choisir lune ou lautre.

18 18 JCF : Les Wrappers (1) Cours JAVA / Y.Laborde Les Wrappers permettent dajouter des fonctionnalités aux collections du JCF. On trouve des wrappers pour 6 types de collections : Collection, List, Map, Set, SortedMap, SortedSet. Ils permettent de : o synchroniser des collections (les rendre thread-safe) (ex: public static List synchronizedList(List list) ), o rendre des collections non-modifiables (read-only) (ex: public static List unmodifiableList(List list) ), o rendre des collections type-safe (rendre impossible linsertion déléments dun mauvais type dans une collection) (ex: public static List checkedList(List list, Class type) ). On trouve ces 18 méthodes static dans la classe Collections. ATTENTION: Les opérations accessibles sur la collection synchronisée sont seulement celles de linterface de collection retournée par les wrappers. Voir The Java Tutorials :

19 19 JCF : Wrappers de synchronisation (2) Cours JAVA / Y.Laborde SYNCHRONISER des collections (les rendre thread-safe) : La synchronisation permet de rendre des collections thread-safe. La collection retournée est du même type. Méthodes statics de la classe Collections : public static List synchronizedList (List list), etc. Mais il faudra faire attention à : Ne manipuler la collection quau travers de celle retournée (et non au travers de la collection initiale qui reste liée) : ex1:// OK car pas de référence conservée sur la collection liée List listSync = Collections.synchronizedList ( new ArrayList ( ) ); ex2: // DANGER - NOT OK car référence conservée sur la collection liée List listInitiale = new ArrayList ( );// DANGER : même collection que listSync mais NON SYNCHRONISÉE List listSync = Collections.synchronizedList ( listInitiale ); _____________________________________________________________________________________ Synchroniser manuellement les opérations ditération sur la collection (comportement non déterministe sinon) : ex1:Collection c = Collections.synchronizedCollection (myCollection); synchronized (c) { for (Type e : c) foo (e); } ex2:Map mSync = Collections.synchronizedMap ( new HashMap ( ) ); … Set sKeys = mSync.keySet(); … synchronized (mSync) { while (KeyType k : sKeys) foo (k); } // ATTENTION: synchroniser mSync et non sKeys ! Voir The Java Tutorials :

20 20 JCF : Wrappers de non modif/checked (3) Cours JAVA / Y.Laborde Rendre des collections NON MODIFIABLES (les rendre tread-only) : Méthodes statics de la classe Collections : public static List unmodifiableList (List list), etc. Cela permet soit de rendre une collection définitivement immutable, soit de noffrir à certains clients que le droit de lecture. Toutes les opérations de modification de la collection lèvent lexception UnsupportedOperationException. Voir The Java Tutorials : Rendre des collections TYPE-SAFE (les rendre tread-only) : Méthodes statics de la classe Collections : public static List checkedList (List list, Class type), etc. Cela permet de rendre impossible linsertion déléments dun mauvais type dans une collection. Toutes les tentatives dinsertion dun élément dun mauvais type lèvent lexception ClassCastException. Une application intéressante => le débugging : ex:// CODE RELEASE Collection c = new HashSet ( ); // CODE DEBUG (code remplacé temporairement pour le debugging par :) Collection c = Collections.checkedCollection ( new HashSet ( ), String.class);

21 21 Interop : Compatibilité entre API Java (1) Cours JAVA / Y.Laborde Compatibilité DESCENDANTE ( objets de 1.5 à + méthodes de 1.1 à 1.4 ) : Lorsque vous utilisez une API qui renvoie des nouvelles interfaces de collections en tandem avec un autre API qui exige les anciennes collections. Pour réaliser leur interopération, vous devrez convertir les nouvelles collections en des anciennes collections. Pour Collection=> Array utiliser dans linterface Collection : Object[] toArray () Object ex1:Collection my_new_coll = newMethod ( );oldMethod ( my_new_coll.toArray ( ) ); ex2:Collection my_new_coll = newMethod ( );oldMethod ( (String[]) my_new_coll.toArray (new String[0]) ); ________________________________________________________________________________________________________________________________________________________ Pour Collection=> Vector utiliser dans la classe Vector : public Vector (Collection c) public Vector (Collection c) ex1:Collection my_new_coll = newMethod ( );oldMethod ( new Vector (my_new_coll) ); ________________________________________________________________________________________________________________________________________________________ Pour HashTable utiliser dans la classe Vector : public Hashtable (Map t)V ex1:Map my_new_map = newMethod ( );oldMethod ( new Hashtable (my_new_map) ); ________________________________________________________________________________________________________________________________________________________ Pour Collection=> Enumeration utiliser dans la classe Collections : public static Enumeration enumeration (Collection c) ex: Collection my_new_coll = newMethod (arg); oldMethod ( Collections.enumeration (my_new_coll) ); Voir The Java Tutorials :

22 22 Interop : Compatibilité entre API Java (2) Cours JAVA / Y.Laborde Compatibilité ASCENDANTE ( objets de 1.1 à 1.4 méthodes de 1.5 à + ) : Lorsque vous utilisez une API qui renvoie des anciennes collections en tandem avec un autre API qui exige les nouvelles interfaces de collections. Pour réaliser leur interopération, vous devrez convertir les anciennes collections en des nouvelles collections. Pour Array => List ou Collection utiliser dans la classe Arrays : public static List asList (T... a) ex:Foo[] my_old_array = oldMethod (arg); newMethod ( Arrays.asList (my_old_array) ); ________________________________________________________________________________________________________________________________________________________ Pour Vector utiliser tel quel ex:Vector my_old_vector = oldMethod (arg); newMethod ( my_old_vector ); ________________________________________________________________________________________________________________________________________________________ Pour HashTable utiliser tel quel ex:Hashtable my_old_hashtable = oldMethod (arg); newMethod ( my_old_hashtable ); ________________________________________________________________________________________________________________________________________________________ Pour Enumeration => Collection utiliser dans la classe Collections : public static ArrayList list (Enumeration e) ex: Enumeration my_old_enum = oldMethod (arg); newMethod ( Collections.list (my_old_enum) ); Voir The Java Tutorials :

23 23 Interop : Guide de bon usage du JCF Cours JAVA / Y.Laborde Règles de conception pour lusage du JCF Cette section donne quelques directives importantes qui permettent aux utilisateurs du JCF de concevoir des API* capables dinteropérer sans nécessité dajustement avec toutes les autres API qui les suivraient également. En somme, ces règles définissent ce que serait un « bon usager » des collections Java. * on parle ici dAPI car on réfère à une conception modulaire, que ce soit pour une véritable API ou pour un programme. i.e. on suppose que, lorsque lon développe un programme, cest avec lidée dune éventuelle réutilisation de certaines parties (développées dans des packages et contenant un interfaçage spécifique tout comme une véritable API). Concernant les PARAMÈTRES des méthodes (votre API contient une méthode qui exige une collection en entrée) : 1.ne jamais utiliser un type dimplémentation (classe) car cela va à lencontre de lintérêt dun Framework basé sur les interfaces, il faut donc déclarer le type du paramètre comme lune des interfaces de collections ; ex: ne pas demander un type HashSet mais une interface Set ou Collection 2.toujours utiliser lINTERFACE LA MOINS SPÉCIFIQUE en regard de la fonctionnalité à assurer (les types Collection et Map sont les plus génériques). ex: ne pas demander une interface List ou Set si une interface Collection suffit Voir The Java Tutorials : Concernant les TYPES RETOURNÉS (votre API contient une méthode qui fournit une collection en sortie) : 1.toujours utiliser lINTERFACE LA PLUS SPÉCIFIQUE pour permettre à lutilisateur de manipuler la collection avec le maximum defficacité (règle opposée à celle des paramètres d'entrée) ; ex: retourner un type SortedMap plutôt quun Map permet à lutilisateur de bénéficier de plus de puissance 2.il est loisible de retourner : ex: retourner une interface List ou une classe DominoList (qui fournit des méthodes utiles comme piocher un domino, …) soit une interface de collection, une interface spécifique de votre API qui dérive une interface de collection, soit une classe spécifique de votre API qui implémente une interface de collection ;


Télécharger ppt "1 Cours JAVA / Y.Laborde Java : Le Collections Framework (JCF) Java Collections Framework : Introduction(diapo 2) La JCF (6) Les interfaces (6) Les implémentations."

Présentations similaires


Annonces Google