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

INF1101 Algorithmes et structures de données

Présentations similaires


Présentation au sujet: "INF1101 Algorithmes et structures de données"— Transcription de la présentation:

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


Télécharger ppt "INF1101 Algorithmes et structures de données"

Présentations similaires


Annonces Google