F. Voisin : Introduction à Java 1 Introduction à Java - les interfaces - Frédéric VOISIN FIIFO - « Remise à Niveau »

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Gestion des événements (suite)
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Approfondissement du langage
Introduction à Java - les paquetages -
F. Voisin : Introduction à Java 1 Introduction à Java - lhéritage - Frédéric VOISIN FIIFO - « Remise à Niveau »
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
JAV - TD 6 Structures de données JAVA
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Chapitre III Héritage (début)
Classes locales classes définies à l'intérieur d'un bloc de code,
Structures collectives en Java
Programmation orientée objet
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Langage Oriente Objet Cours 4.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Classes abstraites et Interfaces
POO : Objets et classes (Rappels)
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Interfaces : comment classifier ?
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Rappels Java.
Introduction au paradigme orienté-objet (suite)
POO-L3 H. Fauconnier1 Supplément gratuit…. POO-L3 H. Fauconnier2 Entrée-sortie public static void main(String[] args) { // sortie avec printf ou double.
Package IFT1025 Jian-Yun Nie.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Objectifs À la fin de ce cours, vous serez capables de :
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Cours 7 Classes locales Clonage Divers: tableaux.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
14 La gestion d’événements
Tutorat en bio-informatique
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Le polymorphisme.
Cours du 5 novembre.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Les classes Introduction aux Langages Orientés Objets
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Classes abstraites, interface Classe interne Classes enveloppes
Généricité.
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
LES CLASSES ET LES OBJETS
JAVA et l'orientation objet Jean-Jacques LE COZ. Encapsulation L'encapsulation est le concept de masquer l'implémentation de la classe De ne permettre.
Transcription de la présentation:

F. Voisin : Introduction à Java 1 Introduction à Java - les interfaces - Frédéric VOISIN FIIFO - « Remise à Niveau »

F. Voisin : Introduction à Java 2 Les interfaces n Les interfaces définissent des « protocoles de comportements » (contrats) auxquels peuvent adhérer des classes, indépendamment de lhéritage n Une interface énumère généralement des constantes (implicitement public final static …) des entêtes de méthodes dinstance (implicitement public abstract …), Une interface peut ne rien définir, elle sert alors de « marqueur » de propriété ( Serializable, Cloneable, … ) n Une interface est purement déclarative, elle nimplémente rien ! n Une interface nétant pas une classe, elle nest pas instanciable et on ne peut pas spécifier de constructeurs ! n On peut typer une référence comme étant dune interface

F. Voisin : Introduction à Java 3 Un exemple dinterface public interface Affichable { int defaultHeight = 100; // OK mais public static final int defaultWidth = 100; // Mieux (explicite) void dessiner(); // pas de corps ! void move(int dx, int dy); } public class Fenetre implements Affichable { public void dessiner() {... } public void move(int dx, int dy) {... } } public class PostIt implements Affichable {... } public class Video implements Affichable {... }

F. Voisin : Introduction à Java 4 Un exemple dinterface (suite) Chacune des classes Video, PostIt, Fenêtre, …, doit définir les méthodes dessiner et move pour respecter le contrat. n Toutes ces classes ne sont pas dans la même hiérarchie dhéritage: u on ne peut pas forcément ! (si les classes existaient par ailleurs) u on ne veut pas forcément ! Quels sont leurs points communs ??? u Si on créait artificiellement une classe (abstraite) dont elles hériteraient, on ne pourrait plus les faire hériter dautre chose (héritage simple entre classes) n Une classe qui implémente une interface hérite automatiquement de toutes ses constantes (pas la peine / pas possible de les redéfinir)

F. Voisin : Introduction à Java 5 Interface et Typage n Une interface correspond aussi à un type, avec lequel on peut définir des variables, des paramètres, des valeurs de retour de méthodes public Affichable f (Affichable A) { Affichable arg = …; return arg; } n Les classes qui implémentent sont vues comme des sous-types de linterface: Affichable arg = new PostIt(); // OK n On ne peut manipuler linterface que par le biais des membres déclarés arg.move(12, 25); arg.dessiner(); n Une interface nest pas une classe, on ne peut pas linstancier ! n Quand une interface a été publiée, on ne peut plus y toucher sans remettre en cause les classes qui limplémentent (modification du contrat)

F. Voisin : Introduction à Java 6 Utilisation des interfaces public class Afficheur { // Afficheur générique private ArrayList objetsGérés = new ArrayList(); private Affichable courant = null; private int index = 0; public void add(Affichable nouveau) { objetsGérés.add(nouveau); nouveau.dessiner(); } public Affichable suivant() { courant = (Affichable) objetsGérés.get(index++); return courant; } public static void main(String[] args) { Afficheur display = new Afficheur(); display.add(new Video(…)); display.add(new PostIt(…));…; }

F. Voisin : Introduction à Java 7 Un exemple dinterface (fin) Nimporte quelle classe peut adhérer au contrat et être gérée par Afficheur si elle implémente les bonnes méthodes : public class Photo implements Affichable {... } public abstract class Figure implements Affichable {... } // OK ou KO ? public class Icône extends Figure { … } // « hérite » automatiquement de implements Affichable les directives implements sont explicites : le compilateur vérifie que le contrat est respecté, il ne le déduit pas (sauf pour les sous-classes)

F. Voisin : Introduction à Java 8 Hiérarchies dinterfaces n Une interface ne peut pas hériter dune classe (ni le contraire) ! On peut créer des hiérarchies entre interfaces (clause extends ) n Cest même le seul cas où on peut faire de lhéritage multiple (mais on nhérite que des dettes :-)) interface I extends IA, IB, IC { … } public class C implements I { … } C doit fournir les méthodes décrites dans I,IA, IB et IC. C est sous-type de I, IA,IB et IC !

F. Voisin : Introduction à Java 9 Hiérarchies dinterfaces (fin) n Une classe peut implémenter plusieurs interfaces simultanément (simule aussi en partie lhéritage multiple) class C implements IA, IB { … } C est alors sous-type de IA et IB n Associons héritage et implémentation : public class C extends C0 implements IA, IB { … } C doit inclure les méthodes demandées par IA et IB ! C peut soit définir les elle-même, soit les hériter de C0. Pour lextérieur, C est sous-type de C0, IA et IB !

F. Voisin : Introduction à Java 10 Dautres exemple dinterfaces public interface ActionListener // (paquetage awt ) { void actionPerformed(ActionEvent e); } u Une manière de transformer une procédure en objet ! En Java, on ne passe pas de procédure en paramètre, comme cest possible en C. Pas de rapport a priori entre les différentes classes qui pourraient implémenter ActionListener … public class Button extends Component implements Accessible { public void addActionListener(ActionListener l){ … } … } public class NPButton extends Frame implements ActionListener {... Button bout; public void actionPerformed(ActionEvent e) { if (e.getSource() == bout)... else... } }

F. Voisin : Introduction à Java 11 Des interfaces standards Serializable et Cloneable ne déclarent aucune méthode ! Elles servent de « marqueur » pour les classes qui acceptent de pouvoir être sauvegardées ou être copiées champ-à-champ. Collection : la racine de la hiérarchie des interfaces des « conteneurs de données » ( List, Set, …). Différentes classes ( Vector, ArrayList, Bag ) implémentent soit cette interface, soit des interfaces dérivées. Méthodes ? size, add, addAll, contains, equals, iterator, … Iterator déclare hasNext, next, remove Attention à la distinction : public class C public class C { implements Iterator { … … Iterator iterator() {… } }

F. Voisin : Introduction à Java 12 Des interfaces standards (suite) Comparable, Comparator : interfaces pour les classes « à éléments comparables » : Comparable spécifie : public int compareTo(Object o) tandis que Comparator spécifie (en plus de equals ) : public int compare(Object o1, Object o2); Question : pourquoi en avoir deux versions ?

F. Voisin : Introduction à Java 13 Interface ou classe abstraite ? Classe abstraite : u permet de définir ou partager une partie de limplémentation F variables dinstances F méthodes définies (méthodes par défaut…) u une classe au sens courant => pas dhéritage multiple ! Si on hérite de la classe abstraite, on ne pourra pas hériter dautre chose ! u Utile comme racine dun sous-arbre dhéritage quand les sous-classes sont reliées sémantiquement

F. Voisin : Introduction à Java 14 Interface ou classe abstraite (suite) ? Interface : u Aspect purement déclaratif : une interface nimplémente rien ! Il reste à limplémenter :-( u Utile quand on veut mettre en avant ou imposer des facettes communes (services) à plusieurs classes. u Permet de bénéficier dune forme dhéritage multiple u Utile quand on veut décrire quun composant a plusieurs implémentations possibles, non reliées logiquement, et quon ne veut pas se lier à une implémentation : on ne travaille que via linterface

F. Voisin : Introduction à Java 15 Indépendance vis-à-vis dune représentation public interface Complexe { double getRel(); double getIm(); double getModule(); double getArgument(); boolean equals (Object O); … // et toutes les opérations habituellement définies } public class MonApplication { public void traitement(Complexe C1, Complexe C2) { // on est indépendant de la représentation… On ne put manipuler C1 et C2 // que par les méthods de l interface ! }

F. Voisin : Introduction à Java 16 Indépendance … (suite) public class CartComplexe implements Complexe { private double relPart, imPart; public double getRel() { return relPart; } public double getModule() { return … ; } // et toutes les autres méthodes de linterface } public class GeoComplexe implements Complexe { private double module, argument; public double getRel() { return … ; } public double getModule() { return module ; } // et toutes les autres méthodes de linterface }

F. Voisin : Introduction à Java 17 Indépendance … (fin) n OK pour tous ceux qui veulent travailler sur les complexes sans être tributaire dune représentation … MAIS attention à ne pas mélanger nimporte comment les instanciations ! public void fvEquals(Complexe C1, Complexe C2) { … C1.equals(C2); … } fvEquals(new CartComplexe(1.0, 0.0), new GeoComplexe(1.0, 2 * Math.PI)); // OK ? Soit il faut programmer TRES soigneusement equals, soit il faut garantir quon ne mélange pas les implémentations (Comment ?) Problème similaire avec equals dans Collection et ses sous-interfaces et classes d implémentation ! Quand deux instances de Collection sont-elles égales ?