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



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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre VI- La validation de la composition.

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

Auto-évaluation Programmation en Java

Programmation par les Objets en Java

TP1 : Initiation à Java et Eclipse

Programmation Par Objets

Corrigé des exercices sur les références

Java Licence Professionnelle CISII,

Corrigés des premiers exercices sur les classes

as Architecture des Systèmes d Information

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

Initiation à JAVA et à la programmation objet.

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

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

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

Programmer en JAVA. par Tama

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

Java 1.5 : principales nouveautés

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

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: Java et les objets

Synchro et Threads Java TM

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

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

Une introduction à Java

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

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

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

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

ACTIVITÉ DE PROGRAMMATION

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Remote Method Invocation Les classes implémentant Serializable

Programmation Objet Java Correction

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

Remote Method Invocation en Java (RMI)

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

TD/TP PAC - Programmation n 3

Bases Java - Eclipse / Netbeans

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

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

TP1. Outils Java Eléments de correction

TP1 : Initiation à Java et Eclipse

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

Remote Method Invocation (RMI)

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

Threads. Threads. USTL routier 1

Programmation Objet I

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

LOG4430 : Architecture logicielle et conception avancée

Java c est quoi? Java pourquoi?

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

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

Classe Interne, Anonyme & Enumération

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

Calcul Parallèle. Cours 5 - JAVA RMI

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

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

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

Derrière toi Une machine virtuelle!

Utilisation d objets : String et ArrayList

Package Java.util Classe générique

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

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

INF 321 : mémento de la syntaxe de Java

Projet de programmation (IK3) : TP n 1 Correction

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

Programmation en Java IUT GEII (MC-II1) 1

PROGRAMMATION PAR OBJETS

Programme Compte bancaire (code)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

RMI le langage Java XII-1 JMF

OpenPaaS Le réseau social d'entreprise

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Par Laurent DESECHALLIERS. Mastère Spécialisé en Management de Projets en Milieu Industriel. CESI de Rouen Promotion 2002/2003.

Composants Logiciels. Le modèle de composant de CORBA. Plan

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

Java Licence Professionnelle CISII,

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

INITIATION AU LANGAGE JAVA

Cours d initiation à la programmation en C++ Johann Cuenin

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

TP, première séquence d exercices.

Classes et Objets en Ocaml.

UE C avancé cours 1: introduction et révisions

Dis papa, c est quoi un bus logiciel réparti?

Création d objet imbriqué sous PowerShell.

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

OCL - Object Constraint Language

Java DataBaseConnectivity

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

Arbres binaires de recherche

Transcription:

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

des méthodes : méthodes de même nom avec signatures différentes cf. constructeurs des objets : pouvoir exploiter une facette d un objet indépendamment des autres multi-typage des objets permettre une projection de l objet sur un type aspect orienté objet non présent dans prog. modulaire Université Lille 1 - Licence Informatique Programmation Orientée Objet 2

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 Informatique Programmation Orientée Objet 3

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 Informatique Programmation Orientée Objet 4

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 Informatique Programmation Orientée Objet 5

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 Informatique Programmation Orientée Objet 6

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 Informatique Programmation Orientée Objet 7

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 Informatique Programmation Orientée Objet 8

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 Informatique Programmation Orientée Objet 9

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 Informatique Programmation Orientée Objet 10

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 Informatique Programmation Orientée Objet 11

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 Informatique Programmation Orientée Objet 12

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 Informatique Programmation Orientée Objet 13

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 Informatique Programmation Orientée Objet 14

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 Informatique Programmation Orientée Objet 15

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? Late-binding et early binding early binding compilateur génère un appel à une fonction en particulier et le code appelé est précisément déterminé 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 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(); public class RecyclingUnitMain { public static void main(string[] args) { RecyclingUnit factory = new RecyclingUnit(); Recyclable ref; if (args[0].equals("paper")) { ref = new Paper() ; else { ref = new Bottle(); factory.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 Informatique Programmation Orientée Objet 17

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 Informatique Programmation Orientée Objet 18

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 Informatique Programmation Orientée Objet 19

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 Informatique Programmation Orientée Objet 20

Retour sur types énumérés les enum implémentent l interface java.lang.comparable public interface Comparable<T> { public int compareto(t o); où T représente le type des éléments à comparer Pour le type énuméré Season, T vaut Season, on a donc la méthode : public int compareto(season o) L enum Season correspond donc à la classe public class Season implements Comparable<Season> {... // voir cours précédent public int compareto(season o) { return this.ordinal() - o.ordinal(); Université Lille 1 - Licence Informatique Programmation Orientée Objet 21

en java 1.4, le T n existe pas et doit être remplacé par Object : public class Season implements Comparable {... // voir cours précédent // pour satisfaire l interface comparable public int compareto(object o) { if (o instanceof Season) { Season theother = (Season) o; return this.ordinal() - theother.ordinal(); else { // Season throw new ClassCastException("argument should be a Season"); // voir plus tard Université Lille 1 - Licence Informatique Programmation Orientée Objet 22

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