Polymorphisme. Programmation Orientée Objet. Jean-Christophe Routier Licence mention Informatique Université Lille 1

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

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

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

Chapitre VI- La validation de la composition.

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

TP1 : Initiation à Java et Eclipse

Premiers Pas en Programmation Objet : les Classes et les Objets

Java Licence Professionnelle CISII,

Corrigés des premiers exercices sur les classes

Initiation à JAVA et à la programmation objet.

as Architecture des Systèmes d Information

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

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

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Chapitre 10. Les interfaces Comparable et Comparator 1

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

Programme Compte bancaire (code)

ACTIVITÉ DE PROGRAMMATION

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 )

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Corrigé des exercices sur les références

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

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

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

Programmation par les Objets en Java

TD/TP PAC - Programmation n 3

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

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

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

Remote Method Invocation (RMI)

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

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

Une introduction à Java

TP1 : Initiation à Java et Eclipse

Java 1.5 : principales nouveautés

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

Auto-évaluation Programmation en Java

Package Java.util Classe générique

Cours 1: Java et les objets

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

Synchro et Threads Java TM

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

Utilisation d objets : String et ArrayList

INITIATION AU LANGAGE JAVA

Remote Method Invocation Les classes implémentant Serializable

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

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

Programmation Objet I

F. Barthélemy. 17 mai 2005

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

OpenPaaS Le réseau social d'entreprise

Programmation en Java IUT GEII (MC-II1) 1

Java c est quoi? Java pourquoi?

Derrière toi Une machine virtuelle!

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Programmer en JAVA. par Tama

Projet de programmation (IK3) : TP n 1 Correction

Programmation Par Objets

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

RMI le langage Java XII-1 JMF

TP1. Outils Java Eléments de correction

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence Professionnelle CISII,

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

Calcul Parallèle. Cours 5 - JAVA RMI

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

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

Threads. Threads. USTL routier 1

OCL - Object Constraint Language

Projet gestion d'objets dupliqués

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

Programmation Objet Java Correction

Création d objet imbriqué sous PowerShell.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

OS Réseaux et Programmation Système - C5

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

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

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Conventions d écriture et outils de mise au point

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

Utiliser Java sans BlueJ

Programmation Orientée Objet application au langage Java Version Novembre 2007

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Flux de données Lecture/Ecriture Fichiers

Solutions du chapitre 4

Bases Java - Eclipse / Netbeans

Convers3 Documentation version Par Eric DAVID : vtopo@free.fr

Exercices sur les interfaces

TD2 Programmation concurrentielle

TP, première séquence d exercices.

Java DataBaseConnectivity

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

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

Transcription:

Polymorphisme Programmation Orientée Objet Jean-Christophe Routier Licence mention Informatique Université Lille 1 Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 1

polymorphisme des méthodes possibilité d avoir dans la définition d une même classe des méthodes de même nom mais de signatures différentes variation du nombre et/ou du type/classe des arguments public void somemethod(int i) {... public void somemethod(int i, String name) {... public void somemethod(string name, int i) {... public void somemethod(livre l) {... Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 2

usage possible : valeur par défaut des paramètres public void somemethod(int i, String name) {... traitement de somemethod public void somemethod(int i) { this.somemethod(i,"valeur par défaut"); // invoque la méthode ci-dessus cas des constructeurs : un autre usage de this public class AClass { public AClass(int i, String name) {... gestion de la construction d une instance public AClass(String name) { this(12, name); // appel du constructeur ci-dessus Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 3

Pas sur les valeurs de retour Polymorphisme des valeurs de retour interdit (refusé à la compilation) public int somemethod(string name) {... public String somemethod(string name) {... // interdit!!! public String somemethod(string name, int i) {... // autorisé car args différents Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 4

polymorphisme des objets Notion clef Où l on aborde ce qui fait que les langages objet diffèrent des langages impératifs... première approche par les interfaces Java Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 5

posons le problème... Vie quotidienne Papiers, bouteilles, piles électriques, cageots, etc. sont des objets différents, ayant des comportements différents déchirer du papier, remplir une bouteille mais sont tous recyclables tous peuvent être recyclés (même si processus différents) On peut : recycler tous les objets d une poubelle Programmation Paper, Bottle, Battery, Crate, etc sont des classes d objets différentes, elles proposent donc des fonctionnalités (méthodes) différentes tear() pour Paper, empty() pour Bottle mais elles proposent toutes recycle() avec réponse adaptée à chacune Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 6

peut on, et comment, programmer : recycler tous les objets d une poubelle Problème for (int i = 0; i< trashcan.length; i++) { trashcan[i].recycle(); quelle est la définition du tableau trashcan? ou : quel est le type T de ses éléments? T[] trashcan Informations : T accepte le message recycle() on veut pouvoir mettre à la fois un papier et une bouteille dans la poubelle... Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 7

Pistes? A vous... Quelles sont les possibilités? Quels avantages/inconvénients ont-elles? 1 Conserver les classes différentes 2 Créer un type commun Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 8

solution objet mixer les 2 propositions : Conserver les classes différentes et créer un type commun il faut conserver les classes différenciées Paper, Bottle, etc. il faut pouvoir traiter les objets sans les différencier par leur classe il faut pouvoir considérer leurs instances comme des objets du type accepte l envoi de message recycle() Ne considérer dans ce cas qu une facette de l objet. Réaliser une projection sur ce type. Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 9

solution java : interface En Java, on appelle interface, un ensemble de déclarations de signatures de méthodes publiques. Une classe peut implémenter une interface, dans ce cas elle doit définir un comportement pour chacune des méthodes qui y sont définies. Les instances de la classe pourront alors être vues comme étant du type de l interface et manipulées comme telles, et initialiser une référence de ce type Une telle référence accepte dans ce cas uniquement les envois de message définis dans l interface Interface = type (définit les envois de messages autorisés) Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 10

public interface Recyclable { public void recycle(); // Recyclable ---------------------------------------------------- public class Paper implements Recyclable {... public void recycle() { System.out.println("recycling paper"); // Paper ---------------------------------------------------- public class Bottle implements Recyclable {... public void recycle() { System.out.println("recycling bottle"); // Bottle Recyclable[] trashcan = new Recyclable[2]; trashcan[0] = new Paper(); // projection des instances trashcan[1] = new Bottle(); // sur le type Recyclable for (int i = 0; i< trashcan.length; i++) { +---trace-------------- trashcan[i].recycle(); // message indifférencié recycling paper // mais traitements différents recycling bottle +---------------------- Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 11

Important La référence n est pas l objet! Le type de la référence définit les envois de message autorisés. La classe de l objet définit le traitement exécuté. public interface Recyclable { public void recycle(); // Recyclable public class Paper implements Recyclable { public void dechire() {... public void recycle() { System.out.prilntln("recycling paper"); // Paper... Paper p = new Paper(); p.dechire(); // ok p.recycle(); // ok Recycable r = p; // ok : p est aussi de type Recyclable : 2 références sur le même objet r.recycle(); // ok : code de recycle dans classe Paper exécuté r.dechire(); // NON, envoi de message interdit sur type Recycable Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 12

on peut utiliser une interface là où on utilise une classe (sauf création d instances) tous les deux sont des types public void amethod(recyclable r) {... traitement en n invoquant sur r que des méthodes de Recyclable... Recyclable arecyclableobject = new Paper(); someobject.amethod(arecyclableobject); someobject.amethod(new Bottle()); // projection implicite sur l interface Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 13

une classe peut implémenter plusieurs interfaces, elle doit dans ce cas fournir un comportement pour chacune des méthodes de chaque interface. public interface Flammable { public void burn(); // Flammable... public class Paper implements Recyclable, Flammable { public void recycle() {... traitement... public void burn() {... traitement... // Paper Question Quels types possibles pour une instance de Paper? Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 14

Comment ça marche? Recyclable[] trashcan = new Recyclable[2]; trashcan[0] = new Paper(); // projection des instances trashcan[1] = new Bottle(); // sur le type Recyclable for (int i = 0; i< trashcan.length; i++) { +------------------- trashcan[i].recycle(); // traitement indifférencié recycling paper recycling bottle +------------------- Comment la «bonne» méthode est-elle appelée? Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 15

Late-binding et early binding early binding (C) compilateur génère un appel à une fonction en particulier et le code appelé est précisément déterminé à la compilation lors de l édition de liens late binding (POO) le code appelé lors de l envoi d un message à un objet n est déterminé qu au moment de l exécution (run time) le compilateur ne vérifie «que» l acceptation du message et la validité des types d arguments et de retour. Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 16

Late-binding Mécanisme fondamental de la programmation objet public class RecyclingUnit { /** applies the recycling process to r * @param r the object to be recycled */ public void doit(recyclable obj) { obj.recycle();? quelle méthode est invoquée lors de l exécution de obj.recycle() Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 17

Late-binding Mécanisme fondamental de la programmation objet public class RecyclingUnit { /** applies the recycling process to r * @param r the object to be recycled */ public void doit(recyclable obj) { obj.recycle(); public class RecyclingUnitMain { public static void main(string[] args) { RecyclingUnit recycler = new RecyclingUnit(); Recyclable ref; if (args[0].equals("paper")) { ref = new Paper() ; else { ref = new Bottle(); recycler.doit(ref); Ce code compile, résultat dépend de args[0]....> java RecyclingUnit paper recyclage papier...> java RecyclingUnit other recyclage bottle méthode recycle invoquée non connue a priori. Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 18

Objets polymorphes Les objets sont instances d une classe et donc du type de cette classe... mais sont aussi du type de chacune des interfaces implémentées par la classe. différents points de vue possible sur un même objet un objet présente différentes facettes interface = contrat à respecter Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 19

Cast (= fondre/mouler ) Transtypage Une référence n a qu un seul type, un objet peut en avoir plusieurs. caster /transtyper : à partir d une référence sur un objet, en créer une autre d un autre type, vers le même objet. UpCast changer vers une classe moins spécifique (toujours possible vers Object) : généralisation naturel et implicite, vérifié à la compilation, safe. DownCast changer vers une classe plus spécifique spécialisation explicite, vérifié à l exécution, à risque. Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 20

Illustration Recyclable[] trashcan = new Recyclable[2]; trashcan[0] = new Paper(); // upcast (Paper Recyclable) trashcan[1] = new Bottle(); // implicite (Paper Recyclable) for (int i = 0; i< trashcan.length; i++) { ((Paper) trashcan[i]).burn(); // downcast explicite // (Recyclable Paper) // erreur à l exécution qd i=1 Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 21

Notations UML : interface Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 22

exemple des interrupteurs pour commander des ampoules...... mais aussi des guirlandes Université Lille 1 - Licence mention Informatique Programmation Orientée Objet 23