Programmation Java. Redéfinition de méthode (masquage)



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

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

Programmer en JAVA. par Tama

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

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

Chapitre VI- La validation de la composition.

INITIATION AU LANGAGE JAVA

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

TP1 : Initiation à Java et Eclipse

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

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Corrigé des exercices sur les références

Auto-évaluation Programmation en Java

TD/TP PAC - Programmation n 3

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 )

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

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

F. Barthélemy. 17 mai 2005

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

TD/TP PAC - Programmation n 3

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

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

Java 1.5 : principales nouveautés

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

UML. Diagrammes de classes (suite) Delphine Longuet.

Programmation par les Objets en Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Bases Java - Eclipse / Netbeans

Langage Java. Classe de première SI

Projet de programmation (IK3) : TP n 1 Correction

Java c est quoi? Java pourquoi?

Premiers Pas en Programmation Objet : les Classes et les Objets

Initiation à JAVA et à la programmation objet.

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

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

Cours 1: Java et les objets

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

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

Une introduction à Java

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)

Traduction des Langages : Le Compilateur Micro Java

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

Utiliser Java sans BlueJ

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation avec des objets : Cours 7. Menu du jour

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

Programmation Objet Java Correction

as Architecture des Systèmes d Information

Remote Method Invocation (RMI)

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

RMI le langage Java XII-1 JMF

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

Package Java.util Classe générique

Remote Method Invocation en Java (RMI)

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

Classes et Objets en Ocaml.

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

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

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

Java Licence Professionnelle CISII,

Support de cours et TD Programmation Orientée Objet

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

Génie Logiciel avec Ada. 4 février 2013

Java Licence Professionnelle CISII,

PROGRAMMATION PAR OBJETS

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

Machines virtuelles fonctionnelles (suite) Compilation ML Java

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

ACTIVITÉ DE PROGRAMMATION

1 Définition d une classe en Java

Programmation Orientée Objet

Corrigés des premiers exercices sur les classes

Initiation à la programmation orientée-objet avec le langage Java

Interfaces graphiques avec l API Swing

Développement Logiciel

Programmation en Java IUT GEII (MC-II1) 1

Diagramme de classes

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Synchro et Threads Java TM

Classe Interne, Anonyme & Enumération

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

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

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Un ordonnanceur stupide

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Utilisation d objets : String et ArrayList

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

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

Design patterns. Design patterns - définition. Design patterns - avantages

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

BASES DE DONNEES ORIENTEES OBJETS BDA10.1

UML et les Bases de Données

Programmation. fonctionnelle, impérative, logique et orientée objet

CPR Informatique. (poste 3159 ou 3164) Septembre 2002

Transcription:

Programmation Java Programmation objet avec Java Concepts plus avancés Christelle Urtado & Sylvain Vauttier Janvier 2013 Redéfinition de méthode (masquage) Une sous-classe peut redéfinir le code de méthodes existant dans une de ses super-classes (directe ou indirectes), à des fins de spécialisation. On parle de redéfinition de méthode (overriding). La méthode redéfinie doit avoir exactement la même signature*. Le masquage permet de déclencher la méthode la plus spécifique. * à l exception éventuellement du type de retour qui peut être spécialisé. 1

Redéfinition de méthode : exemple public class Employe extends Personne private float salaire; public Employe (float salaireembauche) salaire = salaireembauche; public float getsalaire () return (salaire); return (salaire / 12); public class Commercial extends Employe private float chiffregenere; public Commercial (float salaireembauche) super (salaireembauche); chiffregenere = 0; public void faitaffaire (float montant) chiffregenere += montant; return (chiffregenere / 10); Redéfinition de méthode : exemple public class ProgPpal public static void main (String args []) Employe jean = new Employe (14400)); Commercial pierre = new Commercial (24000); pierre.faitaffaire (50000); System.out.println(jean.prime ()); System.out.println(pierre.prime ()); méthode prime() définie dans la classe Employe méthode prime() définie dans la classe Commercial > javac ProgPpal.java > java ProgPpal 1200 5000 > 2

Redéfinition de méthode et polymorphisme Le principe de substitution (inclusion covariante des extensions des classes) d affecter à une variable typée par une classe un objet du type d une sous-classe. On parle d affectation polymorphique. Employe jacques = new Commercial (30000); L appel d une méthode redéfinie déclenche bien la méthode la plus spécifique car la méthode à exécuter est choisie dynamiquement au runtime (et pas statiquement, à la compilation). Le choix peut ainsi être déterminé par le type réel de l objet (type dynamique) et non pas par le type déclaré pour la variable (type statique) qui est moins précis. On parle de liaison tardive (late binding). Polymorphisme et programme «générique» Le polymorphisme permet d écrire des programmes pour lesquels le même code («générique») permet de déclencher des méthodes distinctes selon le type (dynamique) de l objet (la redéfinition la plus spécifique). Ces programmes vont ainsi: s adapter finement à des types d objets distincts en déclencahnt les comportements les plus spécifiques, avoir la capacité de s adapter à des types qui ne pré-existent pas. La seule contrainte est que ceux-ci redéfinissent la(les) méthode(s) concernées. 3

Exemple de programme «générique» public class ProgPpal public static void main (String args []) Entreprise mapetiteentreprise = new Entreprise (); mapetiteentreprise.embauche (new Employe (14400)); Commercial pierre = new Commercial (24000); mapetiteentreprise.embauche (pierre); pierre.faitaffaire (50000); mapetiteentreprise.embauche (new Employe (18000)); float coutpersonnels = mapetiteentreprise.massesalariale (); public class Entreprise private Employe[] listepersonnels; private nbemployes = 0; 14400+1200 +24000+5000 +18000+1500 =64100 public Entreprise () listepersonnels = new Employe [50]; public void embauche (Employe nouveau) listepersonnels[nbemployes++] = nouveau; public float massesalariale () float cumulsalaires = 0; for (int i = 0; i < nbemployes; i++) cumulsalaires += listepersonnels [i].getsalaire () return (cumulsalaires); + listepersonnels [i].prime (); Référence à la super-classe : super Le mot réservé super permet de faire référence aux informations provenant de la super-classe directe. public class Employe extends Personne private float salaire; return (salaire * 0,1); public class Cadre extends Employe return (super.prime() / 2); 4

Programmes «génériques» : accès aux fonctionnalités spécifiques Lorsqu on utilise un type générique (une superclasse) pour typer une variable qui contient un objet spécifique (du type d une sous-classe), il n est plus possible d accéder «naturellement» aux attributs et aux méthodes spécifiques. L information de typage accessible au compilateur ne permet pas d utiliser les fonctions spécifiques. (Si on essaie, il y a une erreur de compilation). La solution : indiquer au compilateur le type réel de l objet. On parle de «forçage» de type («cast» en anglais). Forçage de type et opérateur instanceof (1) public class Employe extends Personne private float salaire; public Employe (float salaireembauche) salaire = salaireembauche; public float getsalaire () return (salaire); return (salaire / 12); public class Commercial extends Employe private float chiffregenere; public Commercial (float salaireembauche) super (salaireembauche); chiffregenere = 0; public void faitaffaire (float montant) chiffregenere += montant; return (chiffregenere / 10); 5

Forçage de type et opérateur instanceof (2) public class Entreprise private Employe[] listepersonnels; private nbemployes = 0; public Entreprise () listepersonnels = new Employe [50]; public void embauche (Employe nouveau) listepersonnels[nbemployes++] = nouveau; public float massesalariale () float cumulsalaires = 0; for (int i = 0; i < nbemployes; i++) cumulsalaires += listepersonnels [i].getsalaire () + listepersonnels [i].prime (); return (cumulsalaires); public float vente () for (int i = 0; i < nbemployes; i++) if (listepersonnels[i] instanceof Commercial) ((Commercial) listepersonnels[i]).faitaffaire (); force le compilateur à considérer que l objet est du type indiqué permet de savoir si l objet est du type souhaité Classes abstraites (1) Il peut être nécessaire au programmeur de créer une classe déclarant une méthode sans la définir (c-à-d sans en donner le code). La définition du code est dans ce cas laissée aux sous-classes. Une telle classe est appelée classe abstraite. Elle doit être marquée avec le mot réservé abstract. Toutes les méthodes de cette classe qui ne sont pas définies doivent elles-aussi être marquées par le mot réservé abstract. 6

Classes abstraites (2) Une classe abstraite ne peut pas être instanciée. Par contre, il est possible de déclarer et d'utiliser des variables du type de la classe abstraite. Si une sous-classe d'une classe abstraite ne définit pas toutes les méthodes abstraites de ses superclasses, elle est abstraite elle aussi. public abstract class Polygone private int nombrecotes = 3; public abstract void dessine (); // methode non définie public int getnombrecotes() return(nombrecotes); Interfaces Si le programmeur veut s'assurer qu'une certaine catégorie de classes (pas forcément liées par des relations d héritage) implémente un ensemble de méthodes, il peut regrouper les déclarations de ces méthodes dans une interface. De telles classes pourront ainsi être manipulées de manière identique. Les classes désirant appartenir au type d objets ainsi défini : déclarent qu'elles implémentent cette interface, fournissent le code des méthodes déclarées dans cette interface. Mots réservés : interface, implements. 7

Interfaces : Exemple (1) public interface Conduisible void demarrermoteur (); void coupermoteur (); void tourner (float angle); public class TondeuseGazon implements Conduisible //... public void demarrermoteur ()... public void coupermoteur ()... public void tourner (float angle)... public class Voiture implements Conduisible //... public void demarrermoteur ()... public void coupermoteur ()... public void tourner (float angle)... Interfaces : Exemple (2) public class ProgPpal public static void main (String [] args) Voiture mavoiture = new Voiture(); TondeuseGazon matondeuse = new TondeuseGazon(); Conduisible vehicule; Boolean weekend; //... if(weekend == true) vehicule=matondeuse; else vehicule=mavoiture; vehicule.demarrermoteur(); vehicule.tourner(90); vehicule.coupermoteur(); code générique 8

Interfaces (suite) Toutes les méthodes d'une interface sont abstraites. Le modificateur abstract est facultatif. Les interfaces permettent à une classe d objets d appartenir à plusieurs types, malgré un héritage simple entre classes. public class Tapis... public class TapisVolant extends Tapis implements Conduisible... Les interfaces peuvent hériter d une ou plusieurs autres interfaces. 9