Cours 5: Quelques el ements de la biblioth'eque standard
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
La programmation orientée objets et le langage Java Master BBSG 2 Laurent Tichit Département Informatique et Interactions, Faculté des Sciences de Luminy Cours 5: Quelques éléments de la bibliothèque standard c L. Tichit, 2015-2016 POO et Java 1/1
Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. c L. Tichit, 2015-2016 POO et Java 2/1
Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques c L. Tichit, 2015-2016 POO et Java 2/1
Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) c L. Tichit, 2015-2016 POO et Java 2/1
Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis c L. Tichit, 2015-2016 POO et Java 2/1
Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis forment des ensembles disjoints c L. Tichit, 2015-2016 POO et Java 2/1
Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis forment des ensembles disjoints Jusqu’à Java 1.4 public class JourSemaine { public static final int LUNDI = 0; public static final int MARDI = 1; public static final int MERCREDI = 2; public static final int JEUDI = 3; public static final int VENDREDI = 4; public static final int SAMEDI = 5; public static final int DIMANCHE = 6; } c L. Tichit, 2015-2016 POO et Java 2/1
Éléments de la bibliothèque Types énumérés Le besoin : manipuler des ensembles finis de données conventionnelles : { lundi, mardi, ... dimanche }, { nord, sud, est, ouest }, etc. Ces données sont très symboliques sont atomiques (simples, comme des entiers) forment des ensembles finis forment des ensembles disjoints Jusqu’à Java 1.4 public class JourSemaine { A partir de Java 5 public static final int LUNDI = 0; public static final int MARDI = 1; public enum JourSemaine { public static final int MERCREDI = 2; LUNDI, MARDI, MERCREDI, JEUDI, public static final int JEUDI = 3; VENDREDI, SAMEDI, DIMANCHE public static final int VENDREDI = 4; } public static final int SAMEDI = 5; public static final int DIMANCHE = 6; } c L. Tichit, 2015-2016 POO et Java 2/1
Éléments de la bibliothèque Types énumérés Jusqu’à Java 1.4 public class JourSemaine { A partir de Java 5 public static final int LUNDI = 0; public static final int MARDI = 1; public enum JourSemaine { public static final int MERCREDI = 2; LUNDI, MARDI, MERCREDI, JEUDI, public static final int JEUDI = 3; VENDREDI, SAMEDI, DIMANCHE public static final int VENDREDI = 4; } public static final int SAMEDI = 5; public static final int DIMANCHE = 6; } Emploi. Dans le premier cas : int jour; ... jour = JourSemaine.MERCREDI; c L. Tichit, 2015-2016 POO et Java 3/1
Éléments de la bibliothèque Types énumérés Jusqu’à Java 1.4 public class JourSemaine { A partir de Java 5 public static final int LUNDI = 0; public static final int MARDI = 1; public enum JourSemaine { public static final int MERCREDI = 2; LUNDI, MARDI, MERCREDI, JEUDI, public static final int JEUDI = 3; VENDREDI, SAMEDI, DIMANCHE public static final int VENDREDI = 4; } public static final int SAMEDI = 5; public static final int DIMANCHE = 6; } Emploi. Dans le premier cas : int jour; ... jour = JourSemaine.MERCREDI; Dans le second : JourSemaine jour; ... jour = JourSemaine.MERCREDI; c L. Tichit, 2015-2016 POO et Java 3/1
Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" c L. Tichit, 2015-2016 POO et Java 4/1
Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI c L. Tichit, 2015-2016 POO et Java 4/1
Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI int ordinal() – rang (dans l’ordre de la déclaration) : JourSemaine.MERCREDI.ordinal() → 2 c L. Tichit, 2015-2016 POO et Java 4/1
Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI int ordinal() – rang (dans l’ordre de la déclaration) : JourSemaine.MERCREDI.ordinal() → 2 static JourSemaine[] values() – tableau contenant toutes les valeurs du type : JourSemaine.LUNDI ... JourSemaine.DIMANCHE c L. Tichit, 2015-2016 POO et Java 4/1
Éléments de la bibliothèque Méthodes des types énumérés String toString() – exemple : JourSemaine.LUNDI.toString() → "LUNDI" static JourSemaine valueOf(String nom) – réciproque de la précédente : JourSemaine.valueOf("MARDI") → JourSemaine.MARDI int ordinal() – rang (dans l’ordre de la déclaration) : JourSemaine.MERCREDI.ordinal() → 2 static JourSemaine[] values() – tableau contenant toutes les valeurs du type : JourSemaine.LUNDI ... JourSemaine.DIMANCHE Exemple : trouver le jour suivant un jour donné : public enum JourSemaine { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE; public JourSemaine lendemain() { return values()[(ordinal() + 1) % values().length]; } } c L. Tichit, 2015-2016 POO et Java 4/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) ArrayList tableau (accès indexé optimisé) qui grandit automatiquement c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) ArrayList tableau (accès indexé optimisé) qui grandit automatiquement Vector Idem. De plus, les Vector sont synchronisés c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) ArrayList tableau (accès indexé optimisé) qui grandit automatiquement Vector Idem. De plus, les Vector sont synchronisés LinkedList liste chaı̂née (optimise les insertions et suppressions internes) c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) ArrayList tableau (accès indexé optimisé) qui grandit automatiquement Vector Idem. De plus, les Vector sont synchronisés LinkedList liste chaı̂née (optimise les insertions et suppressions internes) Set collection sans répétition (optimise le test d’appartenance) c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) ArrayList tableau (accès indexé optimisé) qui grandit automatiquement Vector Idem. De plus, les Vector sont synchronisés LinkedList liste chaı̂née (optimise les insertions et suppressions internes) Set collection sans répétition (optimise le test d’appartenance) HashSet efficacité maximale TreeSet les éléments doivent être ordonnés ; le parcours respecte cet ordre c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) ArrayList tableau (accès indexé optimisé) qui grandit automatiquement Vector Idem. De plus, les Vector sont synchronisés LinkedList liste chaı̂née (optimise les insertions et suppressions internes) Set collection sans répétition (optimise le test d’appartenance) HashSet efficacité maximale TreeSet les éléments doivent être ordonnés ; le parcours respecte cet ordre Map table associative, faite de couples (clé, valeur) c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Collections et dictionnaires interfaces classes Collection collection la plus générale void add(Object element) int size() boolean contains(Object valeur) List une collection qu’on peut voir comme une séquence void add(int index, Object element) Object get(int index) ArrayList tableau (accès indexé optimisé) qui grandit automatiquement Vector Idem. De plus, les Vector sont synchronisés LinkedList liste chaı̂née (optimise les insertions et suppressions internes) Set collection sans répétition (optimise le test d’appartenance) HashSet efficacité maximale TreeSet les éléments doivent être ordonnés ; le parcours respecte cet ordre Map table associative, faite de couples (clé, valeur) HashMap efficacité maximale TreeMap les clés doivent être ordonnées ; le parcours reflète l’ordre c L. Tichit, 2015-2016 POO et Java 5/1
Éléments de la bibliothèque Parcours des collections Pour parcourir une collection on utilise un itérateur : public interface Iterator { boolean hasNext(); renvoie true si l’itération n’est pas finie, à la manière de i < tab.length Object next(); renvoie le prochain élément et fait avancer l’itération, à la manière de tab[i++] void remove(); supprime l’élément en cours (peu utile, souvent inopérant) } c L. Tichit, 2015-2016 POO et Java 6/1
Éléments de la bibliothèque Parcours des collections Pour parcourir une collection on utilise un itérateur : public interface Iterator { boolean hasNext(); renvoie true si l’itération n’est pas finie, à la manière de i < tab.length Object next(); renvoie le prochain élément et fait avancer l’itération, à la manière de tab[i++] void remove(); supprime l’élément en cours (peu utile, souvent inopérant) } les itérateurs sont créés et initialisés par les collections elles-mêmes : Iterator iter = uneCollection.iterator(); création d’une itération sur les éléments de uneCollection c L. Tichit, 2015-2016 POO et Java 6/1
Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ c L. Tichit, 2015-2016 POO et Java 7/1
Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + iter.next() ; return result; } c L. Tichit, 2015-2016 POO et Java 7/1
Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + (Double) iter.next() ; return result; } c L. Tichit, 2015-2016 POO et Java 7/1
Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double) iter.next()).doubleValue(); return result; } c L. Tichit, 2015-2016 POO et Java 7/1
Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double) iter.next()).doubleValue(); return result; } essai de cette méthode : void test() { List donnees = new ArrayList(); for (int i = 0; i < 5; i++) donnees.add(new Double(Math.random())); System.out.println(cumul(donnees)); ... } c L. Tichit, 2015-2016 POO et Java 7/1
Éléments de la bibliothèque Parcours des collections Exemple. La méthode cumul additionne les éléments d’une collection de nombres : double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres doivent être des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double) iter.next()).doubleValue(); return result; } essai de cette méthode : void test() { List donnees = new ArrayList(); for (int i = 0; i < 5; i++) donnees.add(new Double(Math.random())); System.out.println(cumul(donnees)); ... } affichage obtenu 2.18124 c L. Tichit, 2015-2016 POO et Java 7/1
Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) c L. Tichit, 2015-2016 POO et Java 8/1
Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) c L. Tichit, 2015-2016 POO et Java 8/1
Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin, la boucle for (Iterator it = collection.iterator(); it.hasNext(); ) exploiter((Machin)it.next()) c L. Tichit, 2015-2016 POO et Java 8/1
Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin, la boucle for (Iterator it = collection.iterator(); it.hasNext(); ) exploiter((Machin)it.next()) peut s’écrire plus simplement for (Machin e : collection) exploiter(e) c L. Tichit, 2015-2016 POO et Java 8/1
Éléments de la bibliothèque Boucle for améliorée Si tableau est un tableau de Machin, la boucle for (int i = 0; i < tableau.length; i++) exploiter(tableau[i]) peut s’écrire plus simplement for (Machin e : tableau) exploiter(e) Si collection est une collection de Machin, la boucle for (Iterator it = collection.iterator(); it.hasNext(); ) exploiter((Machin)it.next()) peut s’écrire plus simplement for (Machin e : collection) exploiter(e) Exemple : ... double[] t = new double[N]; ... double s = 0; for (double x : t) s += x; ... c L. Tichit, 2015-2016 POO et Java 8/1
Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } c L. Tichit, 2015-2016 POO et Java 9/1
Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List { void add(int index, E element); E get(int index); ... } c L. Tichit, 2015-2016 POO et Java 9/1
Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List { void add(int index, E element); E get(int index); ... } le code produit n’est pas modifié par l’utilisation de ce mécanisme... c L. Tichit, 2015-2016 POO et Java 9/1
Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List { void add(int index, E element); E get(int index); ... } le code produit n’est pas modifié par l’utilisation de ce mécanisme... ...qui n’est pas obligatoire c L. Tichit, 2015-2016 POO et Java 9/1
Éléments de la bibliothèque Java 5 : les collections génériques souvent les collections sont homogènes : leurs éléments ont un type commun mais, définies en toute généralité, ces éléments sont déclarés Object public interface List { void add(int index, Object element); Object get(int index); ... } apparues en Java 5, les classes génériques sont un mécanisme ajouté au niveau du texte source pour indiquer au compilateur le type des éléments en question public interface List { void add(int index, E element); E get(int index); ... } le code produit n’est pas modifié par l’utilisation de ce mécanisme... ...qui n’est pas obligatoire si on ne l’utilise à 100% pas le compilateur affiche des avertissements c L. Tichit, 2015-2016 POO et Java 9/1
Éléments de la bibliothèque Java 5 : les collections génériques L’exemple devient : static double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double)iter.next()).doubleValue(); result = result + iter.next().doubleValue(); return result; } c L. Tichit, 2015-2016 POO et Java 10 / 1
Éléments de la bibliothèque Java 5 : les collections génériques L’exemple devient : static double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + ((Double)iter.next()).doubleValue(); result = result + iter.next().doubleValue(); return result; } appel : public static void main(String[] args) { List donnees = new ArrayList(); for (int i = 0; i < 5; i++) donnees.add(new Double(Math.random())); System.out.println(cumul(donnees)); ... } c L. Tichit, 2015-2016 POO et Java 10 / 1
Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) c L. Tichit, 2015-2016 POO et Java 11 / 1
Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; c L. Tichit, 2015-2016 POO et Java 11 / 1
Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); c L. Tichit, 2015-2016 POO et Java 11 / 1
Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); Réciproquement, il est permis d’écrire unInt = unObjet; c L. Tichit, 2015-2016 POO et Java 11 / 1
Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); Réciproquement, il est permis d’écrire unInt = unObjet; cela est automatiquement traduit par unInt = unObjet.intValue(); c L. Tichit, 2015-2016 POO et Java 11 / 1
Éléments de la bibliothèque Java 5 : emballage et déballage automatiques Autre bonne nouvelle : depuis Java 5 l’emballage et le déballage sont automatiques (insérés par le compilateur là où c’est nécessaire) exemple : si unObjet est d’un type objet et unInt de type int, il est permis d’écrire unObjet = unInt; cela est automatiquement traduit par le compilateur par unObjet = new Integer(unInt); Réciproquement, il est permis d’écrire unInt = unObjet; cela est automatiquement traduit par unInt = unObjet.intValue(); contrainte : il faut que unObjet soit de la classe-enveloppe correspondant au type primitif visé (ici la classe enveloppe est Integer puisque le type primitif est int) c L. Tichit, 2015-2016 POO et Java 11 / 1
Éléments de la bibliothèque Java 5 : généricité + (emb|déb)allage automatiques L’exemple devient : static double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + iter.next().doubleValue(); result = result + iter.next(); return result; } c L. Tichit, 2015-2016 POO et Java 12 / 1
Éléments de la bibliothèque Java 5 : généricité + (emb|déb)allage automatiques L’exemple devient : static double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; Iterator iter = suiteDeNombres.iterator(); while (iter.hasNext()) result = result + iter.next().doubleValue(); result = result + iter.next(); return result; } appel : public static void main(String[] args) { ArrayList donnees = new ArrayList(); for (int i = 0; i < 5; i++) donnees.add( new Double(Math.random()) ); donnees.add( Math.random() ); System.out.println(cumul(donnees)); ... } c L. Tichit, 2015-2016 POO et Java 12 / 1
Éléments de la bibliothèque Avec une boucle for améliorée Dernier avatar de notre exemple, avec collection générique, emballage-déballage automatiques et boucle for améliorée ce qui donne : static double cumul(Collection suiteDeNombres) { /* Les éléments de suiteDeNombres sont des objets Double */ double result = 0; for (Double x : suiteDeNombres) result = result + x; return result; } c L. Tichit, 2015-2016 POO et Java 13 / 1
Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un accès par les clés optimisé c L. Tichit, 2015-2016 POO et Java 14 / 1
Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un accès par les clés optimisé deux méthodes fondamentales : Interface Map { void put(Object cle, Object valeur); // ajout d’une paire Object get(Object cle); // recherche de la valeur associée à une clé ... c L. Tichit, 2015-2016 POO et Java 14 / 1
Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un accès par les clés optimisé deux méthodes fondamentales : Interface Map { void put(Object cle, Object valeur); // ajout d’une paire Object get(Object cle); // recherche de la valeur associée à une clé ... ou, depuis Java 5 : Interface Map { void put(K cle, V valeur); // ajout d’une paire V get(Object cle); // recherche de la valeur associée à une clé ... c L. Tichit, 2015-2016 POO et Java 14 / 1
Éléments de la bibliothèque Table associative collection de paires (clé, valeur) munie d’un accès par les clés optimisé deux méthodes fondamentales : Interface Map { void put(Object cle, Object valeur); // ajout d’une paire Object get(Object cle); // recherche de la valeur associée à une clé ... ou, depuis Java 5 : Interface Map { void put(K cle, V valeur); // ajout d’une paire V get(Object cle); // recherche de la valeur associée à une clé ... deux implémentations principales : HashMap : implémentation par une table de hachage ; la plus efficace, mais les clés n’y sont pas ordonnées TreeMap : implémentation par un arbre binaire de recherche ; un peu moins efficace (mais en O(log n) quand-même), les clés y sont ordonnées c L. Tichit, 2015-2016 POO et Java 14 / 1
Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) c L. Tichit, 2015-2016 POO et Java 15 / 1
Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) Scanner entree = new Scanner(System.in); String commande, nom, description; Map repertoire = new HashMap(); for (;;) { System.out.print("commande: "); commande = entree.nextLine().trim(); char code = commande.charAt(0); nom = commande.substring(1).trim(); c L. Tichit, 2015-2016 POO et Java 15 / 1
Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) Scanner entree = new Scanner(System.in); String commande, nom, description; Map repertoire = new HashMap(); for (;;) { System.out.print("commande: "); commande = entree.nextLine().trim(); char code = commande.charAt(0); nom = commande.substring(1).trim(); if (code == ’?’) { description = (String) repertoire.get(nom); if (description != null) System.out.println(nom + " : " + description); } c L. Tichit, 2015-2016 POO et Java 15 / 1
Éléments de la bibliothèque Exemple classique Écriture d’un dictionnaire pour associer des descriptions à des mots. Deux commandes : ?mot : pour obtenir la description d’un mot +mot : pour ajouter un mot et sa description (demandée ensuite) Scanner entree = new Scanner(System.in); String commande, nom, description; Map repertoire = new HashMap(); for (;;) { System.out.print("commande: "); commande = entree.nextLine().trim(); char code = commande.charAt(0); nom = commande.substring(1).trim(); if (code == ’?’) { description = (String) repertoire.get(nom); if (description != null) System.out.println(nom + " : " + description); } else if (code == ’+’) { System.out.print("description: "); description = entree.nextLine(); repertoire.put(nom, description); } } c L. Tichit, 2015-2016 POO et Java 15 / 1
Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) c L. Tichit, 2015-2016 POO et Java 16 / 1
Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream Flot d’octets en entrée... FileInputStream ...provenant d’un fichier DataInputStream ...transformés en données de types primitifs ObjectInputStream ...transformés en objets c L. Tichit, 2015-2016 POO et Java 16 / 1
Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream Flot d’octets en entrée... FileInputStream ...provenant d’un fichier DataInputStream ...transformés en données de types primitifs ObjectInputStream ...transformés en objets OutputStream Même chose, en sortie (même genre de sous-classes) c L. Tichit, 2015-2016 POO et Java 16 / 1
Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream Flot d’octets en entrée... FileInputStream ...provenant d’un fichier DataInputStream ...transformés en données de types primitifs ObjectInputStream ...transformés en objets OutputStream Même chose, en sortie (même genre de sous-classes) Reader Flot de caractères en entrée... InputStreamReader ...provenant d’un InputStream BufferedReader ...regroupés en lignes c L. Tichit, 2015-2016 POO et Java 16 / 1
Éléments de la bibliothèque Entrées-sorties Petit choix de classes usuelles du paquetage java.io : File Identification d’un fichier + gestion externe des fichiers (rename, copy, delete, contenu des répertoires, etc.) InputStream Flot d’octets en entrée... FileInputStream ...provenant d’un fichier DataInputStream ...transformés en données de types primitifs ObjectInputStream ...transformés en objets OutputStream Même chose, en sortie (même genre de sous-classes) Reader Flot de caractères en entrée... InputStreamReader ...provenant d’un InputStream BufferedReader ...regroupés en lignes Writer Même chose, en sortie PrintWriter avec mise en forme des données (ex. : System.out) c L. Tichit, 2015-2016 POO et Java 16 / 1
Éléments de la bibliothèque Les flots, c’est de la plomberie... application qui effectue des lectures de lignes readLine() lignes de caractères BufferedReader caractères InputStreamReader octets FileInputStream un fichier (la source des octets) File c L. Tichit, 2015-2016 POO et Java 17 / 1
Éléments de la bibliothèque Les flots, c’est de la plomberie... application qui effectue des lectures de lignes Ce qui, dans le code, donne : readLine() lignes de caractères File f = new File("mydata.txt"); FileInputStream fis = BufferedReader new FileInputStream(f); InputStreamReader isr = caractères new InputStreamReader(fis); BufferedReader br = InputStreamReader new BufferedReader(isr); octets FileInputStream un fichier (la source des octets) File c L. Tichit, 2015-2016 POO et Java 17 / 1
Éléments de la bibliothèque Les flots, c’est de la plomberie... application qui effectue des lectures de lignes Ce qui, dans le code, donne : readLine() lignes de caractères File f = new File("mydata.txt"); FileInputStream fis = BufferedReader new FileInputStream(f); InputStreamReader isr = caractères new InputStreamReader(fis); BufferedReader br = InputStreamReader new BufferedReader(isr); octets ou, en version compacte : FileInputStream BufferedReader br = new BufferedReader( un fichier (la source des octets) new InputStreamReader( new FileInputStream( File new File("mydata.txt")))); c L. Tichit, 2015-2016 POO et Java 17 / 1
Éléments de la bibliothèque Exemple : lire des lignes Lister un fichier par lignes numérotées : Fichier Listing.java import java.io.*; application qui effectue public class Listing { des lectures de lignes public static void main(String[] args) { readLine() int n = 0; lignes de caractères File f = new File(args[0]); BufferedReader InputStream is = new FileInputStream(f); br Reader r = new InputStreamReader(is); caractères BufferedReader br = new BufferedReader(r); r InputStreamReader octets is FileInputStream un fichier (la source des octets) File f c L. Tichit, 2015-2016 POO et Java 18 / 1
Éléments de la bibliothèque Exemple : lire des lignes Lister un fichier par lignes numérotées : Fichier Listing.java import java.io.*; application qui effectue public class Listing { des lectures de lignes public static void main(String[] args) { readLine() int n = 0; lignes de caractères File f = new File(args[0]); BufferedReader InputStream is = new FileInputStream(f); br Reader r = new InputStreamReader(is); caractères BufferedReader br = new BufferedReader(r); r InputStreamReader String ligne = br.readLine(); while (ligne != null) { System.out.printf((++n) + " " + ligne); octets ligne = br.readLine(); } is FileInputStream is.close(); un fichier (la source des octets) File f c L. Tichit, 2015-2016 POO et Java 18 / 1
Éléments de la bibliothèque Exemple : lire des lignes Lister un fichier par lignes numérotées : Fichier Listing.java import java.io.*; application qui effectue public class Listing { des lectures de lignes public static void main(String[] args) { readLine() int n = 0; lignes de caractères try { File f = new File(args[0]); BufferedReader InputStream is = new FileInputStream(f); br Reader r = new InputStreamReader(is); caractères BufferedReader br = new BufferedReader(r); r InputStreamReader String ligne = br.readLine(); while (ligne != null) { System.out.printf((++n) + " " + ligne); octets ligne = br.readLine(); } is FileInputStream is.close(); un fichier (la source des octets) } catch (ArrayIndexOutOfBoundsException e) { System.err.println("emploi: java Listing "); } catch (FileNotFoundException e) { File f System.err.println("fichier inconnu: " + args[0]); } catch (IOException e) { System.err.println("erreur après " + n + " lignes"); } } } c L. Tichit, 2015-2016 POO et Java 18 / 1
Éléments de la bibliothèque Exemple : lire des lignes Une autre manière de désigner le fichier (au lieu de File f = new File(args[0]) ) : Fichier Listing.java public class Listing { public static void main(String[] args) { int n = 0; try { JFileChooser dial = new JFileChooser(); personnalisation de dial int res = dial.showOpenDialog(null); if (res != JFileChooser.APPROVE OPTION) return; File f = dial.getSelectedFile(); c L. Tichit, 2015-2016 POO et Java 19 / 1
Éléments de la bibliothèque Exemple : lire des lignes Une autre manière de désigner le fichier (au lieu de File f = new File(args[0]) ) : Fichier Listing.java public class Listing { public static void main(String[] args) { int n = 0; try { JFileChooser dial = new JFileChooser(); personnalisation de dial int res = dial.showOpenDialog(null); if (res != JFileChooser.APPROVE OPTION) return; File f = dial.getSelectedFile(); InputStream is = new FileInputStream(f); Reader r = new InputStreamReader(is); BufferedReader br = new BufferedReader(r); String ligne = br.readLine(); while (ligne != null) { System.out.println((++n) + " " + ligne); ligne = br.readLine(); } is.close(); } catch (ArrayIndexOutOfBoundsException e) { System.err.println("emploi: java Listing "); } catch (FileNotFoundException e) { /* cette exception ne sera pas lancée */ System.err.println("fichier inconnu"); } catch (IOException e) { System.err.println("erreur après " + n + " lignes"); } } } c L. Tichit, 2015-2016 POO et Java 19 / 1
Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture d’un fichier de texte formé de couples nom , nombre comme ... poids 1800.0 vitesse 145 largeur 1.40 longueur 3.25 ... écrivons une méthode Map lireInfos(File fichier); qui lit ces couples et en fait une table associative clé valeur poids 1800.0 vitesse 145 largeur 1.40 longueur 3.25 ... ... c L. Tichit, 2015-2016 POO et Java 20 / 1
Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); c L. Tichit, 2015-2016 POO et Java 21 / 1
Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ c L. Tichit, 2015-2016 POO et Java 21 / 1
Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; c L. Tichit, 2015-2016 POO et Java 21 / 1
Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; if (unite != StreamTokenizer.TT WORD) throw new IOException("mot attendu"); String cle = tokenizer.sval; c L. Tichit, 2015-2016 POO et Java 21 / 1
Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; if (unite != StreamTokenizer.TT WORD) throw new IOException("mot attendu"); String cle = tokenizer.sval; unite = tokenizer.nextToken(); if (unite != StreamTokenizer.TT NUMBER) throw new IOException("nombre attendu"); double valeur = tokenizer.nval; c L. Tichit, 2015-2016 POO et Java 21 / 1
Éléments de la bibliothèque Exemple : lire des unites lexicales Exemple : lecture de couples nom, valeur et rangement dans une table associative : Extrait de code ... Map lireInfos(File fichier) throws IOException { HashMap result = new HashMap(); InputStream is = new FileInputStream(fichier); Reader r = new InputStreamReader(is); StreamTokenizer tokenizer = new StreamTokenizer(r); /* personnalisation éventuelle de tokenizer (quels sont les caractères blancs , etc.) */ for (;;) { int unite = tokenizer.nextToken(); if (unite == StreamTokenizer.TT EOF) break; if (unite != StreamTokenizer.TT WORD) throw new IOException("mot attendu"); String cle = tokenizer.sval; unite = tokenizer.nextToken(); if (unite != StreamTokenizer.TT NUMBER) throw new IOException("nombre attendu"); double valeur = tokenizer.nval; result.put(cle, new Double(valeur)); } return result; } ... c L. Tichit, 2015-2016 POO et Java 21 / 1
Éléments de la bibliothèque Autre exemple : mise en forme de données Afficher un listing avec des colonnes bien alignées Fichier Article.java public class Article { int ref; String denom; double prix; public Article(int r, String d, double p) { ref = r; denom = d; prix = p; } } c L. Tichit, 2015-2016 POO et Java 22 / 1
Éléments de la bibliothèque Autre exemple : mise en forme de données Afficher un listing avec des colonnes bien alignées Fichier Article.java public class Article { int ref; String denom; double prix; public Article(int r, String d, double p) { ref = r; denom = d; prix = p; } } Fichier TestFormat.java public class TestFormat { public static void main(String[] args) { Article[] maListe = { new Article(75, "Savon à barbe", 2.40), new Article(24085, "Gillette 6 lames x 5", 18), new Article(125, "Javel 1L", 0.85), }; imprimer(maListe); } static void imprimer(Article[] liste) { c’est ici qu’il faut réfléchir... } } c L. Tichit, 2015-2016 POO et Java 22 / 1
Éléments de la bibliothèque Exemple : mise en forme de données Première version Fichier TestFormat.java import java.text.*; public class TestFormat { ... static void imprimer(Article[] liste) { NumberFormat fd = new DecimalFormat("#,##0.00"); for (int i = 0; i < liste.length; i++) System.out.println(liste[i].ref + " | " + liste[i].denom + " | " + fd.format(liste[i].prix)); } ... } c L. Tichit, 2015-2016 POO et Java 23 / 1
Éléments de la bibliothèque Exemple : mise en forme de données Première version Fichier TestFormat.java import java.text.*; public class TestFormat { ... static void imprimer(Article[] liste) { NumberFormat fd = new DecimalFormat("#,##0.00"); for (int i = 0; i < liste.length; i++) System.out.println(liste[i].ref + " | " + liste[i].denom + " | " + fd.format(liste[i].prix)); } ... } Résultat obtenu (pas terrible !) : 75 | Savon à barbe | 2,40 24085 | Gillette 6 lames x 5 | 18,00 125 | Javel 1L | 0,85 c L. Tichit, 2015-2016 POO et Java 23 / 1
Éléments de la bibliothèque Exemple : mise en forme de données Meilleure version (Java 5) Fichier TestFormat.java public class TestFormat { ... static void imprimer(Article[] liste) { for (int i = 0; i < liste.length; i++) System.out.printf("%8d | %-30s | %8.2f%n", liste[i].ref, liste[i].denom, liste[i].prix); } ... } c L. Tichit, 2015-2016 POO et Java 24 / 1
Éléments de la bibliothèque Exemple : mise en forme de données Meilleure version (Java 5) Fichier TestFormat.java public class TestFormat { ... static void imprimer(Article[] liste) { for (int i = 0; i < liste.length; i++) System.out.printf("%8d | %-30s | %8.2f%n", liste[i].ref, liste[i].denom, liste[i].prix); } ... } Résultat obtenu : 75 | Savon à barbe | 2,40 24085 | Gillette 6 lames x 5 | 18,00 125 | Javel 1L | 0,85 c L. Tichit, 2015-2016 POO et Java 24 / 1
Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex c L. Tichit, 2015-2016 POO et Java 25 / 1
Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné c L. Tichit, 2015-2016 POO et Java 25 / 1
Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné exemple : extraire les liens d’une page html, représentés par des balises : c L. Tichit, 2015-2016 POO et Java 25 / 1
Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné exemple : extraire les liens d’une page html, représentés par des balises : l’expression régulière correspondante est :
Éléments de la bibliothèque Expressions régulières expressions régulières en Java : paquetage java.util.regex deux classes : Pattern : représentation compilée d’une expression régulière Matcher : variables et méthodes pour faire travailler une expression régulière sur un texte donné exemple : extraire les liens d’une page html, représentés par des balises : l’expression régulière correspondante est :
Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { public static void main(String[] args) { String texte = null; /* Obtention du texte à analyser */ try { File fic = new File(args[0]); char[] tmp = new char[(int) fic.length()]; Reader lecteur = new FileReader(fic); lecteur.read(tmp); lecteur.close(); texte = new String(tmp); } catch (IOException e) { e.printStackTrace(); return; } c L. Tichit, 2015-2016 POO et Java 26 / 1
Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = public static void main(String[] args) { "
Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = public static void main(String[] args) { "
Éléments de la bibliothèque Expressions régulières, exemple Version de base : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = public static void main(String[] args) { "
Éléments de la bibliothèque Expressions régulières, exemple Amélioration : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = public static void main(String[] args) { "
Éléments de la bibliothèque Expressions régulières, exemple Amélioration : Fichier TestExpressionsRegulieres.java public class TestExpressionsRegulieres { /* L’expression régulière */ String expReg = public static void main(String[] args) { "
Vous pouvez aussi lire