Cours5 Heritage

download Cours5 Heritage

of 70

  • date post

    10-Nov-2015
  • Category

    Documents

  • view

    219
  • download

    0

Embed Size (px)

description

cours heritage java

Transcript of Cours5 Heritage

  • Cours inspir des cours de Richard Grin, Antoine Tabbone et Hazel Everett

    JavaLicence professionnelle CISII, 2009-2010

    Cours 5 : lhritage

  • 2Hritage

    Introduction- Pour raccourcir les temps dcriture et de mise au point du

    code dune application, il est intressant de pouvoir rutiliserdu code dj crit

    - Exemple La classe Voiture reprsente toutes sortes de voitures possibles On pourrait dfinir un camion comme une voiture trs longue,

    trs haute, etc. Mais un camion a des spcificits par rapport aux voitures :

    remorque, cargaison, bote noire, etc. On pourrait crer une classe Camion qui ressemble la classe

    Voiture Mais on ne veut pas rcrire tout ce qu'elles ont en commun

  • 3Hritage

    Solution- La classe Vehicule contient tout ce qu'il y a

    de commun Camion et Voiture- Camion ne contient que ce qu'il y a de

    spcifique aux camions

    Vehicule

    Voiture Camion

  • 4Hritage

    Objectif de lhritage- Ne dcrire qu'une seule fois le mme traitement lorsqu'il

    s'applique plusieurs classes- vite de recopier (notamment les modifications)- Pour cela,

    on cre une classe plus gnrique laquelle s'applique le traitement

    Toutes les classes plus spcifiques, hritant de cette classe, hritent de ce traitement, et peuvent l'excuter

    Le traitement n'est dcrit qu'au niveau de la classe mre Les classes filles contiennent d'autres traitements plus

    spcifiques

  • 5Hritage Usage de lhritage

    - Une classe spcifique hrite des mthodes et des attributs de sa classe mre (sauf ceux qui sont privs)

    - On n'a pas besoin de les rcrire pour la classe fille

    - On peut cependant redfinir une mthode de la classe mre dans la classe fille (de mme signature)

    - Le constructeur d'un objet doit toujours commencer par appeler le constructeur de sa classe mre

  • 6Hritage

    Usage de lhritage (suite)- Un objet de type Voiture peut utiliser toutes les

    mthodes de la classe Vehicule- Il doit disposer dune valeur pour tous les attributs

    de la classe Vehicule- A tout moment, une mthode qui utilise un objet

    de type Vehicule peut manipuler un objet de type Voiture en guise de Vehicule

    - Cette dernire proprit est le polymorphisme

  • 7Hritage Exemple 1

    class Vehicule {// Vehicule() {}

    }

    class Voiture extends Vehicule {int nbPortes;double longueur;

    Voiture(double lg, int nbP){

    longueur = lg;nbPortes = nbP;

    }}

  • Exemple 1 (suite)class Garagiste {

    public boolean garer(Vehicule v){

    v.demarrer();for (int pl=0;pl

  • Un autre exempleclass Vehicule {

    String couleur ; int nbRoues ;boolean seDeplace ;

    }class VehiculeAMoteur extends Vehicule {int puissance ;}class Autoroute {

    public static void main (String arg[]) {Vehicule v = new Vehicule () ;v.couleur = "rouge" ;v.nbRoues = 2 ;

    VehiculeAMoteur vm = new VehiculeAMoteur();vm.couleur = "bleu";vm.nbRoues = 4 ;vm.puissance = 7 ;

    }}

  • 10

    Hritage

    Vocabulaire - La classe A s'appelle une classe mre,

    classe parente ou super-classe

    - La classe B qui hrite de la classe A s'appelle une classe fille ou sous-classe

  • Exemple de rutilisation : TsPointA.java

    class Point{ public void initialise (int x, int y) { this.x = x ; this.y = y ; }public void deplace (int dx, int dy) { x += dx ; y += dy ; }public int getX() { return x ; }public int getY() { return y ; }private int x, y ;

    }class PointA extends Point{ void affiche(){ System.out.println ("Coordonnees : " + getX() + " " + getY()) ;}

    }public class TsPointA{ public static void main (String args[]){ Point p = new Point () ;p.initialise (2, 5) ;System.out.println ("Coordonnees : " + p.getX() + " " + p.getY() ) ;PointA pa = new PointA () ;pa.initialise (2, 5) ; // on utilise la mthode initialise de Pointpa.affiche() ; // et la mthode affiche de PointA

    }}

  • Exemple de modificationpublic class Rectangle {

    private int x, y; // point en haut gaucheprivate int largeur, hauteur;

    // La classe contient des constructeurs,// des mthodes getX(), setX(int)// getHauteur(), getLargeur(),// setHauteur(int), setLargeur(int),// contient(Point), intersecte(Rectangle)// translateToi(Vecteur), toString(),.... . .public void dessineToi(Graphics g) {

    g.drawRect(x, y, largeur, hauteur);}

    }

  • Exemple de classe fille

    public class RectangleColore extends Rectangle {private Color couleur; // nouvelle variable// Constructeurs. . .// Nouvelles Mthodespublic getCouleur() { return this.couleur; }public setCouleur(Color c) { this.couleur = c; }

    // Mthodes modifiespublic void dessineToi(Graphics g) {

    g.setCouleur(couleur);g.fillRect(getX(), getY(),getLargeur(), getHauteur());

    }}

  • 14

    Hritage Code des classes filles

    - Quand on crit la classe RectangleColore, on doit seulement crire le code (variables ou mthodes) li aux nouvelles

    possibilits on ajoute ainsi une variable couleur et les mthodes qui y

    sont lies

    redfinir certaines mthodes on redfinit la mthode dessineToi()

  • 15

    Hritage Redfinition et surcharge

    - Ne pas confondre redfinition et surcharge des mthodes : On redfinit une mthode quand une nouvelle mthode a la

    mme signature quune mthode hrite de la classe mre On surcharge une mthode quand une nouvelle mthode a le

    mme nom, mais pas la mme signature, quune autre mthode de la mme classe

    Rappel- Signature dune mthode (nom de la mthode + ensemble

    des types de ses paramtres)

  • 16

    2 faons de voir lhritage

    Particularisation-gnralisation : Un rectangle color est un rectangle mais un

    rectangle particulier La notion de figure gomtrique est une

    gnralisation de la notion de polygone Une classe fille offre de nouveaux services ou

    enrichit les services rendus par une classe :- La classe RectangleColore permet de dessiner

    avec des couleurs et pas seulement en noir et blanc

  • 17

    Lhritage en Java

    Fonctionnement- En Java, chaque classe a une et une seule classe

    mre (pas dhritage multiple) dont elle hrite les variables et les mthodes

    - Le mot clef extends indique la classe mre :class RectangleColore extends Rectangle

    - Par dfaut (pas de extends dans la dfinition dune classe), une classe hrite de la classe Object

  • 18

    Hritage

    Ce que peut faire une classe fille ?- La classe qui hrite peut

    ajouter des variables, des mthodes et des constructeurs

    redfinir des mthodes (exactement les mmes types de paramtres)

    surcharger des mthodes (mme nom mais pas mme signature) (possible aussi lintrieur dune classe)

  • 19

    Hritage

    1re instruction dun constructeur - La premire instruction (interdit de placer

    cet appel ailleurs !) dun constructeur peut tre un appel un constructeur de la classe mre :

    super(...)

    ou un autre constructeur de la classe :this(...)

  • 20

    Hritage 1re instruction dun constructeur

    - super() permet d'appeler le constructeur de la classe mre

    - C'est la premire chose faire dans la construction d'une sous-classe

    - Appeler le constructeur de la classe mre garantit que lon peut initialiser les arguments de la classe mre

    - On passe les paramtres ncessaires- Si lon nindique pas super(), il y a un appel du

    constructeur par dfaut de la classe mre

  • 21

    Hritage Constructeur de la classe mre

    public class Rectangle {private int x, y, largeur, hauteur; public Rectangle(int x, int y, int largeur, int hauteur) {

    this.x = x;this.y = y;this.largeur = largeur;this.longueur = longueur;

    }. . .

    }

  • 22

    Hritage Constructeurs de la classe fille

    public class RectangleColore extends Rectangle {private Color couleur;

    public RectangleColore(int x, int y,int largeur, int hauteur Color couleur) {

    super(x, y, largeur, hauteur); //appel explicitethis.couleur = couleur;

    }public RectangleColore(int x, int y, int largeur, int hauteur) {

    this(x, y, largeur, hauteur, Color.black);}. . .

    }

  • Appel de mthodes (1)Appel de mthodes (1)class Vehicule {void demarrer(){}}

    class Main {public static void main(String args[]){

    Voiture v = new Voiture();v.demarrer(); }

    }

    - Java commence par chercher la mthode dans la classe de l'objet cr

    Mthode appele ici

    class Voiture extends Vehicule{void demarrer(){}}

  • Appel de mthodes (2)Appel de mthodes (2)class Vehicule {void demarrer(){}}

    class Main {public static void main(String args[]){

    Voiture v = new Voiture();v.demarrer(); }

    }- Si la mthode n'existe pas dans la classe de l'objet

    cr, il va chercher dans la classe mre

    Mthode appele ici

    class Voiture extends Vehicule{}

  • Appel de mthodes (3)Appel de mthodes (3)class Vehicule {void demarrer(){}}

    class Main {public static void main(String args[]){

    Voiture v = new Voiture();v.super.demarrer(); }

    }- Pour appeler directement la mthode de la classe

    mre, utiliser le mot clef super

    Mthode appele ici

    class Voiture extends Vehicule{void demarrer(){}}

  • 26

    Constructeur

    Appel implicite du constructeurde la classe mre - Si la premire instruction d'un constructeurn'est ni super(...), ni this(...), le compilateur

    ajoute un appel implicite au constructeur sans paramtre de la classe mre (erreur sil nexiste pas) Un constructeur de la classe mre est toujours excut

    avant les autres instructions du constructeur

  • 27

    Constructeur- Mais la premire instruction dun constructeurde la