ENSTA IN204 Introduction JAVA - PowerPoint PPT Presentation

1 / 43
About This Presentation
Title:

ENSTA IN204 Introduction JAVA

Description:

La classe Voiture repr sente toutes sortes de voitures possibles ... Une classe sp cifique h rite des m thodes et des attributs de sa classe m re ... – PowerPoint PPT presentation

Number of Views:80
Avg rating:3.0/5.0
Slides: 44
Provided by: sig9
Category:

less

Transcript and Presenter's Notes

Title: ENSTA IN204 Introduction JAVA


1
ENSTA IN204Introduction à JAVA
  • Olivier Sigaud
  • LIP6/AnimatLab
  • olivier.sigaud_at_lip6.fr
  • 01.44.27.88.53

2
Plan du cours 4
  • La surcharge
  • L'héritage
  • super() et super
  • La classe Object
  • Le mot clé "final"
  • Les classes "enveloppe" (Wrappers)
  • Héritage et organisation
  • Le typage dynamique

3
Rappel la surcharge
  • On appelle surcharge le fait davoir plusieurs
    méthodes qui ont le même nom au sein de la même
    classe
  • Les exemplaires de la méthode ont des paramètres
    différents
  • Ils peuvent avoir le même type de retour
  • Par contre, impossible davoir des types de
    retour différents pour les mêmes paramètres

4
Surcharge exemple
  • class Additionneur
  • static int somme(int a, int b) // 1
  • return (ab)
  • static int somme(int a, int b, int c) // 2
  • return (abc)
  • static float somme(float a, float b) // 3
  • return (ab)
  • static float somme(int a, int b) // interdit à
    cause de 1
  • return ((float)a(float)b)

5
L'héritage
6
L'héritage
  • On peut souvent classer les objets dans des
    arborescences de type de plus en plus génériques

Mot
Adj
Nom
Verbe
V_Transitif
V_Intransitif
dormir
prendre
7
Un cas concret
  • La classe Voiture représente toutes sortes de
    voitures possibles
  • On pourrait définir un camion comme une voiture
    très longue, très haute, etc.
  • Mais un camion a des spécificités vis-à-vis des
    voitures remorque, cargaison, boîte noire, etc.
  • On pourrait créer une classe Camion qui ressemble
    à la classe Voiture
  • Mais on ne veut pas réécrire tout ce qu'elles ont
    en commun

8
Solution
Vehicule
Voiture
Camion
  • 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 spécifique
    aux camions

9
Objectif de l'héritage
  • On souhaite ne décrire qu'une seule fois le même
    traitement lorsqu'il s'applique à plusieurs
    classes
  • Evite de recopier (notamment les modifications)
  • On crée une classe plus générique à laquelle
    s'applique le traitement
  • Toutes les classes plus spécifiques, héritant de
    cette classe, héritent de ce traitement, elles
    peuvent l'exécuter
  • Le traitement n'est décrit qu'au niveau de la
    classe mère
  • Les classes filles contiennent d'autres
    traitements plus spécifiques

10
Usage de l'héritage
  • Une classe spécifique hérite des méthodes et des
    attributs de sa classe mère (sauf ceux qui sont
    privés)
  • On n'a pas besoin de les réécrire pour la classe
    fille
  • On peut cependant redéfinir une méthode de la
    classe mère dans la classe fille (de même
    signature)
  • Le constructeur d'un objet doit toujours
    commencer par appeler le constructeur de sa
    classe mère

11
Usage de l'héritage (suite)
  • Un objet de type Voiture peut utiliser toutes les
    méthodes de la classe Vehicule
  • Il doit disposer dune valeur pour tous les
    attributs de la classe Vehicule
  • A tout moment, une méthode qui utilise un objet
    de type Vehicule peut manipuler un objet de type
    Voiture en guise de Vehicule
  • Cette dernière propriété est le polymorphisme.

12
Héritage exemple 1
  • class Vehicule
  • // Vehicule()
  • class Voiture extends Vehicule
  • int nbPortes
  • double longueur
  • Voiture(double lg, int nbP)
  • longueur lg
  • nbPortes nbP

13
Exemple 1 suite
  • class Garagiste
  • public boolean garer(Vehicule v)
  • v.demarrer()
  • for (int pl0plltnbPlacespl)
  • if (placepl.estLibre())
  • v.amener(placepl)
  • v.arreter()
  • return true
  • System.out.println( Aucune place libre )
  • return false
  • On peut appliquer la méthode garer() à une
    Voiture, un Camion

14
super() et super
15
La méthode super()
  • super() permet d'appeler le constructeur de la
    classe mère
  • C'est la première chose à faire dans la
    construction d'une sous-classe
  • Appeler le constructeur de la classe mère
    garantit que lon peut initialiser les arguments
    de la classe mère
  • On passe les paramètres nécessaires
  • Si lon nindique pas super(), il y a un appel du
    constructeur par défaut de la classe mère

16
super() exemple
  • class Mot
  • Mot(String chaine) setLexeme(chaine)
  • Mot renvoyerPluriel()
  • class Verbe extends Mot
  • int groupe
  • boolean transitif
  • Verbe(String chaine, int gr, boolean trans)
  • super(chaine)
  • setGroupe(gr)
  • setTransitif(trans)

17
Le mot clef super
  • super. est une référence sur l'objet père
  • super.maMethode() permet d'appeler la méthode
    maMethode() de la classe mère
  • Dans le constructeur de copie
    super(copie.super)

18
Héritage et appel de méthodes
19
Appel de méthodes (1)
class Voiture extends Vehicule void
demarrer()
  • class Vehicule
  • void demarrer()
  • class Main
  • public static void main(String args)
  • Voiture v new Voiture()
  • v.demarrer()
  • Java commence par chercher la méthode dans la
    classe de l'objet créé

Méthode appelée ici
20
Appel de méthodes (2)
class Voiture extends Vehicule
  • class Vehicule
  • void demarrer()
  • class Main
  • public static void main(String args)
  • Voiture v new Voiture()
  • v.demarrer()
  • Si la méthode n'existe pas dans la classe de
    l'objet créé, il va chercher dans la classe mère

Méthode appelée ici
21
Appel de méthodes (3)
class Voiture extends Vehicule void
demarrer()
  • class Vehicule
  • void demarrer()
  • class Main
  • public static void main(String args)
  • Voiture v new Voiture()
  • v.super.demarrer()
  • Pour appeler directement la méthode de la classe
    mère, utiliser le mot clef super.

Méthode appelée ici
22
Héritage et visibilité
23
Héritage et visibilité
  • Une classe fille hérite des attributs et méthodes
    public et protected de la classe mère
  • Elle nhérite pas des attributs et méthodes
    private
  • La classe mère ne voit que ce qui est public dans
    la classe fille
  • Un objet dune classe mère nhérite pas des
    attributs et méthodes de ses classes filles

24
Visibilité exemple
  • class Vehicule
  • protected double longueur
  • class Voiture extends Vehicule
  • protected int nbPortes
  • On peut utiliser lattribut longueur dans
    Vehicule et dans Voiture
  • On ne peut pas utiliser lattribut nbPortes dans
    la classe Vehicule

25
Final
  • Une classe déclarée final ne peut plus être
    étendue
  • Cela signifie qu'aucune autre classe ne peut en
    hériter
  • Une méthode déclarée final ne peut plus être
    dérivée par des sous-classes de la classe dont
    elle provient
  • Intérêt 1 cela permet d'interdire la
    redéfinition d'une méthode par le biais de
    l'héritage
  • ex final boolean checkPassword()
  • Intérêt 2 cela permet de gagner du temps à la
    compilation
  • Une variable ou un attribut déclarés final sont
    constants gt le compilateur interdit de les
    modifier

26
La classe Object
27
La classe Object
  • La classe Object est la classe mère dont héritent
    toutes les autres classes
  • Toute classe définie en Java, que ce soit par
    lutilisateur ou dans un package de lAPI, hérite
    de la classe Object
  • Ainsi, toute classe hérite demblée des méthodes
    de la classe Object

28
Méthodes de la classe Object (1)
  • Public final Class getClass() renvoie dans le
    type de l'objet sous forme dun objet de la
    classe Class (réflexivité)
  • forName() renvoie un objet du type spécifié dans
    la chaîne, permet de construire un objet sans
    avoir de constructeur (réflexivité)
  • int hashCode() renvoie un code utilisé pour
    stocker dans une Hashtable
  • void finalize() force le Garbage Collector

29
Méthodes de la classe Object (2)
  • boolean equals(Object o) attention, teste les
    références. Mais compare les références des
    attributs (gt redéfinir)
  • Object clone() crée une copie de lobjet. Mais
    copie les références des attributs (gt redéfinir)
  • String toString() renvoie une String décrivant
    l'objet. Par défaut, renvoie le type et ladresse
    de stockage (gt redéfinir)
  • ...

30
Intérêt de la classe Object
  • Certains traitements sont si génériques qu'ils
    peuvent s'appliquer à tous les objets
  • Par exemple, une liste peut contenir n'importe
    quel type d'objet et les compter, les trier, etc.
  • Donc il faut écrire la classe Liste pour
    manipuler des objets de la classe Object
  • On pourra alors stocker dans la liste nimporte
    quel type dobjet

31
Exemple une classe Vecteur
  • class Vecteur
  • int size
  • Object donnees
  • Vecteur(int taille)
  • size taille
  • donnees new Objecttaille
  • public boolean add(int index, Object o)
  • if ((indexlt0) (indexgtsize)) return false
  • if (donneesindex!null) return false
  • else
  • donneesindexo
  • return true

32
Classe Vecteur suite
  • class Main
  • public static void main(String ags)
  • Vecteur v new Vecteur(10)
  • Voiture v1 new Voiture(2.80)
  • v.add(0,v1)
  • v.add(5,v1)
  • On constate que lon peut stocker un objet de
    type Voiture dans un vecteur qui contient des
    Object

33
classe Vecteur suite
  • class Vecteur
  • /
  • Renvoie le index_ième objet du vecteur
  • _at_param index numéro de lObject cherché
  • _at_return lObject trouvé ou null
  • /
  • public Object get(int index)
  • if ((indexlt0) (indexgtsize)) return null
  • else
  • return donneesindex

34
Classe Vecteur usage
  • class Main
  • public static void main(String ags)
  • Voiture v1 (Voiture) v.get(5)
  • Lobjet renvoyé étant de type Object, il faut
    préciser quil sagit en fait dune voiture

35
Les Wrappers
36
Les classes  enveloppe  (1)
  • Il existe en Java quantité de classes qui
    ressemblent à Vecteur, permettant de stocker,
    trier, retrouver efficacement des objets les
    Conteneurs (cf. cours 7)
  • Problème les types de base (int, float, double,
    boolean ne sont pas des objets)
  • On ne peut pas les stocker tels quels dans les
    conteneurs
  • Cest à cela que servent les classes enveloppes
    (Wrappers)

37
Les classes  enveloppe  (2)
  • Permettent de représenter des types de base sous
    forme dobjets
  • int entier gt Integer n
  • Integer n new Integer(entier)
  • entier n. intValue()
  • double gtDouble, boolean gt Boolean
  • intValue(), doubleValue() ...
  • A utiliser aussi peu que possible

38
Héritage et organisation
39
Les hiérarchies complexes (1)
Vehicule
VehiculeAXRoues
VehiculeA2Roues
VehiculeA4Roues
Rollers
Mobylette
Voiture
Camion
Trottinette
Velo
Fourgonnette
Exemple de mauvais critère de classification le
nombre de roues Les descendants ont peu de chose
en commun
40
Les hiérarchies complexes (2)
Vehicule
VehiculeAMoteur
VehiculeSansMoteur
Fourgonnette
Mobylette
Voiture
Camion
Trottinette
Velo
Rollers
Cette fois, le critère est structurant
41
Les hiérarchies complexes (3)
VehiculeAMoteur
VehiculeSansMoteur
Moteur monMoteur int nbRoues Clef
maClef demarrer()
int nbRoues propulser()
Si lon est amené à modifier une hiérarchie
complexe cela implique des réorganisations
majeures du code En particulier, des attributs et
des traitements doivent être partagés Importance
de la phase de conception préalable
42
Héritage et composition exemple
  • class Sequenceur
  • MonVecteur data
  • public void reverse()
  • data.reverse()
  • class Sequenceur extends MonVecteur
  • // pas besoin de public void reverse()
    Sequenceur en hérite

43
Héritage et composition que faire ?
  • Problème pas d'héritage multiple on ne peut
    pas hériter de tous les composants
  • Eviter les hiérarchies trop importantes
  • Choisir d'hériter du composant qui a le plus de
    méthodes ? Non
  • Se demander si A est un B un peu spécial ou si A
    contient un B
Write a Comment
User Comments (0)
About PowerShow.com