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

Slides:



Advertisements
Présentations similaires
Programmation Orienté Objet en C++
Advertisements

Spécialisation/généralisation Héritage Polymorphisme.
Systèmes en temps réel Modélisation du comportement en temps réel avec UML.
Systèmes en temps réel Héritage avec les capsules.
Langages objet Définitions Traduction des méthodes en C++
POO.
Programmation Orientée Objet (POO)
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Chapitre III Héritage (début)
FSAB1402: Informatique 2 Techniques de Programmation Orientée Objet
Programmation orientée objet
Principes de la technologie orientée objets
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
C++ : classes Introduction aux Langages Orientés Objets
Classes abstraites et Interfaces
Rappels sur la Programmation java
Structures de données IFT-2000
Structures de données IFT-10541
Programmation Orienté Objet applications au langage Java
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Types de données abstrait et mécanismes d'encapsulation
Langages orientés objets
Chapitre III Héritage. POO-L3 H. Fauconnier2 Chapitre III: Héritage A) Extensions généralités Affectation et transtypage B) Méthodes Surcharge et signature.
Cours 4 Héritage (suite).
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
INF1101 Algorithmes et structures de données
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Classes et objets Types de données abstraits, programmation orientée objet, classes, objets,
Structures de données IFT-2000 Abder Alikacem Concepts orientés objet Édition Septembre 2009 Département dinformatique et de génie logiciel Département.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
Héritage et composition
(Vient du grec et signifie « Peut prendre plusieurs formes »)
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La Modélisation Orientée Objet Concevoir un programme : modélisation du problème à résoudre Notion de programme : machine de Turing Pouvoir d’expression.
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Introduction à la programmation objet en C++
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
PHP 7° PARTIE : PROGRAMMATION OBJET
PHP objet Jérôme CUTRONA 10:13:27 Programmation Web
Cours du 5 novembre.
Les classes Introduction aux Langages Orientés Objets
La programmation par objets Principes et concepts Etude de Smalltalk.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Interfaces Graphiques
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Campus-Booster ID : Copyright © SUPINFO. All rights reserved La programmation objet, un fondement de la programmation évènementielle.
Introduction à la Programmation Orientée Objet
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
Chapitre 7: Héritage Présentation pour Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus Java Software.
Modèle objet : les classes
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Transcription de la présentation:

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

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

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

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

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

« 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)

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

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

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

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

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

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)

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

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 ?

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

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

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

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 « :: »

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

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

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 »

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

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