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

C++ L’HERITAGE Fayçal BRAÏKI etudiantspsp@free.fr DUT INFORMATIQUE.

Présentations similaires


Présentation au sujet: "C++ L’HERITAGE Fayçal BRAÏKI etudiantspsp@free.fr DUT INFORMATIQUE."— Transcription de la présentation:

1 C++ L’HERITAGE Fayçal BRAÏKI DUT INFORMATIQUE

2 Sommaire Rappels : Méthodologie Orientée Objet Concept de l’héritage
C++ et la technique de l’héritage Syntaxe Comportement des constructeurs et destructeurs Comportement des constructeurs avec arguments Opérateur de résolution de portée Principe de substitution Polymorphisme et virtualité Polymorphisme fonctions virtuelles Classes abstraites

3 Rappels : Méthodologie Orientée Objet
les éléments de base sont des objets un objet est un élément d’une classe les classes peuvent être reliées entre elles par des relations de type héritage ou composition la communication est assurée par des messages. La réception d’un message par un objet donne lieu à un événement. La gestion de ces événements constitue la programmation événementielle Un parc de loisirs avec zone de restauration

4 doit permettre une meilleure réutilisabilité du code
doit faciliter l’extensibilité du code Le concept d’héritage permet de répondre à certaines de ces problématiques

5 Concept de l’héritage Le concept d’héritage permet de définir une nouvelle classe (classe fille ou dérivée) à partir d’une classe existante (classe mère ou de base) La classe fille héritera des données et méthodes de la classe mère

6 « la classe dérivée, c’est la classe de base + certaines données et/ou fonctions ».
la redéfinition de fonctions héritées est possible Une classe peut dériver d’une (héritage simple) ou de plusieurs classes (héritage multiple)

7 N.B : une donnée privée dans la classe de base est inaccessible dans la classe dérivée (cf. mot clé « protected » plus loin) l’héritage doit permettre de s’affranchir autant que possible du code source initial (classe de base) pour la redéfinition des fonctions membres. Il suffit de disposer de fichiers d’en tête (.h) contenant les déclarations de classes

8 Illustration : Héritage Simple en modélisation UML
Animal Chien Chat

9 C++ et la technique de l’héritage
Syntaxe : class Base { public : … } ; class Derivee :public Base { public : … } ;

10 Le symbole « : » signifie l’héritage
On peut le traduire par « hérite de » ou « est un type de » ou « est une extension de »(terminologie Java mot clé « extends ») Pas de déclaration des données et méthodes héritées dans les classes filles (sauf pour la redéfinition) car elles sont implicitement « importées » mot clé « protected » : une donnée « protected » dans la classe de base est considérée comme « public » du point de vue de la classe dérivée

11 Exercice 1 : traduire le modèle UML précédent en C++ (sans entrer dans le détail des classes)
Exercice 2 : ajouter des données et méthodes dans ces classes et les manipuler par le biais de l’héritage

12 Comportement des constructeurs et destructeurs
Lors de l’héritage , le compilateur inclura un appel automatique au constructeur par défaut de la classe de base sauf si on fait appel explicitement à un autre constructeur C++ garantit un nettoyage correct des objets créés lors de l’héritage par un appel automatique au destructeur (sans appel explicite car il est unique)

13 Exercice : class Base { public : Base(){cout<< « Constructeur de base appele \n » ;} void F(){cout<< « Base ::F() appele \n » ;} ~Base () {cout<< « Destructeur de Base appele \n » ;} } ; class Derivee :public Base { public : Derivee(){cout<< « Constructeur de Derivee appele \n » ;} void F(){cout<< « Derivee ::F() appele \n » ;}//redéfinition de la //procédure F ~Derivee () {cout<< « Destructeur de Derivee appele \n » ;} } ;

14 int main(){ Derivee d; d.F() ;//on peut aussi appeler F de base : d .Base ::F() ; return 0; } Que voit on à l‘écran lors de l’exécution ?

15 Réponse : Constructeur de Base appele Constructeur de Derivee appele Derivee::F() appele Destructeur de Derivee appele Destructeur de Base appele

16 Comportement des constructeurs avec arguments
Appel explicite aux constructeurs de la classe de base en utilisant leurs listes d’initialisation exemple : class Employe { string nom; public : Employe (string _nom){nom=_nom);} };

17 Un salarié mensuel (salaire fixe) est un sous type d’employé class SalMens:public Employe //on hérite de la classe Employe { double salaire; public: SalMens (string _nom, double_salaire=1500):Employe(_nom) //on réutilise ici le constructeur de la classe Employe {salaire=_salaire;} };

18 Opérateur de résolution de portée
Jusqu’ici nous avons défini les constructeurs et les méthodes « à l’intérieur » des classes (elles sont donc considérées « inline ») Ils peuvent être définis hors de la classe grâce à l’opérateur de résolution de portée « :: »

19 Exemple : class Base { public : Base(){cout<< « Constructeur de base appele \n » ;} void F(); ~Base () {cout<< « Destructeur de Base appele \n » ;} } ; void Base::F(){cout<< « Base::F() appele \n » ;} //on définit la procédure F hors de la déclaration de la classe //on précise l’appartenance de la procédure par :: int main() { Base b; b.F(); return 0; }

20 Principe de substitution
Puisque l’héritage décrit une relation « is a », un objet d’une classe dérivée doit pouvoir remplacer un objet de la classe de base de façon totalement transparente A la base du bon fonctionnement du polymorphisme Pour approfondir, cf. les travaux de Liskov

21 Polymorphisme et virtualité
Envoi d’un même message vers des objets différents, chacun des objets réagissant à sa façon exemple : message « agrandir » par doubleclic sur un objet cercle doit donner un cercle plus grand et non un carré plus grand Le choix du traitement est fait au moment de l’exécution et non pas au moment de la compilation (early binding vs late binding) Les fonctions virtuelles servent à implémenter le polymorphisme On utilise le mot clé « virtual »

22 Classe Abstraite : classe qui contient les données et fonctions communes à une famille de classes dérivées Interface commune permettant l’extensibilité du code (équivalent des interfaces Java) Elle n’est présente que pour des raisons de modélisation N.B : il n’y aura jamais aucune occurrence pour ce type de classe (on ne peut pas instancier d’objet) Elle contient forcément au moins une fonction virtuelle

23 Exemple de classe abstraite : class Animal {string nom ; public : Animal (string _nom){nom=_nom;} virtual void Cri()=0;//fonction virtuelle pure à //implémenter par les classes filles // =0 pour obliger les classe filles a définir la méthode virtuelle };


Télécharger ppt "C++ L’HERITAGE Fayçal BRAÏKI etudiantspsp@free.fr DUT INFORMATIQUE."

Présentations similaires


Annonces Google