Professional Documents
Culture Documents
fr
Franck GECHTER
franck.gechter@utbm.fr
Automne 2005
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Plan du Cours
Les opérateurs
Les Amis
Les Classes Template La Conception Orientée Objet
La STL
L’Héritage Introduction au C++
Polymorphisme
Les Classes Abstraites
Les Classes
La STL
L’Héritage
Polymorphisme, Liaison Statique et Liaison
Dynamique
Les Classes Abstraites
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
La Conception Orientée
L’Héritage
Polymorphisme
Objet (C.O.O.)
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La Conception Orientée Objet
Les opérateurs
Les Amis
(C.O.O.)
Les Classes Template
La STL
L’Héritage
Polymorphisme
Les Classes Abstraites I Introduction :
I Qu’est ce qu’un programme?
I Reflexions sur la vie d’un logiciel
I Qu’est ce qu’un bon programme?
I Modularité et Réutilisabilité
I Principes de la Conception Orientée Objet
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Introduction
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Qu’est ce qu’un programme?
Les opérateurs
Les Amis Un programme peut se résumer par l’équation
Les Classes Template
La STL
suivante
L’Héritage
Polymorphisme
Les Classes Abstraites
Programme = Algorithmes + Structures de Données
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template La Conception par Objets :
La STL
L’Héritage Principes
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La conception par objets
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage I Il semble maintenant naturel d’organiser la
Polymorphisme
programmation autour des données
Les Classes Abstraites
manipulées: les objets.
I Les données étant plus stables que les
traitements la conception est simplifiée
I L’approche par données respecte un certain
nombre de critères de qualité (modularité,
réutilisabilité,...)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La conception par objets
Les opérateurs
Les Amis
Les Classes Template
La STL Voici une définition de la conception par objets
L’Héritage donnée par B. Meyer ainsi qu’un conseil fort utile:
Polymorphisme
Les Classes Abstraites
”La conception par objet est la méthode qui
conduit à des architectures logicielles fondées sur
les OBJETS que tout système ou sous-sytème
manipule”
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Introduction au C++
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Introduction au C++
Les opérateurs
Les Amis
Les Classes Template Le langage C++ est un langage très complexe et
La STL complet.
L’Héritage
Polymorphisme
Les Classes Abstraites Il n’est pas possible d’en faire un tour complet au
cours de cette UV:
→ se reporter aux ouvrages donnés dans la
bibliographie !!
→ pratiquer chez soi !!
*pval = 12;
i = refval; // ’i’ vaut 12, valeur de ’val’
}
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Références
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme I Contrairement aux pointeurs, les références
Les Classes Abstraites ne peuvent pas être vides
I Elles sont toujours initialisées lors de la
déclaration
I On préférera les utiliser lorsqu’on ne veut pas
de valeur inconsistante (NULL)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Références : Passage de
Les opérateurs
Les Amis
paramètres et valeur de retour
Les Classes Template
La STL
L’Héritage
I En C, le passage des paramètre et valeurs de
Polymorphisme retour se fait par valeur.
Les Classes Abstraites
I Pour simuler un passage par adresse on utilise
alors les pointeurs.
I En C++ on peut utiliser les Références pour
effectuer ce passage par adresse...
I .. et laisser le compilateur choisir les ”bonnes
instructions”
I Le choix du mode de transmission se fait lors
de la déclaration de la fonction
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Références : Passage de
Les opérateurs
Les Amis
paramètres et valeur de retour
Les Classes Template
La STL
L’Héritage
Polymorphisme I La transmission d’arguments par référence
Les Classes Abstraites
simplifie l’écriture de la fonction.
I Ceci induit des effets de bords que l’on peut
éviter avec le mot const.
I On peut utiliser ce mécanisme pour la valeur
de retour d’une fonction (intérêts lors de la
surcharge d’opérateurs)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Références : SWAP
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme
Les Classes Abstraites
Exemple : Ecrivez la fonction Swap de deux entiers
avec les pointeurs puis les références.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Références : SWAP
Les opérateurs
Les Amis
Les Classes Template
La STL void swapC(int *i, int *j) {
L’Héritage int tmp = *i;
Polymorphisme
Les Classes Abstraites
*i = *j;
*j=tmp;}
swapC(&m,&n);
swapCpp(m,n); }
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Allocation Dynamique de mémoire
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage I Allocation dynamique grace aux opérateurs
Polymorphisme
Les Classes Abstraites new et delete (ne plus utiliser malloc et
free !!!!!!!!!)
I Il n’est plus nécessaire d’utiliser sizeof
I Le principe d’utilisation est le même
I Pour les tableaux les opérateurs new et delete
sont remplacés par new[] et delete[]
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Allocation Dynamique : Exemple
Les opérateurs
Les Amis
Les Classes Template
La STL main()
L’Héritage
{
Polymorphisme
Les Classes Abstraites int *pi = new int;
int *tab = new int[10];
if ((pi != NULL) && (tab !=NULL) {
...
delete pi;
delete [] tab;
}
}
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
La Surcharge
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La Surcharge
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage I La surcharge est l’une des nouvelles
Polymorphisme fonctionnalités du C++ (réutilisabilité)
Les Classes Abstraites
I Elle permet d’attribuer le même nom à
plusieurs opérateurs ou fonctions.
I L’ambiguité est levée grâce au contexte
(nombre et/ou type des paramètres)
I Une définition séparée est nécessaire pour
chacun des profiles
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La Surcharge : Exemple
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme
Les Classes Abstraites ...
int max(int a, int b);
int max(int *tab, int taille);
int max(int a, int b, int c);
...
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL Les Entrées-Sorties
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Entrées-Sorties
Les opérateurs
Les Amis I Les entrées-sorties on été remaniées pour
Les Classes Template
La STL
profiter de la surcharge.
L’Héritage I Pour pouvoir les utiliser il faut inclure l’en-tête
Polymorphisme
<iostream>
Les Classes Abstraites
I il existe trois flots :
I cin : entrée standard (clavier par défaut)
I cout : sortie standard (écran par défaut)
I cerr : sortie message d’erreur (écran par
défaut)
I Les opérateurs et permettent de faire les
écritures et les lectures
I Ils sont surchargés pour permettre l’utilisation
de tous les types primitifs
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Entrées-Sorties Avantages
Les opérateurs
Les Amis
C++ par rapport au C
Les Classes Template
La STL
L’Héritage
Polymorphisme I La vitesse d’execution est plus rapide
Les Classes Abstraites
(traduction effectuée au moment de la
compilation).
I Il n’y a plus de problèmes de type.
I Les instructions générées sont plus réduites.
I Il est possible de surcharger les opérateurs
et pour manipuler d’autres types.
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL Les Classes
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Classes
Les opérateurs
Les Amis
Les Classes Template I Une classe permet de définir (interface et
La STL
implémentation) un objet en terme de
L’Héritage
Polymorphisme
structure de données et de fonctionnalités.
Les Classes Abstraites I On trouve à l’interieur d’une Classe C++ :
I Les attributs (variables définies dans la
classe)
I Les méthodes (services offerts par la classe)
I Pour déclarer une classe il faut utiliser le mot
clé class.
I Les attributs et méthodes sont ensuite définis
comme les champs dans une structure C
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Publique, Protégé ou Privé
Les opérateurs
Les Amis
Les Classes Template
I Les structures en C ne permettent que de
La STL réunir des variables, en C++ une classe y
L’Héritage ajoute des fonctions.
Polymorphisme
Les Classes Abstraites
I Une classe C++ peut comporter plusieurs
sections public, protected ou private qui
permettent de modifier le niveau de masquage
des informations.
I public : attributs et/ou méthodes
accessibles par n’importe quel client de la
classe.
I protected ou private : attributs et/ou
méthodes inaccessibles aux clients extérieurs
de la classe. (On verra la différence entre ces
deux notions un peu plus tard)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Publique, Protégé ou Privé et
Les opérateurs
Les Amis
Encapsulation
Les Classes Template
La STL
L’Héritage
Polymorphisme
I Par convention les attributs de la classes sont
Les Classes Abstraites protected ou private.
I On les déclare dans une section autre que
public.
I Conséquence : les attributs ne sont plus
directement accessibles → Il faut des
méthodes d’accès publiques. C’est ce qu’on
appelle l’encapsulation.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Utilisation
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage I Une classe définit un type qui peut être utilisé
Polymorphisme
Les Classes Abstraites comme tout autre type disponible
I L’accès aux champs (méthodes et attributs) se
fait de façon pointée (.) (objet ou référence
sur objet)
I La notation flèchée (->)est utilisée lorsque
l’on dispose d’un pointeur sur un objet.
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL Constructeur et Destructeur
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Constructeur et Destructeur
Les opérateurs
Les Amis
Les Classes Template
I Il est souvent nécessaire d’initialiser un objet
La STL au moment de la création.
L’Héritage
Polymorphisme
I Parfois il faut même effectuer de l’allocation
Les Classes Abstraites de mémoire.
I Il est donc nécessaire de disposer d’une (ou
plusieurs) méthode(s) spéciale(s) pour faire
cette initialisation : le Constructeur.
I De la même façon il faut pouvoir désallouer de
la mémoire utilisée par un objet lorsque l’on ne
l’utilise plus.
I On utilise alors une méthode particulière : le
Destructeur
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Constructeur
Les opérateurs
Les Amis
Les Classes Template
La STL I Les constructeurs n’ont aucun type de
L’Héritage
Polymorphisme
retour (même pas void !!!).
Les Classes Abstraites I Ils portent le même nom que la classe à
laquelle ils appartiennent
I Il sont rarement appelés explicitement par le
programmeur.
I Le compilateur se charge d’utiliser le bon
constructeur (surcharge) à la création de
l’objet.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Constructeur par défaut et par
Les opérateurs
Les Amis
recopie
Les Classes Template
La STL
L’Héritage
Polymorphisme
I Le Constructeur par défaut
Les Classes Abstraites
I Il est utilisé lorsque l’objet est instancié sans
paramètre.
I Type ()
I Le Constructeur de recopie
I Il est utilisé lorsqu’un objet est créé à partir
d’un autre objet de même type.
I Type ( const Type& unAutreObjet)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Constructeur par recopie
Les opérateurs
Les Amis
Les Classes Template
La STL
I Les attributs de l’objet passé en paramètre
L’Héritage
Polymorphisme sont recopiés dans les attributs de l’objet à
Les Classes Abstraites créer + Allocation d’un nouvel objet en
mémoire
I Les attributs ne sont pas recopiés si l’objet
passé en paramètre est incomplet
I On peut accéder directement à l’objet passé
en paramètre y compris aux champs
protected et private
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Destructeur
Les opérateurs
Les Amis
Les Classes Template
La STL
I Il n’y a qu’un seul destructeur par classe!!!
L’Héritage I Son identificateur est composé du nom de la
Polymorphisme
Les Classes Abstraites
classe précédé du signe : ~
Type().
I Les destructeurs n’ont pas de paramètres ni de
type de retour.
I Il est préférable de préfixer les destructeurs par
le mot clé virtual. (on verra une explication
plus tard dans le cours)
I Les destructeurs ne sont jamais explicitement
appellé par le programmeur.
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
Forme Canonique
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL Pour qu’une classe soit sous la forme canonique de
L’Héritage
Polymorphisme
Coplien, elle doit possèder les quatre méthodes
Les Classes Abstraites suivantes (Ceci est nécessaire dés lors que la classe
dispose de pointeurs sur des parties dynamiques):
I Constructeur par défaut
I Constructeur de recopie
I Destructeur
I Opérateur d’affectation
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Le mot clé this
Les opérateurs
Les Amis I Le mot clé this est le symbole de
Les Classes Template
La STL
l’auto-référence.
L’Héritage I Lorsqu’une fonction membre est appelée elle
Polymorphisme
reçoit implicitement une référence vers l’objet
Les Classes Abstraites
appelant.
I En général, l’accès aux attributs privés se fait
de façon directe.
I Dans certain cas, on a besoin de connaı̂tre
l’adresse de l’objet appelant (insertion d’un
objet dans une liste)
I this est un pointeur vers cet objet appelant
I Il ne peut être utilisé que dans les fonctions
membres.
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
Les opérateurs
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les opérateurs
Les Amis
Les Classes Template I Nous avons vu que les méthodes pouvait être
La STL surchargées...
L’Héritage
Polymorphisme I ... il est également possible d’effectuer cette
Les Classes Abstraites opération avec les opérateurs.
I Utilité: on peut utiliser le même opérateur
pour traiter des éléments de types différents.
I exemple : a + b peut correspondre à
I L’addition de deux entiers (int)
I L’addition de deux flottant (float)
I L’addition de deux flottant double précision
(double)
I ...
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs : Exemple
Les opérateurs
Les Amis Pour redéfinir l’opérateur d’addition pour une
Les Classes Template
La STL classe point, il suffit de définir une fonction
L’Héritage memebre de nom operator+ et prenant 1
Polymorphisme
Les Classes Abstraites
paramètre de type point et retournant un objet de
même type (c = a + b;).
I En général on utilise le mot clé operator suivi
de l’opérateur concerné.
I Le premier opérande de l’opérateur est
transmis implicitement comme étant l’objet
appelant
I On se retrouve avec la fonction membre
suivante : point operator+(point)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs : Exemple
Les opérateurs
Les Amis
Les Classes Template
La STL I Il existe 2 façons d’utiliser la méthode :
L’Héritage
Polymorphisme
I c = a + b;
Les Classes Abstraites I c = a.operator+(b);
I Dans le cas d’objet de grande taille on peut
passer les arguments par référence.
I Ce n’est par contre pas systèmatique pour la
valeur de retour qui peut poser problème dans
certain cas (référence sur un objet local)
I Il faut se limiter aux opérateurs existants
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL Les Amis
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Amis
Les opérateurs
Les Amis I On a vu que le masquage des données
Les Classes Template
La STL
impliquait un accés impossible aux membres
L’Héritage privés ou protégés d’une classe par une autre
Polymorphisme
classe indépendante.
Les Classes Abstraites
I Dans certain cas, il est utile d’avoir accès aux
membres privés d’une autre classe sans
changer le masquage. (beurk !!!!) (vecteur et
matrice)
I Pour cela nous allons utiliser des fonctions
amies
I L’amitié autorise l’accés à tous les membres
privés
I la déclaration se fait par le mot clé friend
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Amis
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage Il existe plusieurs situation d’amitié :
Polymorphisme
Les Classes Abstraites
I Fonction indépendante, amie d’une classe
I Fonction membre d’une classe amie d’une
autre classe
I Fonction amie de plusieurs classes
I Toute les fonctions membres d’une classe,
amies d’une autre classe
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Fonction indépendante, amie d’une
Les opérateurs
Les Amis
classe : Exemple
Les Classes Template
La STL
L’Héritage friend point operator+(point,point);
Polymorphisme
I Contrairement à la surcharge proposée
Les Classes Abstraites
précédemment, le premier opérande est
explicite.
I Ce n’est plus une fonction membre de point.
I L’emplacement de la déclaration d’amitié est
indifférent.
I Les deux arguments peuvent éventuellement
être passé par référence.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Fonction membre d’une classe amie
Les opérateurs
Les Amis
d’une autre classe : Exemple
Les Classes Template
La STL
L’Héritage I Supposons que nous ayons deux classes A et B
Polymorphisme
Les Classes Abstraites
et que dans B nous ayons une fonction
membre f de prototype : int f(char, A);
I Si f doit accéder aux champs privés de A elle
doit être déclarée comme amie dans A.
I La déclaration d’amitié se fait alors de la façon
suivante : friend int B::f(char, A);
I Il faut avoir compilé la classe B avant la classe
A
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Fonction amie de plusieurs classes :
Les opérateurs
Les Amis
Exemple
Les Classes Template
La STL
L’Héritage
Polymorphisme
Les Classes Abstraites I C’est le même principe que pour une méthode
non membre, amie d’une classe.
I Par exemple : on met friend void f(A,B);
dans les deux classes A et B.
I On définit ensuite la fonction void
f(A...,B...) où l’on veut.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Toute les fonctions membres d’une
Les opérateurs
Les Amis
classe, amies d’une autre classe
Les Classes Template
La STL
L’Héritage
Polymorphisme
I C’est une généralisation du cas fonction
Les Classes Abstraites membre, amie d’une autre classe.
I On pourrait déclarer amie toutes les méthodes
concernées.
I Il est plus simple de placer dans la classe A
l’instruction suivante : friend class B;
I Dans ce cas toutes les fonctions membres de
la classe B sont amies de la classe A.
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
Les Classes Templates
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Pour commencer : Les patrons de
Les opérateurs
Les Amis
fonctions
Les Classes Template
La STL
L’Héritage
Exemple de la fonction min pour les int:
Polymorphisme
Les Classes Abstraites
int min (int a, int b) {
if (a < b) return a;
else return b; }
ou
ou
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL La STL
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage I La bibliothèque STL (Standard Template
Polymorphisme
Les Classes Abstraites Library) est l’un des atouts de C++
I Elle fournit un ensemble de composants bien
structurés, cohérents et facilement adaptables.
I Il est facile d’utiliser les éléments de la STL
avec des algorithmes personnels ou des
structures de données personnelles.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme
I Ici, uniquement les généralités vont être
Les Classes Abstraites présentées. Libre à vous ensuite d’approfondir
l’utilisation.
I La STL contient 5 types d’objets : des
containers, des itérateurs, des algorithmes, des
objets-fonctions et des adaptateurs. Nous
allons essentiellement détailler les 2 premiers.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL : Les containers
Les opérateurs
Les Amis
Les Classes Template
I Les containers ont des objets qui permettent
La STL de stocker d’autres objets.
L’Héritage
Polymorphisme
I Ils sont décris par des classes génériques les
Les Classes Abstraites plus courantes : listes, tableaux, ensembles,...
I Ces classes possèdent des méthodes pour
ajouter, retirer, rechercher, trier... des
éléments sans se préoccuper de la gestion de la
mémoire.
I Un certain nombre de méthodes sont
commune à tous les containers (push_back())
I D’autres méthodes sont spécifiques à la nature
du container.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL : Les containers
Les opérateurs
Les Amis
Les Classes Template
La STL Les containers peuvent manipuler n’importe quel
L’Héritage
type de donnée à condition de possèder les
Polymorphisme
Les Classes Abstraites
méthodes suivantes
I Un constructeur par défaut
I Un constructeur par recopie
I L’opérateur d’affectation
I L’opérateur d’égalité (==)
I L’opérateur inférieur (uniquement pour les tris)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL : Les containers
Les opérateurs
Les Amis
Les Classes Template
Les différents containers disponibles sont les
La STL suivants :
L’Héritage
Polymorphisme
I vector : implémentation des tableaux
Les Classes Abstraites I list : implémentation de listes doublement
chaı̂nées
I deque : idem vector mais avec mise à jour en
début à temps constant
I set : implémentation des ensembles (sans
doublons)
I multiset ; implémentation des ensembles (avec
doublons)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL : Les containers
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme
I map : ensembles avec une clé unique associé à
Les Classes Abstraites chacun des éléments
I multimap : équivalent de multiset pour les
map
I stack : implémentation d’une pile (liste LIFO)
I queue : implémentation d’une file (liste FIFO)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL : Les itérateurs
Les opérateurs
Les Amis
Les Classes Template
I Les itérateurs sont une généralisation des
La STL pointeurs qui permet au programmeur de
L’Héritage
travailler avec des container de façon uniforme.
Polymorphisme
Les Classes Abstraites I Ils permettent de spécifier une position à
l’intérieur du container.
I Ils peuvent être incrémentés, déréférencés ou
comparés entre eux.
I Tous les containers possèdent une méthode
begin() qui retourne un itérateur sur le
premier élément et d’une méthode end() qui
retourne un itérateur sur une place après le
dernier élément.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
La STL : Les itérateurs
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage ...
Polymorphisme
list<int> lesEntiers;
Les Classes Abstraites
list<int>::iterator it;
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
L’Héritage
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme I L’héritage est l’un des fondamentaux de la
Les Classes Abstraites
programmation orientée objet
I Il est à la base des possibilités de réutilisation
des composants logiciels.
I Il permet une dérivation d’une classe en une
classe dérivée plus spécialisée.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
L’Héritage
Les opérateurs
Les Amis
Les Classes Template
La STL Par exemple :
L’Héritage
Polymorphisme
I On possède une classe Article comportant
Les Classes Abstraites les attributs suivants (nom, prixBrut,
quantité).
I On peut très bien construire une classe
Boisson à partir de cette classe en y ajoutant
uniquement un attribut supplémentaire
(volume)
I Et sans copier-coller sauvage !!!
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
L’Héritage : Terminologie
Les opérateurs
Les Amis
Les Classes Template
La STL I La dérivation de classe est la technique qui
L’Héritage
Polymorphisme
consite à faire hériter une classe d’une autre
Les Classes Abstraites classe.
I On dit qu’une classe B est dérivée d’une
classe A si elle en hérite.
I A est alors appelée la superclasse ou la classe
de base de la classe B
I la déclaration se fait de la manière suivante:
class B : <mode_dérivation> A {...}
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
L’Héritage : Les modes de
Les opérateurs
Les Amis
dérivation
Les Classes Template
La STL
Les modes de dérivations permettent de fixer le
L’Héritage statut (public, protected, private) des
Polymorphisme
membres (attributs, fonctions) de la classe B en
Les Classes Abstraites
fonction du statut des membres de la classe A. Les 3
principaux modes de dérivations sont les suivants:
I L’heritage de spécialisation : relation de type
”est un”
I L’héritage d’implémentation : relation de
type ”est implémenté en tant que”
I L’aggrégation ou Layering (attention ce n’est
pas tout à fait un héritage)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
L’Héritage : Les modes de
Les opérateurs
Les Amis
dérivation
Les Classes Template
La STL
L’Héritage
Polymorphisme
Les Classes Abstraites
I Le mode par défaut en C++ est l’heritage
d’implémentation qui utilise le mot clé
private
I Par contre la méthode d’héritage la plus
utilisée est l’héritage de spécialisation invoquée
par le mot clé public
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
L’Héritage : Les modes de
Les opérateurs
Les Amis
dérivation
Les Classes Template
La STL
L’Héritage
Polymorphisme I Le troisième mode par layering est une
Les Classes Abstraites
solution intermédiaire qui utilise plus le
mécanisme de masquage lié à la C.O.O. que la
notion d’héritage.
I En C++ il est également possible d’hériter de
façon protégée en utilisant le mot clé
protected.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
L’Héritage : Les modes de
Les opérateurs
Les Amis
dérivation
Les Classes Template
La STL
L’Héritage
Polymorphisme
Les Classes Abstraites
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
Polymorphisme, Liaison
La STL Statique et Liaison
L’Héritage
Polymorphisme
Les Classes Abstraites
Dynamique
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Type statique, Type dynamique
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme I Le type Statique d’un objet ou d’un pointeur
Les Classes Abstraites
sur un objet (ou d’une référence) est le type
de sa déclaration dans le programme.
I Son type Dynamique est le type qu’il prend en
fonction de ses affectations/manipulations
I considéront l’exemple suivant:
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Type statique, Type dynamique
Les opérateurs
Les Amis
Les Classes Template
class A {
La STL
L’Héritage ...
Polymorphisme };
Les Classes Abstraites
class B : public A {
...
};
B unB;
...
A unA = unB;
A *ptrA = &unB;
A &refA = unB;}
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Type statique, Type dynamique
Les opérateurs
Les Amis
Les Classes Template
I Les trois affectations sont légitimes, elles font
La STL jouer la conversion standard d’une classe vers
L’Héritage une classe de base.
Polymorphisme
Les Classes Abstraites
I Le type de unA ne pose pas problème (c’est un
A). Par contre les types de ptrA et refA sont
plus ambigus. (prtA pointe-il vers un A ou un
B?)
I Le type statique de *ptrA (ce que ptrA
pointe) et de refA est A, car c’est de cette
façon qu’ils ont été déclarés.
I Le type dynamique de *ptrA et de refA est
B, car tel est le type des valeurs effectives de
ces variables.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Type statique, Type dynamique:
Les opérateurs
Les Amis
Polymorphisme
Les Classes Template
La STL
L’Héritage I Le type statique d’une expression découle de
Polymorphisme
Les Classes Abstraites
l’analyse du texte du programme, il est connu
à la compilation.
I Le type dynamique, au contraire, est déterminé
par la valeur courante de l’expression, il peut
changer durant l’exécution du programme.
I Par conséquent, un pointeur sur un objet de
type A peut pointer vers un objet de type B.
C’est ce que l’on appelle le polymorphisme.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Liaison statique, Liaison dynamique
Les opérateurs
Les Amis
Les Classes Template I Par défaut, les méthodes d’un objet sont liées
La STL
L’Héritage statiquement à la compilation.
Polymorphisme I Autrement dit, même si le type dynamique
Les Classes Abstraites
change au cours d’un programme, la liaison
avec les méthodes ne change pas (statique).
I Dans le cadre de l’exemple précédent, en
supposant que les classes A et B disposent
chacune d’une méthode void Affiche().
L’appel de *ptrA.Affiche() va faire appel à
la méthode A::Affiche() même si sont type
dynamique est B.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Liaison statique, Liaison dynamique
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage I Il est possible en C++ d’effectuer une liaison
Polymorphisme
dynamique avec les méthodes (i.e. au moment
Les Classes Abstraites
de l’exécution).
I Cette liaison est également dite virtuelle.
I Pour cela, il suffit d’utiliser le mot clé
virtual lors de la première déclaration de la
méthode. (Et à chaque que l’on veut en faire
bénéficier les descendants d’une classe)
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Liaison statique, Liaison dynamique
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme I Dans l’exemple, il suffit de définir la méthode
Les Classes Abstraites
Affiche de la façon suivante dans A :
virtual void Affiche {...};...
I ... et de la redéfinir dans B
I L’exécution de *ptrA.Affiche() fera alors
appel à B::Affiche()
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Liaison dynamique : Intérêts
Les opérateurs
Les Amis
Les Classes Template
La STL
L’Héritage
Polymorphisme I La liaison dynamique est très utile lors de
Les Classes Abstraites
traitements génériques sur des objets
spécialisés issus de la même classe mère.
I Il suffit alors d’écrire les traitements sur des
objets du type de la classe mère et laisser la
liaison dynamique faire le reste.
set.utbm.fr
Plan du Cours
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les opérateurs
Les Amis
Les Classes Template
La STL Les Classes Abstraites
L’Héritage
Polymorphisme
Les Classes Abstraites
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Classes Abstraites
Les opérateurs
Les Amis
Les Classes Template
I Il est possible de définir dans dans une classe
La STL des méthodes virtuelles pures, c’est à dire
L’Héritage dont l’entête est défini mais dont le corps n’est
Polymorphisme
Les Classes Abstraites
pas rédigé.
I L’écriture est la suivante: virtual void
affiche() = 0 ;
I Ceci oblige toutes les classes héritières à
redéfinir cette méthode en se conformant au
profil énoncé.
I On dit d’une classe qu’elle est abstraite à
partir du moment où elle possède au moins
une méthode virtuelle pure.
set.utbm.fr
LO43 : Bases fondamentales de la programmation orientée objet
Plan du Cours
Automne 2005
La C.O.O.
Introduction au C++
Les Classes
Constructeur-Destructeur
Forme Canonique
Les Classes Abstraites
Les opérateurs
Les Amis I On utilise en général les classes abstraites pour
Les Classes Template
La STL
définir une interface commune à toutes les
L’Héritage classes filles sans définir le contenu des
Polymorphisme
méthodes qui peut être lié à la nature
Les Classes Abstraites
spécifique de chaque classe.
I D’après la norme ANSI, il n’est pas possible
d’instancier une classe abstraite (pour des
raisons évidentes).
I Il n’y a donc pas a priori de constructeur.
I Cependant, un grand nombre de compilateurs
l’autorise. Ce qui implique la définition de
constructeur permettant d’initialiser certains
des attributs de la classe abstraite.