11/04/2017 7 L'héritage Cours 7 Cours 7.

Slides:



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

Spécialisation/généralisation Héritage Polymorphisme.
Spécialisation/généralisation Héritage Polymorphisme
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction à la Programmation Orientée Objet Langage Java
Langages objet Définitions Traduction des méthodes en C++
Programmation Objet en JAVA Mise à Niveau
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
Chapitre III Héritage (début)
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Langage Oriente Objet Cours 4.
COURS DE PROGRAMMATION ORIENTEE OBJET :
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.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
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.
Classes abstraites et Interfaces
Langage Oriente Objet Cours 2.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
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.
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction au paradigme orienté-objet (suite)
Design Pattern: Decorator
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
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.
INF1101 Algorithmes et structures de données
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Récursion IFT1025: Programmation 2 Jian-Yun Nie. Définition Le fait pour un programme ou une méthode de s'appeler lui-même. Par exemple –Définir la notion.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
4 Introduction des objets. Les chaînes et tableaux
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
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.
Programmation objet. Les classes Une classe représente un concept Une classe est :  un module : elle regroupe la déclaration de données et les opérations.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Variables et accès en Java. Déclaration des variables final transient static private Printer hp; transient => ne doivent pas être sérialisées volatile.
12/04/ Le polymorphisme Cours 8 Cours 8.
Tutorat en bio-informatique
C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
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.
Cours du 5 novembre.
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
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)
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Transcription de la présentation:

11/04/2017 7 L'héritage Cours 7 Cours 7

Plan du cours 7 Objectifs de l’héritage L’exemple Point et PointColoré 11/04/2017 Plan du cours 7 Objectifs de l’héritage L’exemple Point et PointColoré La syntaxe Le programme, les problèmes La nouvelle analyse et ce qui change Définitions: redéfinition et surcharge Principe fondamental Règles relatives aux constructeurs Règles d'accès Accès aux éléments de l’ancêtre Héritage de Object, la méthode toString() Cours 7 Cours 7

Objectifs de l’héritage 11/04/2017 Objectifs de l’héritage Réemployer Ajouter Redéfinir L’héritage, c’est cela. Hériter, c’est posséder ! Mécanisme qui fait qu’une classe héritière d’une classe ancêtre possède en plus de ses propres champs et méthodes, les champs et méthodes de sa classe mère. Sécurité C’est en cela qu’un langage à objet diffère d’un langage classique. Présentation Lorsque des données sont naturellement associées, on les rassemble dans un modèle appelé classe. Par exemple un couple (x, y) forme un point ; un cercle (point + int)…. On y ajoute alors les méthodes. Supposons que l’on se propose alors de construire un modèle pour un point coloré. Ce qui serait très agréable, ce serait de : réemployer les champs et méthodes de la classe Point ajouter des éléments spécifiques, à la gestion d’un point coloré, redéfinir le comportement de certaines méthodes. Héritage  Sécurité Cours 7 Cours 7

PointColoré hérite de Point 11/04/2017 Point CHAMPS String nom int x int y METHODES Point(String nom, int x, int y) void déplacer(int nouveauX, int nouveauY) void déplacer(Point nouveau) SURCHARGE void afficher() PointColoré hérite de Point CHAMP Color couleur METHODES PointColoré(String nom, int x, int y, Color couleur) void afficher() REDEFINITION Cours 7 Cours 7

La syntaxe class Machin extends Truc { [variables supplémentaires] 11/04/2017 La syntaxe class Machin extends Truc { [variables supplémentaires] Constructeurs et méthodes …. } Cours 7 Cours 7

Le programme Etude du programme Point et PointColoré Ses défauts 11/04/2017 Le programme Etude du programme Point et PointColoré Ses défauts Nouvelle version du programme. Introduction de champs privés Création de méthodes d’accès Cours 7 Cours 7

class Point // Hérite de Object 11/04/2017 class Point // Hérite de Object { // Définition des CHAMPS ou VARIABLES D'INSTANCE String nom; // "" par défaut int x, y; // 0 par défaut // CONSTRUCTEUR Point(String nom, int x, int y) { this.x = x; this.y = y; // this obligatoire pour éviter la confusion this.nom = nom; } // METHODES Méthodes déplacer(...) : SURCHARGE void déplacer (int nouveauX, int nouveauY) {x = nouveauX; y = nouveauY;} void déplacer (Point nouveau) {x = nouveau.x ; y = nouveau.y; } void afficher() { System.out.println("Point " + nom + "[" + x + ", " + y + "]"); } } Cours 7 Cours 7

// Accès possibles aux champs nom, x et y car ils sont publics } } 11/04/2017 class PointColoré extends Point // Hérite de Point { // Champ Color couleur = Color.black; // Couleur par défaut PointColoré(String nom, int x, int y, Color couleur) { super(nom, x, y); // super(…) = Appel du constructeur ancêtre this.couleur = couleur; } void afficher() // REDEFINITION du comportement de Point { System.out.println("PointColoré "+ nom + "[" + x + ", " + y + "], " + couleur); // Accès possibles aux champs nom, x et y car ils sont publics } } Parler de super(..) Cours 7 Cours 7

11/04/2017 Le programme // Point et PointColoré VERSION DE BASE // -------------------- import java.awt.Color; // Importation de la classe Color class Principale { public static void main(String[] args) { Point a = new Point("A", 10, 20); a.afficher(); // Emploi de la méthode de Point PointColoré g = new PointColoré("G", 25, 30, Color.yellow); g.afficher(); // Emploi de afficher() de PointColoré g.déplacer(15, 30); // Réemploi de la méthode de Point - Héritage g.afficher(); // Emploi de afficher() de PointColoré g.déplacer(a); // Réemploi de la méthode de Point - Héritage g.afficher(); // Emploi de afficher() de PointColoré } } Défauts de cette programmation Les coordonnées peuvent être modifiées directement : a.x = 100 , de n’importe où. rendre les variables privées. Mais, alors le afficher() de PointColoré ne fonctionnera plus car x et y seront inaccessibles même en consultation. créer des méthodes accesseur getX() et getY() Cours 7 Cours 7

PointColoré hérite de Point 11/04/2017 La nouvelle analyse Point private String nom Champs private int x private int y . METHODES Point() Constructeur sans argt Point(String nom, int x, int y) void déplacer(int nouveauX, int nouveauY) void déplacer(Point nouveau) void afficher() SURCHARGE String getNom() Méthodes accesseurs int getX() int getY() PointColoré hérite de Point private Color couleur CHAMP . METHODES PointColoré(String nom, int x, int y, Color couleur) void afficher() REDEFINITION Color getColor() Méthodes accesseurs void setColor(Color couleur) Cours 7 Cours 7

Ce qui change Dans Point, les variables deviennent privées. 11/04/2017 Ce qui change Dans Point, les variables deviennent privées. On crée des méthodes publiques d’accès : String getNom() {return nom;} int getX() {return x; } int getY() {return y;} Dans PointColoré l’affichage devient : void afficher() // REDEFINITION du comportement de Point { System.out.println("PointColoré "+ getNom() + "[" + getX() + ", " + getY() + "], " + couleur); } Cours 7 Cours 7

Définitions Super classe, sous-classe. 11/04/2017 Définitions Super classe, sous-classe. Redéfinition : dans une classe dérivée, on définit une méthode de même nom et même signature qu'une méthode ancêtre. Elle masque la méthode de la super classe qui reste cependant accessible grâce à super.méthode(…) Surcharge : dans une même classe ou dans une classe dérivée existent des méthodes de même nom et signatures différentes. Dans une sous classe la surcharge d'une méthode ancêtre est possible mais elle ne masque pas l'ancêtre, elle s'ajoute à la précédente Cours 7 Cours 7

Toute classe hérite de la classe Object 11/04/2017 Principe fondamental Toute classe hérite de la classe Object Donc, toute classe possède par défaut un constructeur hérité de celui de la classe Object Montrer la classe Object dans la doc Visualiser quelques méthodes Cours 7 Cours 7

Règles relatives aux constructeurs 11/04/2017 Règles relatives aux constructeurs Lorsque l'on ne fournit pas de constructeur, Java en fournit un appelé constructeur implicite par défaut hérité de Object. C'est un constructeur sans argument qui initialise les champs à leurs valeurs par défaut. Dès que l'on fournit un constructeur, le constructeur implicite par défaut disparaît. La première instruction d'un constructeur doit être l'appel d'un constructeur ancêtre sinon il y a appel automatique du constructeur ancêtre sans argument. Si l'ancêtre n'a pas de constructeur : pas de problème : c'est le constructeur implicite par défaut qui est activé. Si l'ancêtre a un constructeur il n’a donc plus de constructeur par défaut ; alors, s’il ne possède pas de constructeur sans argument : problème décelé dès la compilation. Conclusion : dès que l'on crée un constructeur, il est sage de prévoir systématiquement un constructeur sans argument pour remplacer le constructeur implicite. Cours 7 Cours 7

11/04/2017 Règles d'accès Dans une classe dérivée, on ne peut accéder à un champ ou une méthode ancêtre que si ceux-ci ne sont pas privés. Ils doivent être public ou protected. private restreint la visibilité à la classe. protected autorise la visibilité dans les classes dérivées. Cours 7 Cours 7

Accès aux éléments de l’ancêtre 11/04/2017 Accès aux éléments de l’ancêtre  Champ : super.champ (ou this.champ. sauf si le champ est private). On peut employer l'un ou l'autre lorsque il n'existe pas dans la classe dérivée de champ portant le même nom qu'un champ ancêtre. En fait, une classe dérivée ne devrait généralement pas avoir directement accès aux champs de l'ancêtre autrement que par l'intermédiaire de méthodes d’accès. Emploi d'une méthode ancêtre redéfinie dans la classe : super.nomDeMéthode(…) Appel d'un constructeur ancêtre super(arguments) Cours 7 Cours 7

Héritage de Object, la méthode toString() 11/04/2017 Héritage de Object, la méthode toString() public String toString() La méthode toString() de la classe Object renvoie une chaîne représentative de l'objet et constituée comme suit : Nom de la classe '@' et un nombre hexa (calculé à partir de l'adresse de l'objet) Pour un tableau : [D @ nb hexa [D tableau de double, [I = tableau d'entiers… La classe Object possède un constructeur Object(). Donc, tout objet possède un constructeur (dit constructeur implicite ou par défaut) qui lui permet de s’initialiser avec des valeurs par défaut. Parmi d’autres méthodes, la classe Object possède une méthode toString()déclarée : public String toString() Donc, tout objet de Java possède une méthode toString(), héritée de Object. La méthode toString() qui s’appelle comme ceci : monObjet.toString(), renvoie une String caractéristique de l’objet auquel elle est appliquée. C’est ce qui permet « d’afficher » un objet. Il faut comprendre « monObjet to String », comme « monObjet transformé en chaîne ». Lorsque l’on fait System.out.print(monObjet), Java convertit monObjet en String en lui appliquant sa méthode toString() ou celle héritée de la classe Object. On a donc intérêt à redéfinir systématiquement la méthode toString() de façon à lui donner un comportement plus intéressant que la méthode héritée de Object. Cours 7 Cours 7

System.out.print(monObjet) 11/04/2017 Lorsque l’on fait System.out.print(monObjet) Java convertit monObjet en String en lui appliquant sa méthode toString() ou celle héritée de la classe Object. On a donc intérêt à redéfinir systématiquement la méthode toString() de façon à lui donner un comportement plus intéressant que la méthode héritée de Object. Distribuer l’exemple de toString() Cours 7 Cours 7