INF1101 Algorithmes et structures de données1 Cours 3 Héritage.
-
Upload
lucille-godefroy -
Category
Documents
-
view
114 -
download
1
Transcript of 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
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
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..
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
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.
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
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)
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.
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 {...}{...}
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.
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.
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.
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;
};
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 ("::").("::").
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();
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
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();
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.
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;
};
INF1101 Algorithmes et structures de données 20
Constructeur de Constructeur de ObjetGeoObjetGeoObjetGeo::ObjetGeo(couleur& laCouleur)ObjetGeo::ObjetGeo(couleur& laCouleur)
: maCouleur(laCouleur): maCouleur(laCouleur)
{{
}}
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;
};};
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;}}
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.
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é.
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.
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.
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.
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.
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.
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.