20
LU2IN002 HÉRITAGE Vincent Guigue & Christophe Marsala

lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

LU2IN002HÉRITAGE

Vincent Guigue & Christophe Marsala

Page 2: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Principes Orientés Objets

Principe 1: EncapsulationRapprochement données (attributs) et traitements (méthodes)Protection de l’information (private/public)

Principe 2: Agrégation/AssociationClasse A A UN Classe BClasse A UTILISE Classe B

Principe 3: HéritageClass B EST UN Classe A

2/16

Page 3: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Héritage

Idée de l’héritageSpécialiser une classe, ajouter des fonctionnalités dans une classeHériter tout le comportement d’une classe existante

1 classe de base = plusieurs spécialisations possiblesAnimaux → vache, chien, mouton...Hiérarchisation possible: Animaux → AnimauxAiles → Papillon

Ne pas modifier le code existantPoint → PointNomme: un point avec un nomNe pas modifier la classe de base

Mais ne pas faire de copier collerHériter le comportement d’une classe

3/16

Page 4: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Exemples & contre exemples

Pour les cas suivants: dire si les relations sont des relations de typeAgrégation/Association ou Héritage:

Salle de Bains et BaignoirePiano et JoueurPianoPersonne, Enseignant et EtudiantAnimal, Chien et LabradorCercle et EllipseEntier et Réel

4/16

Page 5: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Exemples & contre exemples

Pour les cas suivants: dire si les relations sont des relations de typeAgrégation/Association ou Héritage:

Salle de Bains et BaignoirePiano et JoueurPianoPersonne, Enseignant et EtudiantAnimal, Chien et LabradorCercle et EllipseEntier et Réel

4/16

Page 6: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Exemples & contre exemples

Pour les cas suivants: dire si les relations sont des relations de typeAgrégation/Association ou Héritage:

Salle de Bains et BaignoirePiano et JoueurPianoPersonne, Enseignant et EtudiantAnimal, Chien et LabradorCercle et EllipseEntier et Réel

4/16

Page 7: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Exemples & contre exemples

Pour les cas suivants: dire si les relations sont des relations de typeAgrégation/Association ou Héritage:

Salle de Bains et BaignoirePiano et JoueurPianoPersonne, Enseignant et EtudiantAnimal, Chien et LabradorCercle et EllipseEntier et Réel

4/16

Page 8: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Exemples & contre exemples

Pour les cas suivants: dire si les relations sont des relations de typeAgrégation/Association ou Héritage:

Salle de Bains et BaignoirePiano et JoueurPianoPersonne, Enseignant et EtudiantAnimal, Chien et LabradorCercle et EllipseEntier et Réel

⇒ Qu’est ce qu’une SalleDeClasse?Réponse détaillée un peu plus tard

4/16

Page 9: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Exemple: Point et PointNomme

ProblèmeOn veut implémenter deux classes:

1 Point en 2 dimensions2 Point en 2 dimensions qui possède un nom

1 pub l i c c l a s s Po in t { // (1 ) Type / nom de c l a s s e2 p r i v a t e double x ; p r i v a t e double y ; // (2 ) A t t r i b u t s34 pub l i c Po in t ( double x , double y ) { t h i s . x = x ; t h i s . y = y ; } // (3 ) Con s t r u c t e u r s5 pub l i c double getX ( ) { re tu rn x ; }6 pub l i c double getY ( ) { re tu rn y ; }78 pub l i c double c a l c u l eD i s t a n c e ( Po in t p2 ) { // (4 ) methodes ( t r a i t em e n t s )9 double dx = Math . abs ( p2 . getX ( ) − getX ( ) ) ; double dy = Math . abs ( p2 . getY ( ) − getY ( ) ) ;

10 re tu rn Math . s q r t ( dx∗dx+dy∗dy ) ;11 }12 pub l i c vo id move ( double tx , double t y ) { d ep l a c e ( x+tx , y+ty ) ; }13 p r i v a t e vo id dep l a c e ( double x , double y ) { t h i s . x=x ; t h i s . y=y ; }// (5 ) methodes p r i v e e s1415 pub l i c S t r i n g t o S t r i n g ( ) { re tu rn " ( "+x+" , "+y+" ) " ; } // (6 ) methodes s t anda r d s

5/16

Page 10: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Héritage : syntaxe

1 pub l i c c l a s s PointNomme extends Po in t {2 p r i v a t e S t r i n g name ;34 pub l i c PointNomme ( double x , double y , S t r i n g name) {5 super ( x , y ) ;6 t h i s . name = name ;7 }89 pub l i c S t r i n g t o S t r i n g ( ) {

10 re tu rn "PointNomme␣ [ name=" + name + "␣" +11 super . t o S t r i n g ( ) + " ] " ;12 }13 }

Mot clé extends dans la signature de la classeMot clé super

Erreur couranteAttention à ne pas dupliquer les attributs: la classe fille étend la super-classe, ellecontient la super-classe

6/16

Page 11: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Représentation mémoire

1 PointNomme p = new PointNomme (1 , 2 , " t o to " ) ;

1 Représentation complète: tous les objets sont séparés, on représente explicitementla séparation entre attributs de la classe et de la super-classe

PointNomme pString nomPointNomme

double x = 1double y = 2

Point"toto"String

2 Représentation usuelle simplifiée:PointNomme p

String nom = "toto"double x = 1double y = 2

PointNomme

Attention, la représentation de la String est limite...

7/16

Page 12: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Construction d’une instance de la classe fille

Idée:1 construire une instance de la classe mère2 initialiser les attributs relatifs à la classe fille

1 pub l i c c l a s s PointNomme extends Po in t {2 p r i v a t e S t r i n g name ;3 pub l i c PointNomme ( double x , double y , S t r i n g name) {4 super ( x , y ) ; // p r em i e r e i n s t r u c t i o n , o b l i g a t o i r em e n t5 t h i s . name = name ; // i n i t . a t t r i b u t s de l a c l a s s e f i l l e6 }

Règle générale: choisir un constructeur dans la super-classe et l’appeler avecsuper(...)

Exception: si la super-classe a un constructeur sans argument, l’appel à super()est implicite

8/16

Page 13: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Cas particulier : super()

S’il existe un constructeur accessible & sans argument dans la super-classe:1 pub l i c c l a s s Po in t {2 p r i v a t e double x , y ;3 pub l i c Po in t ( ){4 x=0; y=0;5 }6 . . .

Alors, les deux écritures suivantes sont équivalentes:

1 pub l i c c l a s s PointNomme2 extends Po in t {3 p r i v a t e S t r i n g name ;45 pub l i c PointNomme ( S t r i n g name) {6 super ( ) ;7 t h i s . name = name ;8 }9 . . .

1 pub l i c c l a s s PointNomme2 extends Po in t {3 p r i v a t e S t r i n g name ;45 pub l i c PointNomme ( S t r i n g name) {6 t h i s . name = name ;7 }8 . . .

9/16

Page 14: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Représentation des liens UML

Extension des capacités/propriétés d’un objetPointNomme p = newPointNomme(1,2,"totot");

p est un PointNommep est un Point (accès à getX(), getY()...)

10/16

Page 15: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Héritage: propriétés

Si B hérite de A, implicitement, B hérite de:des méthodes publiques de Ades méthodes protégées de Ad’un attribut super du type de la super-classe (A)

super référence la partie de B qui correspond à A

En revanche, B n’hérite pas:des attributs privés de Ades méthodes privées de Ades contructeurs publiques, privés ou protégés de A

invocation spécifique via super()

11/16

Page 16: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Vision client

PointNomme

PointNomme(x, y, nom)getX() : doublegetY() : double

move(tx :double, ty:double) : voidtoString() : StringgetNom() : String

1 PointNomme p =2 new PointNomme (1 ,2 , "p1" ) ;34 System . out . p r i n t l n ( p . getX ( ) ) ;5 // methode d e f i n i e dans Po in t6 // h e r i t e e dans PointNomme7 // u t i l i s e e de man ie re t r a n s p a r e n t e

Méthodes publiques de Point (mais pas les constructeurs)Pas de vision sur les données private

12/16

Page 17: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Nouveau niveau d’accès: protected

protectedNiveau intermédiaireLes attributs et méthodes protected ne sont pas visibles de l’extérieur mais sontvisibles dans les classes filles

public: visible partout, dans la classe et chez le client (main, autres classes...)protected: visible dans la classe, dans les classes filles mais nulle part ailleurs.private: visible dans la classe seulement

13/16

Page 18: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Exemple d’accès protected

1 pub l i c c l a s s Po in t {2 p r i v a t e double x , y ;3 // l e s c l a s s e s d e r i v e e s y ont acc e s4 protected i n t i d ;5 . . .6 }7 pub l i c c l a s s PointNomme {8 . . .9 vo id methode ( double d ){

10 i n t t o t o = i d ; // ou supe r . i d ;11 . . .12 }13 }

Variable/Méthode protectedAccès depuis la classeAccès depuis les classes fillesPas d’accès depuis l’extérieur

Une classe ⇒ 3 visions possibles: développeur, héritier, client14/16

Page 19: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Cas particulier : arguments par défaut

Le constructeur de lasuper-classe a desargumentsLes constructeurs desclasses filles non...

On donne desarguments par défaut

1 pub l i c c l a s s Animal {2 p r i v a t e S t r i n g nom ;3 pub l i c Animal ( S t r i n g nom) {4 t h i s . nom = nom ;5 }6 pub l i c S t r i n g getNom (){7 re tu rn nom ;8 }9 }

1011 pub l i c c l a s s Poule extends Animal {12 p r i v a t e s t a t i c i n t cpt = 0 ;13 pub l i c i n t i d ;1415 pub l i c Poule ( ) {16 super ( " pou l e " ) ;17 i d = cpt++;18 }19 pub l i c S t r i n g t o S t r i n g ( ){20 re tu rn S t r i n g . fo rmat ( "%s%02d" ,21 getNom ( ) , i d ) ;22 }23 }

15/16

Page 20: lu2in002 Héritage - Laboratoire d'informatique de Paris 6guigue/wikihomepage/uploads/Course/... · 2020. 10. 19. · super référencelapartie de B quicorrespondàA Enrevanche,Bn’héritepas:

Conclusion

Un nouveau paradigme de réflexion, au coeur de la POODes éléments de syntaxe à maitriser... To be continuated (subsomption, surcharge & redéfinition)

16/16