Académique Documents
Professionnel Documents
Culture Documents
COURS 4
1. POLYMORPHISME - CLASSES ABSTRAITES - INTERFACE ...........................................................................................2 1
1.1. Polymorphisme............................................................................................................................................... 2
1.2. Classes abstraites .............................................................................................................................................. 4
1.3. Non-respect du principe de substitution .......................................................................................................... 7
1.4. Classe interface .............................................................................................................................................. 8
1.5. Quelques écueils à éviter .................................................................................................................................. 11
1.6. Ressources en ligne sur campus ....................................................................................................................... 12
2. LES COLLECTIONS ........................................................................................................................................................... 13
2.1 Les types de Collections....................................................................................................................................... 13
2.2 L’interface Collection .............................................................................................................................................. 16
2.3. La collection List .................................................................................................................................................... 17
2.4. L’interface Map ....................................................................................................................................................... 18
2.5. L’implémentation de Map ...................................................................................................................................... 21
2.6. L’implémentation de List ....................................................................................................................................... 22
2.7. Trier sa collection ................................................................................................................................................... 23
2
1.1. Polymorphisme
Le polymorphisme consiste à découpler le quoi du comment au niveau des types (classes) : on crée une super-classe pour définir
l'interface et plusieurs sous-classes pour définir des implémentations différentes
Rappel : Upcasting nous permet de traiter sans distinction toutes les sous-classes d'une même superclasse.
Le polymorphisme utilise des upcast pour permettre à un programme de "oublier" intentionnellement le type précis d'un
objet.
Cela réduit la complexité en éliminant le besoin d'un traitement spécial de chaque type différent.
Une classe abstraite est une classe qui ne peut être instanciée.
Une classe abstraite est utilisée dans des situations particulières dans le cadre de l’héritage
Exemple :
Commentaires :
- les personnels d'un lycée sont soit des enseignants soit des administratifs soit
des personnels de service.
- Les trois sous-classes "couvrent" l'ensemble des personnels.
Autrement dit cette classe n'est présente que pour factoriser des propriétés. 5
Pour signaler qu'une méthode ou une classe est incomplète et qu'elle ne peut pas être instanciée.
Syntaxe partielle :
abstract class nomsuperclasse
{
// méthode abstraite pure sans corps
public abstract type nomméthode(…) ;
}
Une classe contenant une ou plusieurs méthodes abstract doit également être déclarée abstract. 6
Toute classe qui hérite d'une classe abstract doit implémenter les corps des méthodes abstract, ou se déclarer elle-
même abstract.
Le principe de substitution a été énoncé en 1987 par B. Liskow : " Toute instance d'une sous-classe peut être remplacée par une
7
instance d'une super-classe sans modification de sémantique ". Autrement dit, si la classe B spécialise une classe A, un objet b de B
doit trouver un intérêt dans toutes les opérations de A.
Exemple :
Imaginons que nous disposions d'une classe Liste qui fournit les opérations suivantes :
Une classe interface est constituée d'opérations non décrites servant à définir un service particulier d'une classe.
Par exemple : une classe Personne peut réaliser plusieurs interfaces : un client, un employé, un sportif.
La définition des
méthodes se trouvent dans la
classe qui réalise l'interface.
On parle souvent de liaison
retardée.
La notion d'interface est très puissante en conception objet, sa mise en œuvre permet de diminuer le couplage entre 9
les classes en faisant collaborer des classes avec seulement des services nécessaires.
Pour créer une interface, on utilise le mot-clé interface à la place du mot clé class.
Le mot-clé interface produit une classe complètement abstraite, qui ne fournit absolument aucune implémentation.
Syntaxe partielle :
interface nomInterface
{
… // signature des méthodes sans corps
}
Une interface déclare "Voici ce à quoi ressemblera toutes les classes qui implémenteront cette interface."
Ainsi, tout code utilisant une interface sait quelles méthodes peuvent être appelées pour cette interface.
Une interface est donc utilisée pour établir un "protocole" entre les classes.
Syntaxe partielle :
public class nomclasse implements nomInterface1,…,nomInterfacen
{ ... // implémenter toutes les méthodes des interfaces avec leur corps =}
interface Employe {
public void travailler();
}
interface Sportif {
public void jouer();
}
L'API définit:
Un ensemble d’interfaces décrivant le comportement abstrait des différents types de conteneurs ;
Plusieurs implémentations de ces interfaces, chacun optimisant un aspect différent de son conteneur ;
Des classes et interfaces utilitaires pour gérer une collection.
L'API est largement suffisante pour la plupart de nos utilisations, mais reste ouvert et extensible.
Principales interfaces 14
Implémentations
15
Interfaces utilitaires
Comparator https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html
Iterator https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
Classes utilitaires
Collections https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html
Arrays https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html
Quelques méthodes :
Modifier and Type Method and Description
boolean add(E e) Ensures that this collection contains the specified element (optional operation).
boolean addAll(Collection<? extends E> c) Adds all of the elements in the specified collection to this collection (optional operation).
void clear() Removes all of the elements from this collection (optional operation).
boolean contains(Object o)
Returns true if this collection contains the specified element.
boolean equals(Object o)
Compares the specified object with this collection for equality.
boolean isEmpty()
Returns true if this collection contains no elements.
Iterator<E> iterator()
Returns an iterator over the elements in this collection.
boolean remove(Object o)
Removes a single instance of the specified element from this collection, if it is present (optional operation).
boolean removeAll(Collection<?> c)
Removes all of this collection's elements that are also contained in the specified collection (optional operation).
int size()
Returns the number of elements in this collection.
Object[] toArray()
Returns an array containing all of the elements in this collection.
Les méthodes qui comparent les objets, telles que contains(), testent l'égalité du contenu des objets avec equals(..), et pas
l'égalité des références.
https://docs.oracle.com/javase/8/docs/api/java/util/List.html
17
interface List extends Collection
Doublons acceptés
Quelques méthodes :
boolean add(E e)
Appends the specified element to the end of this list (optional operation).
E get(int index)
Returns the element at the specified position in this list.
boolean isEmpty()
Returns true if this list contains no elements.
E remove(int index)
Removes the element at the specified position in this list (optional operation).
Implémentations:
ArrayList, LinkedList Exemples avec la classe ArrayList
https://docs.oracle.com/javase/8/docs/api/java/util/Map.html
18
Une structure qui associe clefs uniques (keys) à des valeurs (values)
Un tableau associatif
Pour fonctionner correctement, les objets utilisés comme clefs doivent redéfinir Object.hashCode()
Implémentations:
clear() 19
void
Removes all of the mappings from this map (optional operation).
boolean containsKey(Object key)
Returns true if this map contains a mapping for the specified key.
boolean containsValue(Object value)
Returns true if this map maps one or more keys to the specified value.
boolean equals(Object o)
Compares the specified object with this map for equality.
<< get(Object key)
Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.
int
hashCode()
Returns the hash code value for this map.
Boolean isEmpty()
Returns true if this map contains no key-value mappings.
Set<K> keySet()
Returns a Set view of the keys contained in this map.
V put(K key, V value)
Associates the specified value with the specified key in this map (optional operation).
V remove(Object key)
Removes the mapping for a key from this map if it is present (optional operation).
int size()
Returns the number of key-value mappings in this map.
TreeMap https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html
Implémentation de Map par un arbre binaire équilibré
Ordonné – Non-synchronisé
Hashtable https://docs.oracle.com/javase/8/docs/api/java/util/Hashtable.html
ArrayList https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Implémentation de List par un tableau
Peut être très rapide, mais est ralentie par des insertions au milieu, ou une changement fréquente de ses dimensions.
Non-synchronisé
Exemples avec la classe ArrayList
LinkedList https://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html
Implémentation par une liste dynamique doublement chaînée
Offre en moyenne une meilleure performance qu'un ArrayList
Utile pour créer des fils d'attentes avec deux ancres de tête et de queue
Non-synchronisé
On peut facilement trier une List, mais pour trier un Map ou un Set, il faut utiliser la bonne implémentation.
23
Collections.sort(List l, Comparator c)
interface Comparable { int compareTo(Object o) ; } // impose une ordre "naturel" sur les objets d'une même classe
interface Comparator { int compare(Object o1, Object o2) ; } // Permet de comparer deux objets de classes différentes