La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.

Présentations similaires


Présentation au sujet: "Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier."— Transcription de la présentation:

1 Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier

2 LES FORMES GEOMETRIQUES Où lon propose une application permettant de : Dessiner un carré, un rectangle, un cercle, un triangle …. Associer au dessin : périmètre et surface.

3 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; };

4 IMPLANTATION double figure::surface(void) {switch c { case carre : return (a*a); case rectangle : return (a*b);... } }

5 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 lapplication (Extensibilité) On traite les ellipses

6 COMMENT HERITER ? GESTION DUNE HIERARCHIE DE CLASSES Factorisation Toute 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 lhypoténuse

7 GRAPHE DHERITAGE Figure PolygoneEllipse ParallélogrammetriangleCercle Rectangletriangle rectangle Hérite de

8 RELATION DHERITAGE La classe D hérite de la classe M M Classe mère D Classe dérivée Héritage simple : Un unique ascendant direct

9 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 »

10 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

11 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 sils étaient placés dans sa section private.

12 HERITAGE : public Partage des caractéristiques class M {public : protected: private : }; class D : {public : protected: private : }; public M Partie inaccessible héritée

13 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

14 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.

15 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 figure class rectangle : { public : rectangle(double,double,point); // constructeur par initialisation : //longueur et largeur, centre }; Appel du constructeur de la classe mère

16 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ées Activation : d un constructeur par défaut (qui doit exister) ou bien appel à un constructeur explicite.

17 Les destructeurs Lors de la destruction dune 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.

18 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 Le polymorphisme offre la possibilité d associer à une méthode un code différent selon lobjet auquel elle appartient. Exemples : f ou tracer pour les formes géométriques

19 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 ?

20 Fonctions polymorphes (surcharge ) Liaison statique Résolution de la surcharge par liaison statique D1 w1; D2 w2; w1.f( ); w2.g( ); Vision utilisateur Classe M Classe D1 Classe D2 Le type de W1 est D1, par conséquent le compilateur regarde si la méthode f est dans la classe D1 Si oui, celle-ci est exécutée Si non, il la recherche dans la première classe ascendante, etc...

21 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. Lobjet pointé par ptrM reste de type D. Vision utilisateur public M

22 Collection dobjets de types différents { figure* T[4]; // tableau de pointeurs // sur figure T[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 = figure un type dynamique = carré ou rectangle...

23 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 *Ptr est figure. Par conséquent, linstruction Ptr->tracer( ) active la méthode tracer de la classe figure. => Action vide

24 Liaison dynamique des fonctions Fonctions 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, linstruction Ptr->tracer( ); active la méthode associée au type dynamique de *ptr. => Tracé du rectangle virtual

25 Les fonctions virtuelles Lors de la redéfinition dune 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. Lexécution des fonctions virtuelles sappuie sur une indirection (table de pointeurs de fonctions virtuelles).

26 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 nest pas spécifié. Les fonctions virtuelles

27 Classe abstraite Une classe abstraite est une classe qui ne peut pas être instanciée exemple : Linstantiation de la classe figure na 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 virtuelle pure et qui ne limplémente pas est une classe abstraite. virtua l =0 //fonction virtuelle pure

28 Classe abstraite SYNTAXE : on indique quune 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 virtuelle pure et qui ne limplémente pas est une classe abstraite. virtua l =0 //fonction virtuelle pure

29 UTILISATION DUNE CLASSE ABSTRAITE class figure { public : virtual void tracer (void) =0; //fonction virtuelle pure }; figure F; figure* Ptr; Ptr = new figure; Vision utilisateur //illégal // légal Linstantiation de la classe figure na pas de sens. On en peut déclarer que des pointeurs sur figure. D une façon générale : Linstantiation d une classe abstraite na pas de sens. Elle est refusée à la compilation On en peut déclarer que des pointeurs sur une classe abstraite.


Télécharger ppt "Leçon 3 : Héritage IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier."

Présentations similaires


Annonces Google