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



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

Chapitre 10. Les interfaces Comparable et Comparator 1

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

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

Une introduction à Java

Chapitre V. Les classes : Object, Vector, etc.

Introduction. Les méthodes. Les méthodes. Identité et égalité. Identité et égalité. La copie d'objets. Identité et égalité.

Programmation Par Objets

Programmation par les Objets en Java

TP1 : Initiation à Java et Eclipse

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

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

Arbres binaires de recherche

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

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

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

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

Java Licence Professionnelle CISII,

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

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

Programmation Objet I

Programmer en JAVA. par Tama

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

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

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

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

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

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

Corrigés des premiers exercices sur les classes

TD/TP PAC - Programmation n 3

Chapitre VI- La validation de la composition.

Traduction des Langages : Le Compilateur Micro Java

Programmation avec le langage Java

Cours 1: Java et les objets

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

Projet gestion d'objets dupliqués

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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

Programmation avec des objets : Cours 7. Menu du jour

RMI le langage Java XII-1 JMF

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

Auto-évaluation Programmation en Java

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

Corrigé des exercices sur les références

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 )

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

TD/TP PAC - Programmation n 3

INITIATION AU LANGAGE JAVA

Premiers Pas en Programmation Objet : les Classes et les Objets

F. Barthélemy. 17 mai 2005

Projet de programmation (IK3) : TP n 1 Correction

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Package Java.util Classe générique

2. Comprendre les définitions de classes

PROGRAMMATION PAR OBJETS

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

Remote Method Invocation Les classes implémentant Serializable

Programmation Orientée Objet Java

Langage Java. Classe de première SI

as Architecture des Systèmes d Information

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

Utilisation d objets : String et ArrayList

UML. Diagrammes de classes (suite) Delphine Longuet.

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

Programme Compte bancaire (code)

Classe Interne, Anonyme & Enumération

Introduction au langage de programmation Java

Calcul Parallèle. Cours 5 - JAVA RMI

Exercices sur les interfaces

Bases Java - Eclipse / Netbeans

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

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

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

Création d objet imbriqué sous PowerShell.

Programmation en Java IUT GEII (MC-II1) 1

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

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

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Programmation par composants (1/3) Programmation par composants (2/3)

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

Threads. Threads. USTL routier 1

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

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

OCL - Object Constraint Language

Remote Method Invocation en Java (RMI)

Programmation Objet II

Remote Method Invocation (RMI)

Un ordonnanceur stupide

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

Chapitre 2. Classes et objets

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Support de cours et TD Programmation Orientée Objet

Java c est quoi? Java pourquoi?

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

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)

TP, première séquence d exercices.

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

Transcription:

CLASSE RACINE Object ancêtre de toutes les classes RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION) définit donc des méthodes héritées par toutes les classes : public String tostring() par défaut "NomClasse@"+hashCode(), mais à redéfinir en une représentation String de l'objet public boolean equals(object obj) par défaut, retourne this==obj, mais prévue pour être redéfinie en comparaison de contenu (ex : classe String) public int hashcode() protected Object clone() public Class getclass()... Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 1 Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 2

INTERET DE REDEFINIR METHODES HERITEES DE Object public Fraction(int n, int d) { num = n; denom = d; public void afficher() { System.out.println(num+"/"+denom); Fraction f1 = new Fraction(2,3); System.out.println(f1); // Fraction@82b41!! Fraction f2 = new Fraction(2,3); System.out.println(f1.equals(f2)); // false!! intérêt de toujours redéfinir les méthodes tostring() et equals(object) (et aussi hashcode()) dans vos classes Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 3 EXEMPLE DE REDEFINITION de equals(object) public Fraction(int n, int d) { num = n; denom = d; public void afficher() { System.out.println(this); public String tostring() { StringBuffer buf = new StringBuffer("/"); buf.insert(0, String.valueOf(num) ); buf.append( String.valueOf(denom) ); return buf.tostring(); public boolean equals(object autre) { if (!(autre instanceof Fraction) ) return false; else { Fraction f = (Fraction)autre; return num==f.num && denom==f.denom; // (ou bien num*f.denom==denom*f.num, // selon sémantique voulue ) Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 4

REDEFINITION de hashcode() Méthode utilisée par HashMap, HashSet, etc Par défaut, renvoie l adresse mémoire. Specs Java : a.equals(b) => a.hashcode()==b.hashcode(); Redéfinir hashcode() si equals(object) redéfinie hashcode() doit être : égal pour 2 instances «equals» rapide à calculer à valeurs «uniformément distribuées» Recettes possibles : combinaison de hashcode élémentaires choisir attributs significatifs [typiquement parmi ceux comparés dans equals()] calcul type result = 37*result +hash(attr) EXEMPLE DE REDEFINITION de hashcode() // public int hashcode() { return denom + 37*(17+37*num); // // Autre possibilité : // return tostring().hashcode(); // // Ou encore, utiliser une des fonctions du type : // java.util.arrays.hashcode(int[] t) // java.util.arrays.hashcode(double[] t) // java.util.arrays.deephashcode(object[] t) utiliser hashcode() de String (appliqué à une chaîne construite avec les «attributs significatifs» Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 5 Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 6

REDEFINITION DE clone() Fraction f = new Fraction(2,3); Fraction dup = (Fraction)(f.clone()); // si hors du package de Fraction ou de // sous-classe de Fraction, erreur // de compilation : clone() protected // sinon, erreur à l exécution : // CloneNotSupportedException class Fraction implements Cloneable { return super.clone(); Ici, utilisation du «clonage par défaut» hérité de Object (et consistant à copier attributs un par un) est OK Noter au passage l ouverture de visibilité PLUS LARGE lors de la redéfinition Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 7 METHODE clone() duplique l'objet auquel elle est appliquée (copie des attributs) tout objet (et tableau) en hérite utilisable directement pour les tableaux "ordinaires" : int[] tab={1,2,3,4; int[] tab2=(int[])(tab.clone()); // noter la conversion en int[] attention si tableau multi-dim ou d'objets, car copie des références pour les objets que l on veut clonables : 1/ déclarer que la classe implémente l'interface Cloneable, 2/ redéfinir la méthode clone() comme public, et soit retournant super.clone(), soit adaptée à la classe Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 8

REDEFINITION DE clone(): cas d attributs de type référence class CopieFaible implements Cloneable{ private int[] tab; private Fraction f; return super.clone(); CopieFaible original = new CopieFaible( ); CopieFaible copie = (CopieFaible)(original.clone()); // ATTENTION : // - copie.tab pointe vers MEME // tableau que original.tab // - copie.f pointe vers MEME // INSTANCE de Fraction que // original.f REDEFINITION DE clone(): cas d attributs de type référence (2) class CopieForte implements Cloneable{ private int[] tab; private Fraction f; CopieForte dup = (CopieForte)(super.clone()); dup.tab = (int[])(tab.clone()); dup.f = (Fraction)(f.clone()); return dup; les clones d une instance de CopieForte seront réellement totalement indépendants de l original Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 9 Rappels sur spécialisation des méthodes héritées de classe racine Object Fabien Moutarde 10