1. 1
Programmation Orientée Objet Avancée
Année Universitaire 2022/2023
Niveau : License L2- DSI
Semestre2
Sana REFAI
sana.refai@gmail.com
1
2. Plan du cours
2
Chapitre 1: La généricité
Chapitre 2: Les collections
Chapitre 3: Les interfaces graphiques
javaFX
Chapitre 4: Gestions des évènements
Chapitre 5: Les entrées /Sorties en java
Chapitre 6: Les threads
Chapitre 5: L’accés aux BD via jdbc
2
4. Introduction(3/4)
Java propose plusieurs moyens de manipuler des ensembles
d’objets :
on a vu les tableaux dont l’inconvenient est de ne pas être
dynamique vis à vis de leur taille. Java fournit des interfaces
qui permettent de gérer des ensembles d’objets dans des
structures qui peuvent être parcourues. Ce chapitre donne
un aperçu de ces collections. Elles sont toutes génériques.
4
5. Définition d’une collection (1/2)
Une collection de données est une structure de donnée
permettant de grouper un ensemble de données autrement
dit une collection représente un groupe d'objets, comme les
tableaux: Elle permet de gérer les données de manière
beaucoup plus souple et plus puissante que les tableaux.
Elles implémentent les méthodes de parcours ,de recherche,
d’ajout, de suppression, etc
Certaines collections acceptent les doublons, d'autres pas.
Certaines sont ordonnées, d'autres pas.
Certaines collections émettent quelques restrictions, comme
le type ou l'interdiction de la valeur null.
5
6. Définition d’une collection (2/2)
Toutes les collections d’objets sont dans le paquetage
java.util et implémentent l'interface Collection par le biais de
sous interfaces comme Set, Map ou List.
o Les listes (list) sont des structures capables de contenir
des objets de différents types accessibles séquentiellement.
o Les maps (Map) sont des tableaux associatifs qui
permettent de lier un objet clé à un autre objet valeur.
o Les ensembles (Set) sont des structures contenant des
éléments non dupliqués dont l'accès reste très performant.
6
8. Interface collection (1/2)
Cette interface définit des méthodes pour des objets qui
gèrent des éléments d'une façon assez générale. Elle est la
super interface de cinq sous-interfaces List, Set, SortedSet,
NavigableSet et Queue..
Les implémentations de l'interface Collection sont
AbstractCollection, AbstractList, AbstractSet, ArrayList,
HashSet, LinkedHashSet, LinkedList, TreeSet et Vector.
8
10. Interface Iterator (1/2)
Cette interface définit des méthodes pour des objets
capables de parcourir les données d'une collection.
10
11. For-each
En Java 5, le parcours d'un tableau ou d'une collection peut
être effectué en utilisant la boucle for-each, également
appelée boucle for-in. Cette boucle est conçue pour
parcourir chaque élément d'une collection de manière
séquentielle, sans avoir besoin de suivre un index ou une
position.
Important: la boucle for-each ne permet pas de modifier
directement les éléments de la collection, car la variable
temporaire ne référence qu'une copie de chaque élément. Si
vous avez besoin de modifier les éléments d'une collection,
vous devez utiliser une boucle for traditionnelle avec un
index ou une position.
11
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number); }
12. L’interface List(1/2)
- Une liste est un ensemble ordonné d’éléments, c'est-à-dire
qu'un élément peut être ajouté à n'importe quelle position,
et non seulement à la fin (comme dans un vecteur).
– L'utilisateur de cette interface a un contrôle précis sur la
position sur laquelle chaque élément sera inséré.
– L'interface List étend l'interface racine Collection. Elle est
implémentée par les classes ArrayList, LinkedList et Vector.
– A l'image des tableaux, il est possible d'accéder aux
éléments d'une liste par l'intermédiaire d'un index. La
recherche s'effectue de la même façon.
– Les listes peuvent contenir des éléments dupliqués, ainsi
que des valeurs null.
12
14. ArrayList (1/3)
– Cette classe est implantée dans un tableau d'objets dont
la taille est dynamique.
Accès immédiat à chaque élément
Ajout et suppression lourdes
- Les constructeurs de ArrayList:
14
17. LinkedList (1/2)
– Cette classe est implantée dans une liste doublement
chaînée.
Ajout et suppression très efficaces
Accès aux éléments lourd
- Les constructeurs de LinkList:
- Parmi les méthodes on peut citer :
17
19. L’interface ListIterator(1/2)
L'interface ListIterator en Java est une sous-interface de
l'interface Iterator qui permet de parcourir une liste en avant
et en arrière (dans les deux sens). En plus des méthodes de
base de l'interface Iterator (hasNext(), next(), remove()),
l'interface ListIterator fournit des méthodes supplémentaires
pour accéder à des éléments spécifiques dans la liste.
19
21. L’interface Set
L'interface Set est une interface qui n’accepte pas deux
objets identiques (au sens de equals). Par exemple, la
méthode add n’ajoute pas un élément si un élément égal est
déjà dans l’ensemble (la méthode renvoie alors false ) .
21
22. L’interface SortedSet(1/2)
Cette interface définit une collection de type ensemble triée.
Elle hérite de l'interface Set.
Le tri de l'ensemble peut être assuré par deux façons :
o les éléments contenus dans l'ensemble implémentent
l'interface Comparable pour définir leur ordre naturel
o il faut fournir au constructeur de l'ensemble un objet
Comparator qui définit l'ordre de tri à utiliser
– Elle définit plusieurs méthodes pour tirer parti de cet
ordre :
22
23. L’interface SortedSet(1/2)
Cette interface définit une collection de type ensemble triée.
Elle hérite de l'interface Set.
Le tri de l'ensemble peut être assuré par deux façons :
o les éléments contenus dans l'ensemble implémentent
l'interface Comparable pour définir leur ordre naturel
o il faut fournir au constructeur de l'ensemble un objet
Comparator qui définit l'ordre de tri à utiliser
23
25. Classe HashSet(1/2)
- Cette classe est un ensemble sans ordre de tri particulier.
– Les éléments sont stockés dans une table de hashage :
cette table possède une capacité.
– Une table de hashage est une structure de données qui
permet une association sous forme clé/valeur. Dans notre
cas, la clé est le code de hashage de l’objet et la valeur est
l’objet lui Même.
L'ajout, la suppression et la recherche d'un élément
dans un HashSet se font en temps constant (en moyenne),
ce qui en fait une structure de données très performante
pour de nombreuses opérations.
25
27. Classe TreeSet(1/2)
TreeSet est une classe de la bibliothèque standard de Java
qui implémente l'interface SortedSet.
Elle utilise une structure de données d'arbre rouge-noir pour
stocker ses éléments, ce qui garantit que les éléments sont
toujours triés selon leur ordre naturel
(ou selon un ordre spécifié par un Comparator fourni lors de
la création d'une instance de TreeSet).
Les éléments stockés dans un TreeSet doivent être
comparables, ce qui signifie qu'ils doivent implémenter
l'interface Comparable ou être utilisés avec un Comparator
externe. Les opérations de base d'un TreeSet (ajout,
suppression, recherche, etc.)
ont une complexité logarithmique,
ce qui en fait une structure de données efficace pour les
ensembles triés de données. 27
29. L’interface Map(1/3)
Cette interface est une des deux racines de l'arborescence
des collections.
Les collections qui implémentent cette interface ne peuvent
contenir des doublons.
Les collections qui implémentent cette interface utilisent
une association entre une clé et une valeur.
– Les tables sont des structures dans lesquelles les objets, au
lieu d'être accessibles à l'aide d'un index correspondant à
leur position, le sont au moyen d'une clé.
– Une structure de type Map permet ainsi de stocker des
couples clé/valeur. La notion d'ordre n'y est pas pertinente.
– En Java, le type Map est une interface qui doit être
implémentée par des classes et n'offre donc qu'une
structure de méthodes sans définitions.
29
31. L’interface Map(3/3)
Le J.D.K. 1.2 propose deux nouvelles classes qui
implémentent cette interface :
o HashMap: qui stocke les éléments dans une table de
hashage (Structure de données qui permet de retrouver très
rapidement un objet si on connaît sa clé),
o TreeMap: qui stocke les éléments dans un arbre ordonnée
suivant les valeurs des clés
– La classe HashTable a été mise à jour pour implémenter
aussi cette interface
31
34. Tri de Collections
- Les structures ordonnées classent leurs éléments de deux
façons :
o selon leur ordre naturel, c’est-à-dire en utilisant le résultat
de leur méthode compareTo() ( de l’interface comparable).
o ou à l'aide d'un comparateur, c'est-à-dire d'un objet
implémentant l'interface Comparator.
- L'utilité des comparateurs vient de ce que l'ordre naturel
ne convient pas toujours à certaines structures. Par
exemple, certains objets peuvent disposer d'une méthode
compareTo() donnant un ordre partiel alors qu'une
structure peut nécessiter un ordre total.
- L'ordre de tri est défini grâce à deux interfaces :
Comparable et Comparator
- Les tables ordonnées SortedMap et les ensembles
ordonnés (SortedSet) exploitent les comparateurs pour trier
leurs éléments.
34
35. L’interface Comparable (1/2)
- Tous les objets qui doivent définir un ordre naturel utilisé
par le tri d'une collection avec cet ordre doivent
implémenter cette interface.
- Cette interface ne définit qu'une seule méthode : int
compareTo(T o).
- Cette méthode renvoie un nombre entier qui représente le
résultat de la comparaison. La mise en œuvre de cette
méthode doit renvoyer les valeurs suivantes :
0 si cette instance et objectToCompareTo sont égales
> 0 si cette instance est supérieure à objectToCompareTo
< 0 si cette instance est inférieure à objectToCompareTo
35
36. L’interface Comparable (2/2)
Exercice: Ecrire une classe Etudiant contenant un cin, nom,
age et moyenne,
- Dans le main créer une liste des étudiants
- Trier par cin,
36
37. L’interface Comparator (1/2)
-Cette interface permet de spécifier un ordre de tri externe
qui peut être valable juste pour un moment donné.
-Elle est utile pour permettre le tri d'objet qui n'implémente
pas l'interface Comparable ou pour définir un ordre de tri
différent de celui défini avec Comparable (l'interface
Comparable représente un ordre naturel : il ne peut y en
avoir qu'un) - Cette interface ne définit qu'une seule
méthode : int compare(Object, Object). - Cette méthode
compare les deux objets fournis en paramètre et renvoie :
<0 si le premier objet est inférieur au second
>0 si le premier objet est supérieur au second
=0 si les deux objets sont égaux
37