Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parLucille Godefroy Modifié depuis plus de 10 années
1
INF1101 Algorithmes et structures de données
Cours 3 Héritage INF1101 Algorithmes et structures de données
2
INF1101 Algorithmes et structures de données
L’héritage Concept Principe d’héritage Private, protected, public Surcharge de fonctions Constructeurs Ordre des appels de constructeurs, destructeurs et agrégat Méthodes non héritées Dérivations publiques, protégées et privées INF1101 Algorithmes et structures de données
3
INF1101 Algorithmes et structures de données
Concept d’héritage ObjetGeo Sphere Cube Cylindre ObjetGeo: Super-classe ou classe de base. Classe très générale. Sphere, Cube, Cylindre: sous-classe ou classe dérivée. Classes plus spécifiques. INF1101 Algorithmes et structures de données
4
INF1101 Algorithmes et structures de données
Principe d’héritage Afin de bien représenter une situation, il faut pouvoir montrer les nuances entre des objets, et effectuer certaines généralisations. Les classes dérivées sont un mécanisme simple pour définir une nouvelle classe en ajoutant des facilités à une classe existante sans reprogrammer ou recompiler la classe de base. En utilisant les classes dérivées d’une classe existante, on définit une interface commune aux classes dérivées de telle manière que les objets de ces classes dérivées sont manipulés de façon identique par certaines parties du programme. Réutilisation INF1101 Algorithmes et structures de données
5
Principe d’héritage (suite)
On peut ainsi utiliser l’héritage pour les besoins de généralisation, de réutilisation. La classe dérivée hérite des attributs et des fonctions de la classe de base. La classe dérivée est plus spécifique que la classe en ajoutant des attributs et des fonctions membres. INF1101 Algorithmes et structures de données
6
Principe d’héritage (suite)
L’héritage est une relation « est un » Un commerce « est un » immeuble Une habitation « est un » immeuble Mais il est faux de dire : Un immeuble est un commerce Un immeuble est une habitation INF1101 Algorithmes et structures de données
7
Principe de composition
La composition ou agrégation est une relation « possède un » Un immeuble possède une adresse, Un immeuble possède un point3D Il serait faux de concevoir le logiciel en énonçant que : Un immeuble est une adresse (Immeuble est dérivé d’Adresse) INF1101 Algorithmes et structures de données
8
INF1101 Algorithmes et structures de données
Autres relations La relation « utilise un » correspond à l’appel d’une fonction membre d’une classe dont un paramètre est un objet d’une autre classe. La relation « connaît un » correspond à une composition par adresse ou une association. INF1101 Algorithmes et structures de données
9
Principe d’héritage (suite)
En C++, il existe l’héritage simple, et l’héritage multiple. Dans ce cours, nous ne nous intéresserons qu’à l’héritage simple. Dans la définition de la classe dérivée, afin d’utiliser l’héritage, on ajoute le symbole : après le nom de la classe en précisant par la suite quelle est la classe de base. Ex: class Sphere : public ObjetGeo {...} INF1101 Algorithmes et structures de données
10
INF1101 Algorithmes et structures de données
Les types d’attributs Les attributs private Lors de l’héritage public, les attributs privés de la classe de base restent privés pour les classes dérivées. Il faut donc utiliser les méthodes publiques de la classe de base afin d’accéder à ces attributs. INF1101 Algorithmes et structures de données
11
Les types d’attributs (suite)
Les attributs ou méthodes publics Lors de l’héritage, Les attributs ou méthodes publics de la classe de base seront accessibles par les classes dérivées, et le resteront pour les clients de la classe dérivée. INF1101 Algorithmes et structures de données
12
Les types d’attributs (suite)
Les attributs ou méthodes protected Lors de l’héritage: Les attributs protégés de la classe de base seront accessibles par les classes dérivées, mais ne seront pas accessibles par les clients de la classe dérivée. Ce type d’attribut est le plus utilisé lors de l’utilisation de l’héritage. INF1101 Algorithmes et structures de données
13
INF1101 Algorithmes et structures de données
Accès aux membres class ObjetGeo { public: ObjetGeo(); ObjetGeo(couleur& maCouleur); ObjetGeo(const ObjetGeo &copie); virtual ~ObjetGeo(); protected: couleur maCouleur; }; INF1101 Algorithmes et structures de données
14
Redéfinition des fonctions de base
Les fonctions de la classe de base peuvent être redéfinies dans la classe dérivée. Les fonctions redéfinies de la classe de base demeurent accessibles via l'opérateur de résolution de portée ("::"). INF1101 Algorithmes et structures de données
15
Exemple de redéfinition de fonctions de base
Soit la classe ObjetGeo avec sa classe dérivée Cube, toutes les deux possédant une fonction Afficher(); ObjetGeo . . . Cube Afficher() . . . Afficher() INF1101 Algorithmes et structures de données
16
Redéfinition de fonctions
void ObjetGeo::Afficher() { cout<<"Couleur"; maCouleur.ecrire(cout); cout<<endl; } void Cube::Afficher() { ObjetGeo::Afficher(); cout<< maHauteur <<maLongueur <<maLargeur; } Appel de la fonction Afficher() de ObjetGeo INF1101 Algorithmes et structures de données
17
Redéfinition de fonctions (suite)
ObjetGeo MonObjet(couleur(100,0,0)); // fonction Afficher de ObjetGeo MonObjet.Afficher(); Cube MonCube (couleur(100,0,0),5,5,5); // fonction Afficher de Cube MonCube.Afficher(); MonCube.ObjetGeo::Afficher(); INF1101 Algorithmes et structures de données
18
Constructeur et destructeur
Lors de la création d’un objet d’une classe dérivée, les constructeurs sont appelés dans l’ordre suivant: Les constructeurs des objets attributs de la classe de base, Le constructeur de la classe de base, Les constructeurs des objets attributs de la classe dérivée; Le constructeur de la classe dérivée. Les destructeurs sont appelés en ordre inverse des constructeurs. INF1101 Algorithmes et structures de données
19
La classe de base : ObjetGeo
class ObjetGeo { public: ObjetGeo(); ObjetGeo(couleur& laCouleur); ObjetGeo(const ObjetGeo &copie); virtual ~ObjetGeo(); protected: couleur maCouleur; }; INF1101 Algorithmes et structures de données
20
Constructeur de ObjetGeo
ObjetGeo::ObjetGeo(couleur& laCouleur) : maCouleur(laCouleur) { } INF1101 Algorithmes et structures de données
21
INF1101 Algorithmes et structures de données
Classe dérivée: Cube class Cube : public ObjetGeo { public: Cube(); Cube(couleur& col, float uneLargeur, float uneLongueur, float uneHauteur); Cube(const Cube &copie); ~Cube(); . . . private: float maLargeur; float maLongueur; float maHauteur; }; INF1101 Algorithmes et structures de données
22
INF1101 Algorithmes et structures de données
Constructeur de Cube Cube::Cube(couleur& col, float uneLargeur, float uneLongueur, float uneHauteur) :ObjetGeo(col) { maLargeur = uneLargeur; maLongueur = uneLongueur; maHauteur = uneHauteur; } INF1101 Algorithmes et structures de données
23
Ordre des appels de constructeurs et agrégat
Lorsqu’un objet d’une classe dérivée est construit, une instance de la classe de base est automatiquement créée. INF1101 Algorithmes et structures de données
24
INF1101 Algorithmes et structures de données
Méthodes non héritées Les classes dérivées n’héritent pas : Des constructeurs (défaut, paramètres, copie); Du destructeur; De l’opérateur d’affectation; Des relations d’amitié. INF1101 Algorithmes et structures de données
25
Opérateur d’assignation non hérité
Si on a un opérateur= dans la classe de base; Si aucun opérateur= dans la classe dérivée; Alors, le compilateur va appeler l’opérateur= de la classe de base et recopie attribut par attribut les attributs de la classe dérivée. INF1101 Algorithmes et structures de données
26
INF1101 Algorithmes et structures de données
Type d’héritage Il existe trois différents types d’héritage, soient : public, private et protected. Le type d’héritage est spécifié après le symbole : class Cylindre : private ObjetGeo Par défaut, le type d’héritage est privé. Dans ce cours, nous nous contenterons d’utiliser l’héritage public. INF1101 Algorithmes et structures de données
27
Type d’héritage (suite)
Le type d’héritage permet de savoir : Quelles entités sont au courant qu’une certaine classe est en fait une classe dérivée d’une classe de base. Comment les attributs de la classe de base seront accessibles. INF1101 Algorithmes et structures de données
28
INF1101 Algorithmes et structures de données
Héritage public class ClasseDerivee : public ClasseBase Classe de base Classe dérivée private protected public Les attributs private, protected et public de la classe de base restent les mêmes pour la classe dérivée. INF1101 Algorithmes et structures de données
29
INF1101 Algorithmes et structures de données
Héritage protected class ClasseDerivee : protected ClasseBase Classe de base Classe dérivée private protected public Les attributs public de la classe de base deviennent protégés pour la classe dérivée. INF1101 Algorithmes et structures de données
30
INF1101 Algorithmes et structures de données
Héritage privé class ClasseDerivee : private ClasseBase Classe de base Classe dérivée private protected public Tous les attributs de la classe de base deviennent private pour la classe dérivée. INF1101 Algorithmes et structures de données
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.