Title: Cours 3
1Cours 3
Héritage
2Lhéritage
- Concept
- Principe dhé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
3Concept dhé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.
4Principe dhé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 dune 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
5Principe dhéritage (suite)
- On peut ainsi utiliser lhé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.
6Principe dhéritage (suite)
- Lhé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
7Principe 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é dAdresse)
8Autres relations
- La relation utilise un correspond à lappel
dune fonction membre dune classe dont un
paramètre est un objet dune autre classe. - La relation connaît un correspond à une
composition par adresse ou une association.
9Principe dhéritage (suite)
- En C, il existe lhéritage simple, et
lhéritage multiple. Dans ce cours, nous ne nous
intéresserons quà lhéritage simple. - Dans la définition de la classe dérivée, afin
dutiliser lhé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
- ...
10Les types dattributs
- Les attributs private
- Lors de lhé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 daccéder à ces attributs.
11Les types dattributs (suite)
- Les attributs ou méthodes publics
- Lors de lhé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.
12Les types dattributs (suite)
- Les attributs ou méthodes protected
- Lors de lhé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 dattribut est le plus utilisé lors de
lutilisation de lhéritage.
13Accès aux membres
- class ObjetGeo
-
- public
- ObjetGeo()
- ObjetGeo(couleur maCouleur)
- ObjetGeo(const ObjetGeo copie)
- virtual ObjetGeo()
-
- protected
- couleur maCouleur
14Redé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 ("").
15Exemple 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()
16Redéfinition de fonctions
void ObjetGeoAfficher() coutltlt"Couleur"
maCouleur.ecrire(cout) coutltltendl
void CubeAfficher() ObjetGeoAfficher(
) coutltlt maHauteur ltltmaLongueur
ltltmaLargeur
Appel de la fonction Afficher() de ObjetGeo
17Redé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()
-
- // fonction Afficher de ObjetGeo
- MonCube.ObjetGeoAfficher()
18Constructeur et destructeur
- Lors de la création dun objet dune classe
- dérivée, les constructeurs sont appelés dans
- lordre 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.
19La classe de base ObjetGeo
- class ObjetGeo
-
- public
- ObjetGeo()
- ObjetGeo(couleur laCouleur)
- ObjetGeo(const ObjetGeo copie)
- virtual ObjetGeo()
-
- protected
- couleur maCouleur
20Constructeur de ObjetGeo
- ObjetGeoObjetGeo(couleur laCouleur)
- maCouleur(laCouleur)
-
-
21Classe 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
22Constructeur de Cube
- CubeCube(couleur col, float uneLargeur,
float uneLongueur, float uneHauteur) - ObjetGeo(col)
-
- maLargeur uneLargeur
- maLongueur uneLongueur
- maHauteur uneHauteur
-
23Ordre des appels de constructeurs et agrégat
- Lorsquun objet dune classe dérivée est
construit, une instance de la classe de base est
automatiquement créée.
24Méthodes non héritées
- Les classes dérivées nhéritent pas
- Des constructeurs(défaut, paramètres, copie)
- Du destructeur
- De lopérateur daffectation
- Des relations damitié.
25Opérateur dassignation 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 lopérateur de
la classe de base et recopie attribut par
attribut les attributs de la classe dérivée.
26Type dhéritage
- Il existe trois différents types dhéritage,
soient public, private et protected. - Le type dhéritage est spécifié après le symbole
- class Cylindre private ObjetGeo
- Par défaut, le type dhéritage est privé.
- Dans ce cours, nous nous contenterons dutiliser
lhéritage public.
27Type dhéritage (suite)
- Le type dhéritage permet de savoir
- Quelles entités sont au courant quune certaine
classe est en fait une classe dérivée dune
classe de base. - Comment les attributs de la classe de base seront
accessibles.
28Héritage public
class ClasseDerivee public ClasseBase
Les attributs private, protected et public de la
classe de base restent les mêmes pour la classe
dérivée.
29Héritage protected
class ClasseDerivee protected ClasseBase
Les attributs public de la classe de base
deviennent protégés pour la classe dérivée.
30Héritage privé
class ClasseDerivee private ClasseBase
Tous les attributs de la classe de base
deviennent private pour la classe dérivée.