30
INF1101 Algorithmes et st ructures de données 1 Cours 3 Cours 3 Héritage Héritage

INF1101 Algorithmes et structures de données1 Cours 3 Héritage

Embed Size (px)

Citation preview

Page 1: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données

1

Cours 3Cours 3

HéritageHéritage

Page 2: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 2

L’héritageL’héritage• Concept Concept • Principe d’héritage Principe d’héritage • Private, protected, publicPrivate, protected, public• Surcharge de fonctionsSurcharge de fonctions• ConstructeursConstructeurs• Ordre des appels de constructeurs, Ordre des appels de constructeurs,

destructeurs et agrégat destructeurs et agrégat • Méthodes non héritéesMéthodes non héritées• Dérivations publiques, protégées et privéesDérivations publiques, protégées et privées

Page 3: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 3

Concept d’héritageConcept d’héritage

ObjetGeoObjetGeo

SphereSphere CubeCube CylindreCylindre

• ObjetGeo: Super-classe ou classe de base. ObjetGeo: Super-classe ou classe de base. Classe très générale.Classe très générale.

• Sphere, Cube, Cylindre: sous-classe ou Sphere, Cube, Cylindre: sous-classe ou classe dérivée. Classes plus spécifiquesclasse dérivée. Classes plus spécifiques..

Page 4: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 4

Principe d’héritagePrincipe d’héritage

• Afin de bien représenter une situation, il faut pouvoir Afin de bien représenter une situation, il faut pouvoir montrer les nuances entre des objets, et effectuer montrer les nuances entre des objets, et effectuer certaines généralisations.certaines généralisations.

• Les classes dérivées sont un mécanisme simple pour Les classes dérivées sont un mécanisme simple pour définir une nouvelle classe en ajoutant des facilités à définir une nouvelle classe en ajoutant des facilités à une classe existante sans reprogrammer ou recompiler une classe existante sans reprogrammer ou recompiler la classe de base.la classe de base.

• En utilisant les classes dérivées d’une classe existante, En utilisant les classes dérivées d’une classe existante, on définit une interface commune aux classes dérivées on définit une interface commune aux classes dérivées de telle manière que les objets de ces 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 sont manipulés de façon identique par certaines parties du programme.du programme. RéutilisationRéutilisation

Page 5: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 5

Principe d’héritage Principe d’héritage (suite)(suite)

• On peut ainsi utiliser l’héritage pour les besoins de On peut ainsi utiliser l’héritage pour les besoins de généralisation, de réutilisation.généralisation, de réutilisation.

• La classe dérivée hérite des attributs et des fonctions de la La classe dérivée hérite des attributs et des fonctions de la classe de base. classe de base.

• La classe dérivée est plus spécifique que la classe en La classe dérivée est plus spécifique que la classe en ajoutant des attributs et des fonctions membres.ajoutant des attributs et des fonctions membres.

Page 6: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 6

Principe d’héritage Principe d’héritage (suite)(suite)

L’héritage est une relation « est un »L’héritage est une relation « est un »• Un commerce « est un » immeubleUn commerce « est un » immeuble• Une habitation « est un » immeubleUne habitation « est un » immeuble

Mais il est faux de dire :Mais il est faux de dire :• Un immeuble est un commerce Un immeuble est un commerce • Un immeuble est une habitationUn immeuble est une habitation

Page 7: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 7

Principe de Principe de compositioncomposition

La composition ou agrégation est uneLa composition ou agrégation est unerelation « possède un » relation « possède un »

• Un immeuble possède une adresse,Un immeuble possède une adresse,• Un immeuble possède un point3DUn immeuble possède un point3D

Il serait faux de concevoir le logiciel enIl serait faux de concevoir le logiciel enénonçant que :énonçant que :

• Un immeuble est une adresseUn immeuble est une adresse (Immeuble est dérivé d’Adresse) (Immeuble est dérivé d’Adresse)

Page 8: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 8

Autres relations Autres relations • La relation « utilise un » correspond à La relation « utilise un » correspond à

l’appel d’une fonction membre d’une l’appel d’une fonction membre d’une classe dont un paramètre est un objet classe dont un paramètre est un objet d’une autre classe.d’une autre classe.

• La relation « connaît un » correspond La relation « connaît un » correspond à une composition par adresse ou une à une composition par adresse ou une association.association.

Page 9: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 9

Principe d’héritage Principe d’héritage (suite)(suite)• En C++, il existe l’héritage simple, et En C++, il existe l’héritage simple, et

l’héritage multiple. Dans ce cours, nous ne l’héritage multiple. Dans ce cours, nous ne nous intéresserons qu’à l’héritage simple.nous intéresserons qu’à l’héritage simple.

• Dans la définition de la classe dérivée, afin Dans la définition de la classe dérivée, afin d’utiliser l’héritage, on ajoute le symbole : d’utiliser l’héritage, on ajoute le symbole : après le nom de la classe en précisant par après le nom de la classe en précisant par la suite quelle est la classe de base.la suite quelle est la classe de base.

Ex: Ex: class Sphere : public ObjetGeoclass Sphere : public ObjetGeo {...}{...}

Page 10: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 10

Les types d’attributsLes types d’attributs

Les attributs Les attributs privateprivate• Lors de l’héritage public, les attributs privés Lors de l’héritage public, les attributs privés

de la classe de base restent privés pour les de la classe de base restent privés pour les classes dérivées.classes dérivées.

• Il faut donc utiliser les Il faut donc utiliser les méthodes méthodes publiquespubliques de la classe de base afin de la classe de base afin d’accéder à ces attributs.d’accéder à ces attributs.

Page 11: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 11

Les types d’attributs (suite)Les types d’attributs (suite)

Les attributs ou méthodes Les attributs ou méthodes publicspublicsLors de l’héritage, Lors de l’héritage, • Les attributs ou méthodes publics de Les attributs ou méthodes publics de

la classe de base seront accessibles la classe de base seront accessibles par les classes dérivées,par les classes dérivées,

• et le resteront pour les clients de la et le resteront pour les clients de la classe dérivée.classe dérivée.

Page 12: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 12

Les types d’attributs (suite)Les types d’attributs (suite)

Les attributs ou méthodes Les attributs ou méthodes protectedprotected

Lors de l’héritage: Lors de l’héritage: • Les attributs protégés de la classe de base Les attributs protégés de la classe de base

seront accessibles par les classes dérivées,seront accessibles par les classes dérivées,• mais ne seront pas accessibles par les mais ne seront pas accessibles par les

clients de la classe dérivée. clients de la classe dérivée. • Ce type d’attribut est le plus utilisé lors de Ce type d’attribut est le plus utilisé lors de

l’utilisation de l’héritage.l’utilisation de l’héritage.

Page 13: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 13

Accès aux membresAccès aux membres

class ObjetGeo{public:

ObjetGeo();ObjetGeo(couleur& maCouleur);

ObjetGeo(const ObjetGeo &copie);virtual ~ObjetGeo();

protected:couleur maCouleur;

};

Page 14: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 14

Redéfinition des fonctions Redéfinition des fonctions de de basebase

• Les fonctions de la classe de base Les fonctions de la classe de base peuvent être redéfinies dans la classe peuvent être redéfinies dans la classe dérivée.dérivée.

• Les fonctions redéfinies de la classe Les fonctions redéfinies de la classe de base demeurent accessibles via de base demeurent accessibles via l'opérateur de résolution de portée l'opérateur de résolution de portée ("::").("::").

Page 15: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 15

Exemple de redéfinition de Exemple de redéfinition de fonctions de basefonctions de base

ObjetGeo

. . .

Afficher()

Cube

. . .

Afficher()

Soit la classe ObjetGeo avec sa classe dérivée Cube,Soit la classe ObjetGeo avec sa classe dérivée Cube,toutes les deux possédant une fonction Afficher();toutes les deux possédant une fonction Afficher();

Page 16: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 16

Redéfinition de Redéfinition de fonctionsfonctions

void Cube::Afficher()void Cube::Afficher()

{ {

ObjetGeo::Afficher();ObjetGeo::Afficher();

cout<< maHauteur <<maLongueur <<maLargeur;cout<< maHauteur <<maLongueur <<maLargeur;

}}

void ObjetGeo::Afficher()void ObjetGeo::Afficher()

{ {

cout<<"Couleur"; maCouleur.ecrire(cout);cout<<"Couleur"; maCouleur.ecrire(cout);

cout<<endl; cout<<endl;

}}

Appel de la fonctionAppel de la fonctionAfficher() de ObjetGeoAfficher() de ObjetGeo

Page 17: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 17

Redéfinition de Redéfinition de fonctionsfonctions(suite)(suite)

ObjetGeo MonObjet(couleur(100,0,0));ObjetGeo MonObjet(couleur(100,0,0));

// fonction Afficher de ObjetGeo// fonction Afficher de ObjetGeoMonObjet.Afficher(); MonObjet.Afficher(); Cube MonCube (Cube MonCube (couleur(100,0,0),couleur(100,0,0),5,5,5);5,5,5);

// fonction Afficher de Cube// fonction Afficher de CubeMonCube.Afficher();MonCube.Afficher();

// fonction Afficher de ObjetGeo// fonction Afficher de ObjetGeoMonCube.ObjetGeo::Afficher();MonCube.ObjetGeo::Afficher();

Page 18: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 18

Constructeur et Constructeur et destructeurdestructeur

Lors de la création d’un objet d’une classeLors de la création d’un objet d’une classedérivée, les constructeurs sont appelés dansdérivée, les constructeurs sont appelés dansl’ordre suivant:l’ordre suivant:

• Les constructeurs des objets attributs Les constructeurs des objets attributs de la classe de base,de la classe de base,

• Le constructeur de la classe de base,Le constructeur de la classe de base,• Les constructeurs des objets attributs Les constructeurs des objets attributs

de la classe dérivée;de la classe dérivée;• Le constructeur de la classe dérivée.Le constructeur de la classe dérivée.

Les destructeurs sont appelés en ordre Les destructeurs sont appelés en ordre inverse des constructeurs.inverse des constructeurs.

Page 19: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 19

La classe de base : La classe de base : ObjetGeoObjetGeoclass ObjetGeo{

public:ObjetGeo();ObjetGeo(couleur& laCouleur);

ObjetGeo(const ObjetGeo &copie);virtual ~ObjetGeo();

protected:couleur maCouleur;

};

Page 20: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 20

Constructeur de Constructeur de ObjetGeoObjetGeoObjetGeo::ObjetGeo(couleur& laCouleur)ObjetGeo::ObjetGeo(couleur& laCouleur)

: maCouleur(laCouleur): maCouleur(laCouleur)

{{

}}

Page 21: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 21

Classe dérivée: CubeClasse dérivée: Cube

class Cube : public ObjetGeoclass Cube : public ObjetGeo{{public:public:

Cube();Cube();Cube(couleur& col, Cube(couleur& col, float uneLargeur,float uneLargeur, float uneLongueur, float uneHauteur); float uneLongueur, float uneHauteur);Cube(const Cube &copie);Cube(const Cube &copie);~Cube();~Cube();. . .. . .

private:private:float maLargeur;float maLargeur;float maLongueur;float maLongueur;float maHauteur;float maHauteur;

};};

Page 22: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 22

Constructeur de CubeConstructeur de Cube

Cube::Cube(couleur& col, float uneLargeur,Cube::Cube(couleur& col, float uneLargeur, float uneLongueur, float uneHauteur) float uneLongueur, float uneHauteur)

:ObjetGeo(col):ObjetGeo(col){{ maLargeur = uneLargeur;maLargeur = uneLargeur; maLongueur = uneLongueur;maLongueur = uneLongueur; maHauteur = uneHauteur;maHauteur = uneHauteur;}}

Page 23: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 23

Ordre des appels de Ordre des appels de constructeurs et agrégatconstructeurs et agrégat

• Lorsqu’un objet d’une classe Lorsqu’un objet d’une classe dérivée est construit, une dérivée est construit, une instance de la classe de base est instance de la classe de base est automatiquement créée.automatiquement créée.

Page 24: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 24

Méthodes non héritéesMéthodes non héritées

Les classes dérivées n’héritent pas :Les classes dérivées n’héritent pas :• Des constructeursDes constructeurs

(défaut, paramètres, copie); (défaut, paramètres, copie); • Du destructeur;Du destructeur;• De l’opérateur d’affectation;De l’opérateur d’affectation;• Des relations d’amitié.Des relations d’amitié.

Page 25: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 25

Opérateur d’assignation Opérateur d’assignation non hériténon hérité• Si on a un opérateur= dans la classe Si on a un opérateur= dans la classe

de base;de base;• Si aucun opérateur= dans la classe Si aucun opérateur= dans la classe

dérivée;dérivée;• Alors, le compilateur va appeler Alors, le compilateur va appeler

l’opérateur= de la classe de base et l’opérateur= de la classe de base et recopie attribut par attribut les recopie attribut par attribut les attributs de la classe dérivée.attributs de la classe dérivée.

Page 26: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 26

Type d’héritageType d’héritage• Il existe trois différents types d’héritage, soient Il existe trois différents types d’héritage, soient

: : publicpublic, , privateprivate et et protectedprotected..

• Le type d’héritage est spécifié après le symbole Le type d’héritage est spécifié après le symbole : : class Cylindre : private ObjetGeoclass Cylindre : private ObjetGeo

• Par défaut, le type d’héritage est privé.Par défaut, le type d’héritage est privé.• Dans ce cours, nous nous contenterons Dans ce cours, nous nous contenterons

d’utiliser l’héritage public.d’utiliser l’héritage public.

Page 27: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 27

Type d’héritage (suite)Type d’héritage (suite)

Le type d’héritage permet de savoir :Le type d’héritage permet de savoir :

• Quelles entités sont au courant Quelles entités sont au courant qu’une certaine classe est en fait une qu’une certaine classe est en fait une classe dérivée d’une classe de base.classe dérivée d’une classe de base.

• Comment les attributs de la classe de Comment les attributs de la classe de base seront accessibles.base seront accessibles.

Page 28: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 28

HHéritage publicéritage public

Classe de base Classe dérivée

private private

protected protected

public public

class ClasseDerivee : public ClasseBase

Les attributs Les attributs privateprivate, , protectedprotected et et publicpublic de la de la classe de base restent les mêmes pour la classe classe de base restent les mêmes pour la classe dérivée.dérivée.

Page 29: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 29

HHéritage protectedéritage protectedclass ClasseDerivee : protected ClasseBase

Classe de base Classe dérivée

private private

protected protected

public protected

Les attributs Les attributs publicpublic de la classe de base deviennent de la classe de base deviennent protégés pour la classe dérivée.protégés pour la classe dérivée.

Page 30: INF1101 Algorithmes et structures de données1 Cours 3 Héritage

INF1101 Algorithmes et structures de données 30

HHéritage privééritage privé

Classe de base Classe dérivée

private private

protected private

public private

class ClasseDerivee : private ClasseBase

Tous les attributs de la classe de base deviennent Tous les attributs de la classe de base deviennent privateprivate pour la classe dérivée. pour la classe dérivée.