2. Plan du cours Séances Chapitres 1 Introduction à Java 2 Classe et objet 3 Encapsulation 4 Héritage 5 Polymorphisme 6 Exceptions 7 Interface et collection 8 Interface graphique
3.
4.
5.
6.
7.
8.
9.
10. Les interfaces Héritage d’interface De la même manière qu'une classe peut avoir des sous-classes, une interface peut avoir des "sous-interfaces" Une sous interface - hérite de toutes les méthodes abstraites et des constantes de sa "super-interface" - peut définir de nouvelles constantes et méthodes abstraites interface Set extends Collection { ... } Une classe qui implémente une interface doit implémenter toutes les méthodes abstraites définies dans l'interface et dans les interfaces dont elle hérite.
11. Les interfaces Héritage d’interface A la différence des classes une interface peut étendre plus d'une interface à la fois représente une connexion ouverte vers une entité telle qu’un dipositif hardware, un fichier, une “socket” réseau, ou tout composant logiciel capable de réaliser une ou plusieurs opérations d’entrée/sortie. package java.nio; interface ByteChannel extends ReadableByteChanel, WriteableByteChanel { }
12.
13. Les interfaces abstract class Animal { ... abstract void talk(); } class Dog extends Animal { ... void talk() { System.out.println("Woof!"); } } class Bird extends Animal { ... void talk() { System.out.println("Weet"); } } class Cat extends Animal { ... void talk() { System.out.println(« Miaw!"); } } Polymorphisme signifie qu’une référence d’un type (classe) donné peut désigner un objet de n’importe quelle sous classe et selon nature de cet objet produire un comportement différent Animal animal = new Dog(); ... animal = new Cat(); animal peut être un Chien, un Chat ou n’importe quelle sous classe d ’Animal En JAVA le polymorphisme est rendu possible par la liaison dynamique ( dynamic binding) class Interrogator { static void makeItTalk(Animal subject) { subject.talk(); } } JVM décide à l’exécution ( runtime) quelle méthode invoquer en se basant sur la classe de l’objet Exemple :
14. Les interfaces Exemple : Comment utiliser Interrogator pour faire parler aussi un CuckooClock ? abstract class Animal { ... abstract void talk(); } class Dog extends Animal { ... void talk() { System.out.println("Woof!"); } } class Bird extends Animal { ... void talk() { System.out.println("Weet"); } } class Cat extends Animal { ... void talk() { System.out.println(« Miaw!"); } } abstract class Robot{ ... } class Humanoïde{ ... void talk() { System.out.println(« cuckoo »); } } Pas d’héritage multiple Faire passer CuckooClock dans la hiérarchie d’animal? class Interrogator { static void makeItTalk( Animal subject) { subject.talk(); } } class HumanoîdeInterrogator { static void makeItTalk( Humanoïde subject) { subject.talk(); } } Se passer du polymorphisme?
15. Les interfaces Exemple : abstract class Animal implements Talkative { ... abstract void talk(); } class Dog extends Animal { ... void talk() { System.out.println("Woof!"); } } class Bird extends Animal { ... void talk() { System.out.println("Weet"); } } class Cat extends Animal { ... void talk() { System.out.println(« Miaw!"); } } abstract class Robot{ ... } class Humanoïde implements Talkative { void talk() { System.out.println(« cuckoo »); }} class Interrogator { static void makeItTalk( Animal subject) { subject.talk(); } } interface Talkative { public void talk(); } Association de ce type à différentes classes de la hiérarchie d’héritage Tolkative Utilisation de ce type abstrait Définition d’un type abstrait (interface) Les interfaces permettent plus de polymorphisme car avec les interfaces il n’est pas nécessaire de tout faire rentrer dans une seule famille (hiérarchie) de classe
16.
17.
18.
19.
20.
21. Les collections Généricité • Avant le JDK 5.0, les collections peuvent contenir des objets de n’importe quel type • A partir du JDK 5.0, on peut indiquer le type des objets contenus dans une collection grâce à la généricité • On privilégie ici l’API du JDK 5.0.
22.
23. Les collections Hiérarchie des interfaces Collections Iterable <E> Collection <E> Set <E> List <E> Queue <E> SortedSet <E>
24. Les collections Hiérarchie des interfaces Maps Map<K, V> SortedMap <K, V>
25. Les collections Les classes • Classes abstraites : AbstractCollection<E>, AbstractList<E>, AbstractMap<K,V>,… qui implantent les méthodes de base communes aux collections (ou map) • Classes concrètes : ArrayList<E>, LinkedList<E>, HashSet<E>, TreeSet<E>, HashMap<K,V>, TreeMap<K,V>,… qui héritent des classes abstraites ; elles implantent, en particulier, les méthodes d’accès aux données ( get, put, add,…)
26. Les collections Classes concrètes d'implantation des interfaces
27. Les collections Classes étudiées • Nous étudierons essentiellement les classes ArrayList et HashMap comme classes d'implémentation de List et de Map • Elles permettront d'introduire des concepts et informations qui sont aussi valables pour les autres classes d'implantation
28. Les collections Les classes utilitaires • Collections (avec un s final) fournit des méthodes static pour, en particulier, – trier une collection – faire des recherches rapides dans une collection triée • Arrays fournit des méthodes static pour, en particulier, – trier – faire des recherches rapides dans un tableau trié – transformer un tableau en liste
29. Les collections Exemple de liste public class Main { public static void main(String[] args) { List <String> l = new ArrayList <String>(); l.add("Pierre Jacques"); l.add("Pierre Paul"); l.add("Jacques Pierre"); l.add("Paul Jacques"); Collections.sort(l); System.out.println(l); } }
30. Les collections Exemple de Map public class Main { public static void main(String[] args) { Map <String, Integer> frequences = new HashMap <String, Integer> (); for (String mot : args) { Integer freq = frequences.get(mot); if (freq == null) freq = 1; else freq = freq + 1; frequences.put(mot, freq); } System.out.println(frequences);
31.
32. Exemple de Map sans (un)boxing Map <String, Integer> frequences = new HashMap <String, Integer> (); String [] args = { ….} for (String mot : args) { Integer freq = frequences.get(mot); if (freq == null) freq = 1; else freq = freq + 1; frequences.put(mot, new Integer (freq) ); les collections ne peuvent contenir des types primitifs
33. Exemple avec boxing List<Integer> l =new ArrayList<Integer>(); l.add(10); l.add(-678); l.add(87); l.add(7); Collections.sort(l); System.out.println(l);
57. Exemples List <Employe> le =new ArrayList <Employe>(); Employe e = new Employe("Dupond"); le.add(e); . . . // Ajoute d’autres employés for (int i = 0; i < le.size(); i++) { System.out.println(le.get(i).getNom()); }