![Page 1: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/1.jpg)
Leçon 3 : Héritage
IUP 2 Génie Informatique
Méthode et Outils pour la Programmation
Françoise Greffier
![Page 2: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/2.jpg)
LES FORMES GEOMETRIQUES
Où l’on propose une application permettant de : Dessiner un carré, un rectangle, un cercle, un
triangle …. Associer au dessin : périmètre et surface.
![Page 3: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/3.jpg)
CLASSE FORME
enum categorie { carre, rectangle, cercle, triangle};
class figure{public:
. . .void dessiner (void);double périmètre (void);double surface (void);. . .
private :categorie c;double a,b;point centre;
};
![Page 4: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/4.jpg)
IMPLANTATION
double figure::surface(void){switch c{case carre : return (a*a);case rectangle : return (a*b);. . . }
}
![Page 5: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/5.jpg)
POURQUOI HERITER ?
Relier des objets entre eux (famille)
Factoriser des traitements (Réutilisabilité) Représenter le centre de la figure (généralisation)
IDENTIFICATION DES OBJETS Un cercle (rayon) ne « ressemble » pas à un rectangle (diagonale)
Faciliter l ’extension l’application (Extensibilité) On traite les ellipses
![Page 6: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/6.jpg)
COMMENT HERITER ?
GESTION D’UNE
HIERARCHIE DE CLASSES FactorisationToute figure géométrique a un centre
Spécialisation (un objet est un cas particulier d ’un autre objet)Un carré est un cas particulier de rectangle
Enrichissement (un objet a des propriétés propres)Un triangle rectangle comprend le calcul de l’hypoténuse
![Page 7: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/7.jpg)
GRAPHE D’HERITAGE
Figure
Polygone Ellipse
Parallélogramme triangle Cercle
Rectangle triangle rectangle
Hérite de
![Page 8: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/8.jpg)
RELATION D’HERITAGE
La classe D hérite de la classe M
MClasse mère
DClasse dérivée
Héritage simple :Un unique ascendant direct
![Page 9: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/9.jpg)
HERITAGE PUBLIC
• Les classes dérivées héritent de la classe mère en se spécialisant • Les membres public de la classe mère deviennent des membres public des classes dérivées. • Les classes dérivées peuvent avoir des membres supplémentaires.(enrichissement)
Héritage public Relation : « est une sorte de »
![Page 10: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/10.jpg)
HERITAGE public en C++
class M{public :void f(void);void g(void);
private:...
};
class D:{public :Méthodes redéfinies : void f(void);
Méthodes supplémentaires : void h(void);
private:Caractéristiques supplémentaires
};
public M
L ’instance W de la classe D a accès à la section public des classes D et M
![Page 11: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/11.jpg)
Partage des caractéristiques
class M{public :
...protected :
private:
};
class D:
{public :
...
private:
Caractéristiques supplémentaires
};
public M
Pour la classe D : les membres de la section protected de la classe mère M sont accessibles par ses fonctions membres et fonctions amies
Pour la classe M : les membres de la section protected se comportent comme s’ils étaient placés dans sa section private.
![Page 12: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/12.jpg)
HERITAGE : publicPartage des caractéristiques
class M{public :
protected:
private :
};
class D :{public :
protected:
private :
};
public M
Partie inaccessiblehéritée
![Page 13: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/13.jpg)
Accès aux caractéristiques
class M{public :
...protected :
private:};
class D:
{public :
...
private:
Caractéristiques supplémentaires
};
public M
(ex: fonction main) accès aux sections public des classes M et D
Vision utilisateur
accès aux sections public et protected de la classe M
Classe D
![Page 14: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/14.jpg)
Accès aux caractéristiques
class M{public :
...protected :
private:};
class D:
{public :
...
private:
Caractéristiques supplémentaires
};
public M
Attention : l ’utilisation du qualificateur protected est contraire au principe d ’encapsulation.Si des modifications sont apportées à la section protected de la classe M alors toutes les classes dérivées qui utilisent l ’accès direct à cette section sont susceptibles de subir des modifications.
![Page 15: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/15.jpg)
Les constructeurs
class figure{public :figure (point);//construct :centre
private :point centre;};
rectangle::rectangle(double a,double b,point c):figure (c){ lo=a;
la=b;}
public figureclass rectangle : { public :rectangle(double,double,point);// constructeur par initialisation : //longueur et largeur, centre
};
Appel du constructeur de la classe mère
![Page 16: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/16.jpg)
Les constructeurs
Lors de la création d ’une instance d ’une classe dérivée son constructeur et tous les constructeurs de ses classes parentes sont activés.
Héritage simple :Les constructeurs sont activés de la racine de l ’arbre d ’héritage vers les classes dérivéesActivation : d ’un constructeur par défaut (qui doit exister) ou bien appel à un constructeur explicite.
![Page 17: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/17.jpg)
Les destructeurs
Lors de la destruction d’une instance d ’une classe dérivée son destructeur et tous les destructeurs de ses classes parentes sont activés.
Héritage simple :Les destructeurs sont activés de la classe dérivée vers la racine de l ’arbre d ’héritage.
![Page 18: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/18.jpg)
Fonctions polymorphes
class M{public :
void f(void);void g(void);
private :. . .
Protected :};
class D1:
{public :
void f(void);
void h(void);
private:
Caractéristiques supplémentaires
};
class D2 :
{public :
void f(void);
void k(void);
private:
Caractéristiques supplémentaires
};
public M public M
Le polymorphisme offre la possibilité d ’associer à une méthode un code différent selon l’objet auquel elle appartient.Exemples : f ou tracer pour les formes géométriques
![Page 19: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/19.jpg)
Fonctions polymorphes (Liaison statique)
class M{public :
void f(void);void g(void);
private :. . .
Protected :}; D1 w1;
D2 w2;
w1.f( );
w2.g( );
Vision utilisateur
class D1:
{public :
void f(void);
void h(void);...};
public M class D2 :
{public :
void f(void);
void k(void);
…};
public M
Liaison statique
Comment dans une hiérarchie par héritage, le compilateur sélectionne la méthode polymorphe à exécuter parmi les surcharges incluses dans la hiérarchie de classes ?
![Page 20: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/20.jpg)
Fonctions polymorphes (surcharge ) Liaison statique
Résolution de la surcharge par liaison statique
D1 w1;
D2 w2;
w1.f( );
w2.g( );
Vision utilisateurClasse M
ClasseD1
ClasseD2
Le type de W1 est D1, par conséquent le compilateurregarde si la méthode f est dans la classe D1Si oui, celle-ci est exécutéeSi non, il la recherche dans la première classe ascendante, etc...
![Page 21: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/21.jpg)
Héritage et COMPATIBILITE de type
class M
{ . . .
};
class D :
{ . . .
};
M* ptrM;D d;
ptrM=&d;
D* ptrD;
M m;
ptrD=&m;
On dit que le type statique de *ptrM est M.On dit que le type dynamique de *ptrM est D.L’objet pointé par ptrM reste de type D.
Vision utilisateur
public M
![Page 22: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/22.jpg)
Collection d’objets de types différents
{figure* T[4]; // tableau de pointeurs
// sur figureT[0]=new carré();T[1]=new rectangle();T[2]=new cercle();T[3]=new triangle();
}Sur cet exemple, les composants du tableau T ont
un type statique = figureun type dynamique = carré ou rectangle ...
![Page 23: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/23.jpg)
Liaison statique des fonctions
class figure{ public :void tracer (void) { } //action vide
};
class rectangle: { public :void tracer (void);//rectangle IC est tracé
};
public figure
figure* Ptr;
Ptr = new rectangle();Ptr -> tracer( );
Vision utilisateur
Le type statique de *Ptrest figure. Par conséquent, l’instruction Ptr->tracer( ) active la méthode tracer de la classe figure.=> Action vide
![Page 24: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/24.jpg)
Liaison dynamique des fonctionsFonctions virtuelles
class figure
{ public :
void tracer (void) { } //action vide
};
class rectangle : public figure
{ public :
void tracer (void);// instance courante est tracée
};
figure* Ptr;
Ptr = new rectangle( );Ptr -> tracer( );
Vision utilisateur
La fonction tracer est virtuelle.Par conséquent, l’instruction Ptr->tracer( ); active la méthode associée au type dynamique de *ptr.=> Tracé du rectangle
virtual
virtual
![Page 25: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/25.jpg)
Les fonctions virtuelles
Lors de la redéfinition d’une fonction virtuelle: Les fonctions virtuelles doivent avoir la même
liste de paramètres. Les types de retour sont égaux ou sont des
pointeurs compatibles.
L’exécution des fonctions virtuelles s’appuie sur une indirection (table de pointeurs de fonctions virtuelles).
![Page 26: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/26.jpg)
Classes dérivées : Tout comme une fonction ordinaire une fonction
virtuelle sert de fonction par défaut dans les classes dérivées.
Une fonction virtuelle redéfinie dans une classe dérivée reste virtuelle dans la classe dérivée même si cela n’est pas spécifié.
Les fonctions virtuelles
![Page 27: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/27.jpg)
Classe abstraite
Une classe abstraite est une classe qui ne peut pas être instanciée
exemple : L’instantiation de la classe figure n’a pas de sens.On ne peut pas tracer une figure, on tracera un carré, un cercle …
=> la méthode tracer est virtuelle pure
class figure{ public :
void tracer (void) ;
};
Une classe qui comprend une fonction virtuellepure et qui ne l’implémentepas est une classe abstraite.
virtual =0
//fonction virtuelle pure
![Page 28: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/28.jpg)
Classe abstraite
SYNTAXE : on indique qu’une méthode virtuelle est pure en ajoutant =0 en fin de spécification.
class figure{ public :
void tracer (void) ;
};
Une classe qui comprend une fonction virtuellepure et qui ne l’implémentepas est une classe abstraite.
virtual =0
//fonction virtuelle pure
![Page 29: Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier](https://reader036.vdocuments.site/reader036/viewer/2022062404/551d9d90497959293b8c5997/html5/thumbnails/29.jpg)
UTILISATION D’UNE CLASSE ABSTRAITE
class figure
{ public :
virtual void tracer (void) =0;
//fonction virtuelle pure
};
figure F;
figure* Ptr;
Ptr = new figure;
Vision utilisateur
//illégal
//illégal
// légal
L’instantiation de la classe figure n’a pas de sens.On en peut déclarer que des pointeurs sur figure.D ’une façon générale :
L’instantiation d ’une classe abstraite n’a pas de sens.Elle est refusée à la compilationOn en peut déclarer que des pointeurs sur une classe abstraite.