Programmation Par Objets



Documents pareils
Programmation Par Objets

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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

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

Package Java.util Classe générique

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

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

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

Programmer en JAVA. par Tama

Utilisation d objets : String et ArrayList

4. Groupement d objets

Java 1.5 : principales nouveautés

Une introduction à Java

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

Programmation Objet I

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

PROGRAMMATION PAR OBJETS

Programmation Objet II

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

Projet de programmation (IK3) : TP n 1 Correction

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

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 )

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Threads. Threads. USTL routier 1

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

TD/TP PAC - Programmation n 3

Auto-évaluation Programmation en Java

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

as Architecture des Systèmes d Information

Introduction au langage de programmation Java

Corrigés des premiers exercices sur les classes

Chapitre VI- La validation de la composition.

Exercices sur les interfaces

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

Classe Interne, Anonyme & Enumération

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

Programmation avec des objets : Cours 7. Menu du jour

Programmation Orientée Objet

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

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Développement Logiciel

Corrigé des exercices sur les références

TP1 : Initiation à Java et Eclipse

Programmation Orientée Objet Java

Langage Java. Classe de première SI

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

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

Une introduction à la technologie EJB (2/3)

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

LOG4430 : Architecture logicielle et conception avancée

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

Programmation par les Objets en Java

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

RMI le langage Java XII-1 JMF

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

Synchro et Threads Java TM

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

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

TD/TP PAC - Programmation n 3

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

Un ordonnanceur stupide

Remote Method Invocation Les classes implémentant Serializable

Certificat Big Data - Master MAthématiques

Remote Method Invocation en Java (RMI)

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

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

Arbres binaires de recherche

OpenPaaS Le réseau social d'entreprise

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

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

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

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

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

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Ateliers SCJP Pour Java 2 Pla2orm, Standard Edi8on 7.0

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

Création d objet imbriqué sous PowerShell.

INITIATION AU LANGAGE JAVA

Java Licence Professionnelle CISII,

Environnements de développement (intégrés)

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Apprendre Java en 154 minutes

Calcul Parallèle. Cours 5 - JAVA RMI

OCL - Object Constraint Language

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

Programmation par composants (1/3) Programmation par composants (2/3)

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

Introduction au langage Java

INF 321 : mémento de la syntaxe de Java

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Recherche dans un tableau

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

2. Comprendre les définitions de classes

F. Barthélemy. 17 mai 2005

Transcription:

Programmation Par Objets package java.util utilitaires de Arrays structures de données génériques B. Carré Polytech Lille 1 Utilitaires et collections Java Tableaux intégrés dans le langage : «Objets» de taille fixe type des éléments : primitif (homogène) ou objets (hétérogène) Bibliothèque (package) java.util Arrays : utilitaires de manipulation de tableaux (égalité, tri, recherches) Structures de données dynamiques («collections» ) Set : ensembles List : listes Map : tables d'association génériques depuis Java 5.0 B. Carré Polytech Lille 2 1

Utilitaires sur les tableaux Fonctionnalités offertes par la classe java.util.arrays sous la forme de fonctions static définies pour des tableaux d'objets, mais surchargées pour tous les types primitifs Egalité de contenu boolean Arrays.equals(t1,t2) <=> (t1.length == t2.length) et (t1[i].equals(t2[i]), i<t1.length) Rappel : la méthode equals de Object teste par défaut l égalité physique (même instance au sens de ==). il est possible de la redéfinir pour tester l égalité logique d objets. Exemple : égalité de contenu entre chaînes définie dans String B. Carré Polytech Lille 3 Egalité de tableaux : exemple public class Ouvrage { protected String titre, auteur; public Ouvrage(String tit, String aut) { titre=tit; auteur=aut; public String tostring() {... return titre+ +auteur; public boolean equals(object o) { return ( (o instanceof Ouvrage) && (auteur.equals(((ouvrage)o).getauteur())) //downcast && (titre.equals(((ouvrage)o).gettitre())) ); B. Carré Polytech Lille 4 2

Egalité de tableaux : exemple Ouvrage t1[] = { new Ouvrage("Germinal","Zola"), new Ouvrage("C","Kernighan ), new Ouvrage( Java, Eckel ) ; Ouvrage t2[] = { new Ouvrage( Germinal, Zola ), new Ouvrage( C, Kernighan ), new Ouvrage( Java, Eckel ) ; t1==t2 est false <=> t1.equals(t2) (égalité physique par défaut) tout comme : t1[i]==t2[i] Arrays.equals(t1,t2) est true (égalité logique) tout comme t1[i].equals(t2[i]) (itérée sur les éléments) B. Carré Polytech Lille 5 Tri void Arrays.sort(Object t[]) Les éléments du tableau doivent offrir une relation d'ordre en implémentant la méthode compareto spécifiée par l interface Comparable <T> : public interface java.lang.comparable<t> { int compareto(t obj); // < 0 si this < obj // = 0 si this = obj // > 0 si this > obj B. Carré Polytech Lille 6 3

Tri : exemple // sachant : class String implements Comparable<String> // ordre sur les ouvrages <=> ordre sur leur auteur : public class Ouvrage implements Comparable<Ouvrage> { public int compareto(ouvrage obj) { return auteur.compareto(obj.getauteur());... //application Arrays.sort(t1); // resultat Java Eckel C Kernighan Germinal Zola B. Carré Polytech Lille 7 Ordres multiples La technique du compareto par l interface Comparable est dite «de l ordre naturel» (méthode interne de l objet). Elle pose problème si: on veut trier des objets dont la classe n implémente pas Comparable ou si l ordre naturel ne convient pas ou encore si l on désire ordonner les objets selon plusieurs critères. Une autre technique est offerte sous la forme de «callbacks» au travers «d objets comparateurs» qui doivent implémenter l interface Comparator<T>: interface java.util.comparator<t> { public int compare(t o1, T o2); // < 0 si o1 < o2 // = 0 si o1 = o2 // > 0 si o1 > o2 B. Carré Polytech Lille 8 4

Ordres multiples Le tri de tableaux s effectue alors en fournissant l objet comparateur en paramètre : <T> void Arrays.sort(T[] t, Comparator<T> c) Exemple // nouvel ordre des ouvrages sur leur titre : public class ComparateurDeTitres implements Comparator<Ouvrage>{ public int compare(ouvrage o1, Ouvrage o2) { return o1.gettitre().compareto(o2.gettitre()); //application Arrays.sort(t2, new ComparateurDeTitres()); B. Carré Polytech Lille 9 Recherches ordonnées recherche d un objet dans un tableau ordonné par ordre naturel int Arrays.binarySearch(Object t[], Object obj) recherche d un objet dans un tableau ordonné par comparateur <T> int Arrays.binarySearch(T t[], T obj, Comparator<T> c) Ces méthodes renvoient : l indice de l élément s il est trouvé (- <indice d insertion> - 1) sinon, avec: <indice d insertion> = 0 si obj < t[0], t.length si obj > t[t.length-1] t[<indice d insertion> - 1] < obj < t[<indice d insertion>], sinon La recherche ordonnée sur un tableau non trié (selon l'ordre correspondant) est imprédictible! Arrays.binarySearch(t1,new Ouvrage( Germinal, Zola ))=2 Arrays.binarySearch(t1,new Ouvrage( Parapente, AliGali ))=-1 Arrays.binarySearch(t1,new Ouvrage( IA, Nilsson ))=-3 Arrays.binarySearch(t2,new Ouvrage( Germinal, Zola ), new ComparateurDeTitres()))=1 B. Carré Polytech Lille 10 5

Bibliothèque de structures de données Collection List Set ArrayList LinkedList HashSet TreeSet Map HashMap TreeMap interfaces classes B. Carré Polytech Lille 11 Collection Les collections sont des regroupements dynamiques d objets. Les formes les plus courantes sont les listes (doublons d'éléments possibles) et les ensembles (sans doublons). Les collections contiennent des objets pour gérer des types primitifs utiliser les classes wrapper Avant 5.0 : le type des éléments est indifféremment Object pas de contrôle statique de type à contrôler dynamiquement «à la main» par casts Depuis 5.0 : les collections sont génériques: paramétrées par le type des éléments contrôle de type correspondant sur les opérations de manipulation. B. Carré Polytech Lille 12 6

Collection L interface Collection<E> spécifie les fonctionnalités abstraites communes aux classes de collections : public interface Collection<E> public boolean add(e o) public boolean remove(object o) public boolean contains(object o) //par equals() public int size() public void clear() public boolean isempty() public Object[] toarray() //inverse de Arrays.asList(t) public boolean equals(object o) Il existe des versions itérées de add, contains, remove : suffixées par All boolean addall(collection<? extends E> c) boolean containsall(collection<?> c) <=> c inclus dans this B. Carré Polytech Lille 13 Les listes : java.util.list Les listes sont des collections d'objets (avec doublons possibles) ordonnées de manière externe par indice de rangement. Elles sont issues d'une même interface List<E> qui ajoute à Collection les opérations d'accès direct indicé (get(i), add(i,x), set (i,x),...) Deux classes de listes : listes chainées: LinkedList<E> plus performantes sur les opérations de mise à jour (ajout/retrait) listes contigües: ArrayList<E> plus performantes sur les opérations d'accès indicé (voir aussi la classe Vector plus ancienne) B. Carré Polytech Lille 14 7

Les listes : java.util.list public interface List<E> extends Collection<E> public void add(int index, E element) // sachant que add ajoute en queue public E get(int index) throws IndexOutOfBoundsException public E set(int index, E element) throws IndexOutOfBoundsException public E remove(int index) throws IndexOutOfBoundsException public int indexof(object o) throws ClassCastException // indice de la 1ere occurrence // -1 si!this.contains(o) public List<E> sublist(int fromindex, int toindex) throws IndexOutOfBoundsException B. Carré Polytech Lille 15 Exemple import java.util.*; public class Circuit { protected List<Porte> composants = new ArrayList<Porte>(); public void brancher(porte p) { composants.add(p); public void remplacer(int i, Porte p) { composants.set(i,p); public void run() { for (int i=0;i<composants.size();i++) { composants.get(i).run(); B. Carré Polytech Lille 16 8

Itération sur les éléments Les collections offrent une interface d itération sur leurs éléments public interface Collection<E> extends Iterable<E> { public Iterator<E> iterator(); Interface d itération public interface Iterator<E> { public boolean hasnext() public E next() throws NoSuchElementException Exemple de la classe Circuit public void run() { Iterator<Porte> iter = composants.iterator(); while (iter.hasnext()) iter.next().run(); et même en 5.0, comme tout Iterable (tableaux, collections,...): for(porte p : composants) p.run(); B. Carré Polytech Lille 17 Collections d éléments de type primitif type primitif : utiliser les classes wrappers ArrayList<Double> l = new ArrayList<Double>(); en 5.0 l "auto-boxing/unboxing" n oblige pas à wrapper/dewrapper double x; l.add(new Double(x)); // wrapping ou depuis 5.0 plus simplement: l.add(x); //"autoboxing» (automatique) // restitution : somme des elements double s=0.0; for(int i=0;i<l.size();i++) // s=s+l.get(i).doublevalue(); // unwrapping, ou depuis 5.0 : s=s+l.get(i); // "auto-unboxing" (automatique) // par iteration "for each" for(double x : l) s=s+x; B. Carré Polytech Lille 18 9

Les ensembles : java.util.set Tout comme les List, les Set implémentent l interface Collection mais interdisent les doublons au sens de equals: o1,o2,!o1.equals(o2) Cette propriété est vérifiée lors des ajouts mais elle n est pas maintenue, la modification d objets peut la rendre caduque : deux éléments peuvent devenir égaux («aliasing») Contrairement aux List, l ordre des éléments est interne et donc pas d accès direct indicé. Il existe principalement deux sortes de Set : TreeSet HashSet B. Carré Polytech Lille 19 HashSet / TreeSet HashSet<E> Les éléments sont rangés de façon hachée par appel de leur méthode hashcode() (de Object, redéfinissable). Les performances de HashSet sont meilleures que TreeSet. Ensembles non ordonnés TreeSet<E> Ou ensembles ordonnés, les éléments sont rangés dans un arbre binaire ordonné, ce qui assure des manipulations en log 2 (n). L ordre des éléments est : soit leur ordre naturel (compareto de Comparable) si aucun Comparator n est founi au constructeur. La classe E des éléments doit alors implémenter Comparable<E>. soit déterminé par un Comparator d éléments fourni au constructeur: public TreeSet<E>(Comparator<E> c) B. Carré Polytech Lille 20 10

Set : exemple Un ensemble d ouvrages ordonné selon leur ordre naturel (par auteur) construit sur le tableau t1 (cf. chapitre Arrays) TreeSet<Ouvrage> ensemble = new TreeSet<Ouvrage>(Arrays.asList(t1)); ensemble.add(new Ouvrage("Parapente","Ali Gali")); for(ouvrage o : ensemble) System.out.println(o); // resultats... Parapente Ali Gali Java Eckel C Kernighan Germinal Zola B. Carré Polytech Lille 21 Les utilitaires de la classe Collections Tout comme Arrays la classe Collections (à ne pas confondre avec l interface Collection) offre les mêmes utilitaires (static) sur les List : tri : sort sur ordre naturel ou par Comparator recherche ordonnée : binarysearch sur ordre naturel ou par Comparator Ces méthodes ont les mêmes profils que dans Arrays mais sont paramétrées par des List Extraits (ordre naturel) : public class Collections { public static void sort(list<e> list) public static int binarysearch(list<e> list, E x)... Ces opérations permettent de trier des listes de l extérieur Contrairement aux TreeSet elles ne sont pas maintenues ordonnées en interne. B. Carré Polytech Lille 22 11

Les tables d association : java.util.map Elles permettent de maintenir des associations clé-valeur <K,V>: chaque clé est unique les clés et valeurs sont des objets (wrapper si types de bases) L'interface abstraite Map spécifie les opérations communes aux classes de tables d'association : public interface Map<K,V> { V put(k key, V value); V get(object key); //!this.containskey(key)=>null boolean containsvalue(object value) boolean containskey(object key); V remove(object key); Set<K> keyset() //l ensemble des cles Collection<V> values() // la liste des valeurs... B. Carré Polytech Lille 23 HashMap / TreeMap Il existe principalement deux sortes de tables : les HashMap et les TreeMap qui implémentent l'interface Map. HashMap<K,V> Tables de hachage Elles utilisent la méthode hashcode() des objets clés. l ensemble des clés est un HashSet. Les performances de HashMap sont meilleures que TreeMap mais pas d'ordre sur les clés TreeMap<K,V> permet de gérer des tables ordonnées sur les clés. l ensemble des clés est un TreeSet (arbre binaire ordonné assurant un accès en log 2 (n). les clés doivent donc être ordonnables soit en implémentant Comparable (ordre naturel) soit en fournissant un Comparator au constructeur : public TreeMap<K,V>(Comparator<K> c) B. Carré Polytech Lille 24 12

TreeMap : exemple Bibliothèque table code-ouvrage ordonnée par les codes (String) TreeMap<String,Ouvrage> public class NonDisponibleException extends Exception { public class Ouvrage { protected String titre, auteur; protected boolean emprunte; protected int compteur; // nombre d'emprunts public int getcompteur() {return compteur; public void emprunter() throws NonDisponibleException { if (emprunte) throw new NonDisponibleException(); else { emprunte=true; compteur++; B. Carré Polytech Lille 25 TreeMap : exemple public class Bibliotheque { protected Map<String,Ouvrage> ouvrages = new TreeMap<String,Ouvrage>(); public void add(string code, Ouvrage o) { ouvrages.put(code,o); public int totalemprunts() {// parcours des valeurs int total=0; Iterator<Ouvrage> iter = ouvrages.values().iterator(); while (iter.hasnext()) total=total+iter.next().getcompteur(); return total; //suite... B. Carré Polytech Lille 26 13

TreeMap : exemple //suite public void listing() {//"for each» sur les cles for(string code : ouvrages.keyset()) System.out.println(code+":"+ouvrages.get(code)); public void emprunter(string code) throws OuvrageInconnuException, NonDisponibleException { try { ouvrages.get(code).emprunter(); catch (NullPointerException ex) { throw new OuvrageInconnuException(); // NonDisponibleException : propagée (cf. throws) public class OuvrageInconnuException extends Exception { B. Carré Polytech Lille 27 TreeMap : exemple // application (main) Bibliotheque bib = new Bibliotheque(); bib.add( I101,new Ouvrage( C, Kernighan )); bib.add( L202,new Ouvrage( Germinal, Zola )); bib.add( S303,new Ouvrage( Parapente, Ali Gali )); bib.add( I345,new Ouvrage( Java, Eckel )); bib.listing(); /* resultat : ordre lexicographique des codes (String) I101:C Kernighan I345:Java Eckel L202:Germinal Zola S303:Parapente Ali Gali */ B. Carré Polytech Lille 28 14

TreeMap : exemple // application (suite) String code; //... try { bib.emprunter(code); catch (OuvrageInconnuException ex) { System.out.println("ouvrage "+code+" inexistant"); catch (NonDisponibleException ex) { System.out.println("ouvrage"+code+"non dispo"); B. Carré Polytech Lille 29 15