Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

Documents pareils
Chapitre V. Les classes : Object, Vector, etc.

Chapitre 10. Les interfaces Comparable et Comparator 1

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmation Par Objets

Package Java.util Classe générique

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Threads. Threads. USTL routier 1

Une introduction à Java

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

as Architecture des Systèmes d Information

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Programmation Objet I

Java 1.5 : principales nouveautés

Programmer en JAVA. par Tama

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Auto-évaluation Programmation en Java

Synchro et Threads Java TM

Introduction au langage de programmation Java

Programmation Objet II

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Utilisation d objets : String et ArrayList

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Design patterns. Design patterns - définition. Design patterns - avantages

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

4. Groupement d objets

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

Ateliers SCJP Pour Java 2 Pla2orm, Standard Edi8on 7.0

Initiation à JAVA et à la programmation objet.

Exercices sur les interfaces

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

OpenPaaS Le réseau social d'entreprise

Programmation par les Objets en Java

PROGRAMMATION PAR OBJETS

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Introduction à la programmation concurrente

Un ordonnanceur stupide

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Généralités sur le Langage Java et éléments syntaxiques.

Corrigé des exercices sur les références

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Premiers Pas en Programmation Objet : les Classes et les Objets

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Création d objet imbriqué sous PowerShell.

TD/TP PAC - Programmation n 3

TD/TP PAC - Programmation n 3

Héritage presque multiple en Java (1/2)

Langage Java. Classe de première SI

Classe Interne, Anonyme & Enumération

INITIATION AU LANGAGE JAVA

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Tutoriel d installation de Hibernate avec Eclipse

TP1 : Initiation à Java et Eclipse

RMI le langage Java XII-1 JMF

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Introduction : les processus. Introduction : les threads. Plan

Développement Logiciel

Programmation Orientée Objet Java

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Plan du cours. Historique du langage Nouveautés de Java 7

Programmation avec des objets : Cours 7. Menu du jour

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Applet pour visualiser les variables «automate» notifiées

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

Application web de gestion de comptes en banques

Arbres binaires de recherche

Dis papa, c est quoi un bus logiciel réparti?

Introduction à JDBC. Accès aux bases de données en Java

Objets et Programmation. origine des langages orientés-objet

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Certificat Big Data - Master MAthématiques

Tp 1 correction. Structures de données (IF2)

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Paginer les données côté serveur, mettre en cache côté client

Remote Method Invocation Les classes implémentant Serializable

Cours 1: Java et les objets

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Introduction à MapReduce/Hadoop et Spark

TD2 Programmation concurrentielle

Programmation Orientée Objet

Projet gestion d'objets dupliqués

Java Licence Professionnelle CISII,

TD3: tableaux avancées, première classe et chaînes

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

4 Exemples de problèmes MapReduce incrémentaux

Transcription:

Introduction La classe object Tous les objets Java héritent de la classe java.lang.object. Elle garantit que tout objet Java contient quelques méthodes fondamentales duplication comparaison Chaque classe est libre de redéfinir ces méthodes Cours Java : les conteneurs 1 Cours Java : les conteneurs 2 Sommaire des Méthodes Les méthodes protected clone() throws CloneNotSupportedException Creates and returns a copy of this Object object. boolean equals(object obj) Indicates whether some other object is "equal to" this one. protected finalize() throws Throwable Called by the garbage collector on an object when void garbage collection determines that there are no more references to the object. Class getclass() Returns the runtime class of an object. int hashcode() Returns a hash code value for the object. void notify()wakes up a single thread that is waiting on this object's monitor. void notifyall()wakes up all threads that are waiting on this object's monitor. String tostring() Returns a string representation of the object. void wait() Causes current thread to wait until another thread invokes the notify() method or the notifyall() method for this object. void wait(long timeout) Causes current thread to wait until either another thread invokes the notify() method or the notifyall() method for this object, or a specified amount of time has elapsed. void wait(long timeout, int nanos)causes current thread to wait until another thread invokes the notify() method or the notifyall() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed. Cours Java : les conteneurs 3 Les méthodes La méthode tostring() retourne l'objet sous forme d'une chaîne de caractères Object o = new Object(); System.out.println(o); // affiche java.lang.object@cd2d23758 Cette méthode tostring() est très souvent redéfinie par les sous classes. Elle permet d'afficher une représentation de l'objet sous forme de String public class Complexe { protected double partiereelle; protected double partieimaginaire; public Complexe (double r, double i) { partiereelle = r; partieimaginaire = i; public String tostring() {return partiereelle + "+" + partieimaginaire + "i"; public static void main(string[] args) { Complexe c = new Complexe(1.0, 2.0); System.out.println(c); Cours Java : les conteneurs 4 L'opérateur "==" appliqué à des références teste l'égalité des références Complexe c1 = new Complexe (1.0,2.0); Complexe c2 = new Complexe (1.0,2.0); System.out.println(c1 == c2); // affich false; La méthode equals() de la classe Object teste l'égalité entre l'objet qui a appelé la méthode et l'objet passé en argument. Par défaut cette méthode teste, elle aussi, l'égalité sur les références. Il est souvent nécessaire de redéfinir cette méthode en fonction du contenu de l'objet public boolean equals(object o) { if (!(o instanceof Complexe)) return false; Complexe c = (Comlexe)o; return partireelle == c.partiereelle && partieimaginaire == c.partieimaginaire; Cours Java : les conteneurs 5 La méthode equals doit vérifier les propriétés suivantes x.equals(x) true x.equals(y) == true y.equals(x) == true x.equals(y) == true et y.equals(z) == true x.equals(z) == true plusieurs appels successifs de x.equals(y) donnent toujours le même résultat x.equals(null) false Cours Java : les conteneurs 6 La valeur renvoyée par la méthode hashcode() est utilisée dans la méthode tostring() (suit le car @) Object o = new Object(); System.out.println(o); // affiche java.lang.object@cd2d23758 Les valeurs renvoyées par la méthode hashcode() de deux objets x, y tels que x.equals(y) == true doivent être les mêmes La réciproque n'est pas vraie La redéfinition de la méthode equals peut nécessiter de redéfinir la méthode hashcode() pour garantir le bon fonctionnement des conteneurs La copie d'objets La méthode clone() effectue une copie champ à champ de l'objet sur lequel elle est appelée à la condition qu'il ait le type Cloneable (implante l'interface Cloneable). On dit faire une copie en surface L'appel de la méthode clone() dans une classe qui n'implante pas l'interface Cloneable léve l'exception CloneNotSupportedException. Cours Java : les conteneurs 7 Cours Java : les conteneurs 8

La copie d'objets abstract class Figure implements Cloneable { try { return super.clone(); catch (CloneNotSupportedException e) { throw new InternalError(); public class Disque { private Point centre; private double rayon; public Disque (Point c, double r) { centre = c; rayon = r; return new Disque(centre, rayon); // Dangereux public class Anneau extends Disque { public Anneau (Point c, double r, double rinterne) {... // pas de redefinition de clone() public static void main (String [] a) { Anneau a = new Anneau(new Point(0.0, 0.0), 2.0, 1.0); Anneau copie = (Anneau) a.clone(); // transtypage incorrect Cours Java : les conteneurs 9 La copie d'objets abstract class Figure implements Cloneable { try { return super.clone(); catch (CloneNotSupportedException e) { throw new InternalError(); public class Disque { private Point centre; private double rayon; public Disque (Point c, double r) { centre = c; rayon = r; Disque d =(Disque)super.clone(); d.centre =(Point)centre.clone(); return d; public class Anneau extends Disque { public Anneau (Point c, double r, double rinterne) {... // pas de redefinition de clone() public static void main (String [] a) { Anneau a = new Anneau(new Point(0.0, 0.0), 2.0, 1.0); Anneau copie = (Anneau) a.clone(); // transtypage OK Cours Java : les conteneurs 10 Les autres méthodes La méthode finalize() est appelée avant que le ramasse miettes récupère la mémoire utilisée par l'objet Cinq méthodes sont utilisées pour mettre en oeuvre la synchronisation de processus léger La méthode getclass() retourne une référence sur un objet de la classe java.lang.class qui décrit la classe de l'objet String s = "coucou"; Class c = s.getclass(); System.out.println(c); // affiche: class java.lang.string Les Conteneurs Cours Java : les conteneurs 11 Cours Java : les conteneurs 12 Introduction Un conteneur est une classe dont le rôle est de stocker, traiter, retrouver une collection d'objets. Un exemple de conteneur (ou dit aussi collection) est le tableau Les différents conteneurs se distinguent en fonction de l'interface : accès aux éléments des implémentations : stockage, rangement des éléments des algorithmes : recherche, tri, parcours En java il y a deux types d'interface de conteneurs disponibles Cours Java : les conteneurs 13 Cours Java : les conteneurs 14 Collection est l'interface racine. Elle permet de désigner un ensemble d'objets. Certaines implantations autoriseront la présence de plusieurs éléments identiques d'autres non. Certaines implantations auront leurs éléments ordonnés d'autres non. set : conteneur qui n'accepte pas les doublons list: conteneur qui range les éléments en séquence (notion d'index) map: conteneur qui associe une clé à chaque élément sortedset: conteneur qui maintient un ordre croissant sur l'ensemble des éléments sortedmap: conteneur qui maintient un ordre croissant sur l'ensemble des clés Cours Java : les conteneurs 15 Cours Java : les conteneurs 16

L'interface de Collection L'interface de Set public interface Collection { boolean contains(object element); boolean add(object element); boolean remove(object element); Iterator iterator(); boolean containsall(collection c); boolean addall(collection c); boolean removeall(collection c); boolean retainall(collection c); // Array Operations Object[] toarray(); Object[] toarray(object a[]); public interface Set extends Collection{ boolean contains(object element); boolean add(object element); boolean remove(object element); Iterator iterator(); boolean containsall(collection c); boolean addall(collection c); boolean removeall(collection c); boolean retainall(collection c); // Array Operations Object[] toarray(); Object[] toarray(object a[]); Cours Java : les conteneurs 17 Cours Java : les conteneurs 18 L'interface de List public interface List extends Collection { // Positional Access Object get(int index); Object set(int index, Object element); void add(int index, Object element); Object remove(int index); abstract boolean addall(int index, Collection c); // Search int indexof(object o); int lastindexof(object o); // Iteration ListIterator listiterator(); ListIterator listiterator(int index); L'interface de ListIterator La classe ListIterator permet de se déplacer dans les deux sens d'un conteneur. Elle permet de modifier son contenu (set, add, en plus de remove) public interface ListIterator extends Iterator { boolean hasnext(); Object next(); boolean hasprevious(); Object previous(); // Range-view List sublist(int from, int to); La méthode sublist permet de travailler temporairement sur une sous liste. int nextindex(); int previousindex(); void remove(); void set(object o); void add(object o); Cours Java : les conteneurs 19 Cours Java : les conteneurs 20 index: 0 L'interface de ListIterator Element (0) Element (1) Element (2) Element (3) 1 Index correspond à l'index de l'élément qui sera renvoyé lors de l'appel à la méthode next() Sans précision, l'index de départ vaut zéro. Soit i la valeur de l'index, la méthode previous() renvoie l'élément à l'index i - 1 2 Cours Java : les conteneurs 21 3 4 L'interface Map public interface Map { Object put(object key, Object value); Object get(object key); Object remove(object key); boolean containskey(object key); boolean containsvalue(object value); void putall(map t); // Collection Views public Set keyset(); public Collection values(); public Set entryset(); // Interface for entryset elements public interface Entry { Object getkey(); Object getvalue(); Object setvalue(object value); Cours Java : les conteneurs 22 L'interface SortedSet L'interface SortedMap public interface SortedSet extends Set { // Range-view SortedSet subset(object fromelement, Object toelement); SortedSet headset(object toelement); SortedSet tailset(object fromelement); // Endpoints Object first(); Object last(); // Comparator access Comparator comparator(); Range les éléments suivant l'ordre naturel ou à l'aide de la classe Comparator indiquée à la création Ajoute à l'interface Set un ensemble de méthodes «Range-view» (half-open) Cours Java : les conteneurs 23 public interface SortedMap extends Map { Comparator comparator(); SortedMap submap(object fromkey, Object tokey); SortedMap headmap(object tokey); SortedMap tailmap(object fromkey); Object firstkey(); Object lastkey(); Range les éléments suivant l'ordre naturel ou à l'aide de la classe Comparator indiquée à la création L'interface est comparable avec SortedSet à la différence que l'on utilise des clés à la place des éléments Cours Java : les conteneurs 24

Hash Table Implementations Resizable Array Balanced Tree Linked List Set HashSet TreeSet Interfaces List ArrayList LinkedList Map HashMap TreeMap Set HashSet (en temps constant) TreeSet (en O(logn)) L'implantation TreeSet permet de gérer un ordre dans les éléments de l'ensemble Le temps de parcours avec un itérateur est fonction de la taille de l'ensemble. Il est important de spécifier une taille initial en rapport avec la taille probable d'utilisation. Set set = new HashSet(17); Cours Java : les conteneurs 25 Cours Java : les conteneurs 26 List ArrayList LinkedList On utilise le plus souvent l'implantation ArrayList qui donne un accès en temps constant et qui est (en général) plus rapide que l'implantation LinkedList. Un constructeur permet de spécifier la taille initiale. Map HashMap TreeMap Les remarques sont les mêmes que pour l'implantation des Sets. Cours Java : les conteneurs 27 Cours Java : les conteneurs 28 Sort (Tri) Les algorithmes Shuffling (inverse du tri) Manipulation de données inverse (inverse l'ordre dans la liste) fill (initialise la liste) copy (copie une liste source dans une liste destination. Les deux listes doivent avoir la même taille. Recherche Recherche un élément dans un conteneur trié dans un ordre croissant Cours Java : les conteneurs 29 Les algorithmes Les algorithmes sont accessibles à partir de la classe statique Collections static Object binarysearch(list list, object key) Searches the specified list for the specified object using the binary search algorithm. static void copy(list dest, List src) Copies all of the elements from one list into another. static void fill(list list, Object obj) Replaces all of the elements of the specified list with the specified element. static Object max(collection coll) Returns the maximum element of the given collection, according to the natural ordering of its elements. static Object min(collection coll) Returns the minimum element of the given collection, according to the natural ordering of its elements. static void shuffle(list list) Randomly permutes the specified list using a default source of randomness. static void shuffle(list list, Random rnd) Randomly permute the specified list using the specified source of randomness. static void sort(list list) Sorts the specified list into ascending order, according to the natural ordering of its elements. static void sort(list list, Comparator c) Sorts the specified list according to the order induced by the specified comparator. Cours Java : les conteneurs 30 Illustration Set import java.util.*; public class FindDups { public static void main(string args[]) { Set s = new HashSet(); for (int i=0; i<args.length; i++) if (!s.add(args[i])) System.out.println("Duplicate detected: "+args[i]); Les éléments qui sont déjà dans l'ensemble ne sont pas ajoutés System.out.println(s.size()+" distinct words detected: "+s); Set union = new HashSet(s1); union.addall(s2); // elts de s1 et s2 sans doublons Set intersection = new HashSet(s1); intersection.retainall(s2);// elts commun à s1 et s2 Set difference = new HashSet(s1); difference.removeall(s2); // elts de S1 qui ne sont pas dans s2 Cours Java : les conteneurs 31 Illustration List public static void main(string[] args) { int nbjoueurs = Integer.parseInt(args[0]); int nbcartesparjoueurs = Integer.parseInt(args[1]); // Jeu de 52 cartes String[] couleurs = new String[] { "carreau", "treffle", "coeur", "pique" ; String[] carte = new String[] { "as", "2", "3", "4", "5", "6", "7", "8", "9", "10", "valet", "dame", "roi" ; List jeu = new ArrayList(); for (int i = 0; i < couleurs.length; i++) for (int j = 0; j < carte.length; j++) jeu.add(carte[j] + " de " + couleurs[i]); Collections.shuffle(jeu); for (int i = 0; i < nbjoueurs; i++) System.out.println(jeuJoueur(jeu, nbcartesparjoueurs)); Cours Java : les conteneurs 32

Illustration List Illustration Map public static List jeujoueur(list jeu, int n) { int taillejeu = jeu.size(); List vuejeu = jeu.sublist(taillejeu - n, taillejeu); List jeujoueur = new ArrayList(vueJeu); vuejeu.clear(); return jeujoueur; import java.util.*; public class Freq { private static final Integer ONE = new Integer(1); public static void main(string args[]) { Map m = new HashMap(); // Initialize frequency table from command line for (int i=0; i<args.length; i++) { Integer freq = (Integer) m.get(args[i]); m.put(args[i], (freq==null? ONE : new Integer(freq.intValue() + 1))); System.out.println(m.size()+" distinct words detected:"); System.out.println(m); Cours Java : les conteneurs 33 Cours Java : les conteneurs 34 Illustration SortedSet Illustration SortedMap Les éléments du conteneur entre les objets "doorbell" compris et "pickle" exclu int count = dictionary.subset("doorbell", "pickle").size(); for (char ch='a'; ch<='z'; ch++) { String from = new String(new char[] {ch); String to = new String(new char[] {(char)(ch+1)); System.out.println(from + ": " + dictionary.subset(from, to).size()); Les éléments du conteneur en début d'ensemble et en fin d'ensemble. Volume1 contient les éléments jusqu'à "n" exclu Volume2 contient les éléments à partir de "n" inclus jusqu'au dernier élément SortedSet volume1 = dictionary.headset("n"); SortedSet volume2 = dictionary.tailset("n"); Cours Java : les conteneurs 35 SortedMap m = new TreeMap(); m.put("sneezy", "common cold"); m.put("sleepy", "narcolepsy"); m.put("grumpy", "seasonal affective disorder"); System.out.println(m.keySet()); System.out.println(m.values()); System.out.println(m.entrySet()); [Grumpy, Sleepy, Sneezy] [seasonal affective disorder, narcolepsy, common cold] [Grumpy=seasonal affective disorder, Sleepy=narcolepsy, Sneezy=common cold] final Comparator FUNNY_COMPARATOR =... ; Map m = new TreeMap(FUNNY_COMPARATOR); //... code to populate m Map m2 = new TreeMap(m); // invokes TreeMap(Map) Map m3 = new TreeMap((SortedMap)m) // invokes TreeMap(SortedMap)] Cours Java : les conteneurs 36