Académique Documents
Professionnel Documents
Culture Documents
en C++
Introduction à La POO
• Les concepts Fondamentaux de la POO
• Introduction au Langage C++ :
• La POO en C++
• Classe,
• objets,
• Notion de constructeur/Destructeur,
• Encapsulation en C++
• Surcharge d’opérateurs
• Héritage en C++
EHTP 2019/2020
• Polymorphisme en C++
• Entrée/Sortie en C++
• Programmation générique en C++
• Gestion des Exceptions en C++
Introduction
Dr. H.CHAIBI
• La POO est une nouvelle façon d’organiser le code source, elle permet de le
Dr. H.CHAIBI
simplifier et de l’éclaircir; afin que d’autres personnes qui n’ont pas assistés
à sa conception, puissant l’utiliser;
Objet: entité identifiable du monde réel pouvant avoir ou pas une existence
physique. Exemples : chien, table, personne, compte Bancaire…
Class Personne{ …. }
Programmation Orientée Objet (POO): Instanciation
Dr. H.CHAIBI
Instanciation
• L’instanciation est l’opération qui consiste à créer un objet à partir d’une
classe
• Encapsulation
• Abstraction
• Héritage
EHTP 2019/2020
• Polymorphisme
Les concepts de la POO
Notion d’encapsulation
Dr. H.CHAIBI
Principe d’encapsulation
Notion d’encapsulation
Dr. H.CHAIBI
Principe d’encapsulation
Notion d’encapsulation
Dr. H.CHAIBI
• Un attribut ou une méthode sont dits privés si leur utilisation est interdite
en dehors de la classe.
• Un attribut ou une méthode sont dits publics si leur utilisation est autorisée
en dehors de la classe.
• Ce choix s’effectue lors de la déclaration de la classe.
EHTP 2019/2020
• La partie publique est appelée interface car tout le monde peut y accéder,
Les concepts de la POO
Notion d’encapsulation
Dr. H.CHAIBI
Notion d’encapsulation
Dr. H.CHAIBI
• Une question naturelle se pose alors : comment accéder aux attributs si ceux-ci sont
déclarés de façon privée ?
• La réponse est : par l’intermédiaire de méthodes bien particulières, les « getter » et les
«setter ».
Getter
• Il s’agit de méthodes publiques dont le rôle est de « retourner » la valeur d’un attribut.
Setter
EHTP 2019/2020
Notion d’encapsulation
Dr. H.CHAIBI
Notions d’abstraction
• Le processus d’abstraction consiste à identifier pour un ensemble
Dr. H.CHAIBI
d’éléments:
+ des caractéristiques communes
à tous les éléments
Abstraction
Notion d’abstraction
Dr. H.CHAIBI
Abstraction
EHTP 2019/2020
Les concepts de la POO
Héritage
Dr. H.CHAIBI
Principe : Regrouper les classes partageant des attributs et des opérations et les
organiser en arborescence
EHTP 2019/2020
Les concepts de la POO
Héritage
Dr. H.CHAIBI
Héritage
Dr. H.CHAIBI
gagner en généricité.
Les concepts de la POO
Héritage
Dr. H.CHAIBI
• Héritage : est l'association entre deux classes permettant d'exprimer que l'une
est plus générale que l'autre et implique une transmission automatique des
propriétés (attributs et méthodes) d'une super-classe à une sous-classe .
EHTP 2019/2020
Les concepts de la POO
Héritage
Dr. H.CHAIBI
Héritage Multiple
Dr. H.CHAIBI
Héritage Multiple
Dr. H.CHAIBI
Polymorphisme
Dr. H.CHAIBI
Polymorphisme
• Exemple 1
Dr. H.CHAIBI
Polymorphisme
Dr. H.CHAIBI
• Exemple 2
EHTP 2019/2020
Dr. H.CHAIBI
Programme .C
EHTP 2019/2020
Programme .C++
Déclaration, définition et utilisation d’une classe
Dr. H.CHAIBI
Elle se fait dans un fichier dont le nom se termine par .cpp contenant le traitement
principal (fonction main),
Structure d’un programme en C++
Dr. H.CHAIBI
EHTP 2019/2020
Phase de déclaration
Dr. H.CHAIBI
Syntaxe :
Type de retour nom de la classe :: nom de la fonction( Paramètre)
Phase de manipulation
Dr. H.CHAIBI
monObjet.MonAttribut = valeur ;
monObjet.MaMéthode() ;
Style d’écriture
• La première lettre du nom de la classe en majuscule
Dr. H.CHAIBI
class Nombre
• Les noms des méthodes en minuscules (tout au moins la première
partie si le nom est composé),
char* lireNom( )
• Le caractère _ comme premier caractère du nom d'une donnée
membre
void ecrireValeur(int _valeur, int _position)
EHTP 2019/2020
Exemple:
EHTP 2019/2020
Instanciation d’objets
Dr. H.CHAIBI
• Exemple:
Instanciation d’objets
Dr. H.CHAIBI
• Mais comment peut-on initialiser les attributs (i.e. leur attribuer des
valeurs) ?
Première solution : affecter individuellement une valeur à chaque attribut
• Ceci est une mauvaise solution dans le cas général : si le nombre d’attributs
est élevé, ou si le nombre d’objets créés est grand (rectangles r[0], r[1], ...,
r[99]) elle est fastidieuse et source d’erreurs (oublis)
Deuxième solution : définir une méthode dédiée à l’initialisation des
attributs
EHTP 2019/2020
• En fait, C++ fait déjà le travail pour vous en fournissant des méthodes
particulières appelées constructeurs
Constructeur
Dr. H.CHAIBI
NomClasse (paramètres);
Constructeur
Dr. H.CHAIBI
• que l’on peut surcharger ; Dans une classe, il peut y avoir plusieurs
constructeurs à condition qu’ils diffèrent par le nombre des
paramètres.
EHTP 2019/2020
Constructeur
Dr. H.CHAIBI
Utilisation
NomClasse Objet1(Objet2);
ou NomClasse Objet1=Objet2;
Constructeur de copie
Dr. H.CHAIBI
1. Déclaration 3. Utilisation
2. Définition
EHTP 2019/2020
Constructeur de copie
Dr. H.CHAIBI
• Lorsque certaines données des objets auront été allouées dynamiquement. Une copie brutale
des champs d'un objet dans un autre ne ferait que recopier les pointeurs, pas les données
pointées. Ainsi, la modification de ces données pour un objet entraînerait la modification des
données de l'autre objet, ce qui ne serait sans doute pas l'effet désiré.
Per2 Exemple
Per1
liste = Per1.liste; // erreur! on ne copie que
KALID
l'adresse de l'objet de type double et non la liste
AHMAD en entier.
27 Pour résoudre le problème, il faut copier
*liste 1f23 *liste l'objet de type double en faisant une
EHTP 2019/2020
allocation dynamique:
0x23 0x24 0x25 …. liste = new Double(*Per.liste);
3.45 56.6 21.6 0.43 666
Constructeur par défaut par défaut
Dr. H.CHAIBI
Problématique
• Pour créer des objets nous allouons de manière plus ou moins
transparente de la mémoire,
• Il est nécessaire de libérer cette mémoire pour l’objet courant.
• Sinon lorsque le programme tourne pendant des heures / jours il peut
arriver à saturer le système.
Solution
• Il est nécessaire de mettre en œuvre une méthode permettant de faire le
ménage lorsque l’on n’a plus besoin d’un objet.
EHTP 2019/2020
Exemple:
Destructeur
Exercice1: Classe Compte (Constructeur)
Dr. H.CHAIBI
“propre”,
• Ce comportement peut devenir très coûteux en mémoire dans certains cas
particulier.
• Pour contourner ces problèmes, le mot clef « static » a été introduit dans la
langage C++.
• Une méthode ou une variable déclarée static, cela signifie qu’elles sont
instanciées une unique fois en mémoire.
• Une telle variable « static » reste locale à la fonction ou à la classe dans
EHTP 2019/2020
laquelle elle est déclarée, mais sa valeur est conservée d'un appel au
suivant.
Les membres statique de la classe
Dr. H.CHAIBI
private:
EHTP 2019/2020
• Pour éviter que l’ensemble des attributs et des méthodes ne soit visible et
modifiable depuis l’extérieur,
Accès privé
• les membres privés ne sont accessibles
que par les méthodes appartenant à la
classe,
• Droits d’accès minimums que l’on peut
accorder à un attribut ou à une méthode,
permet de cacher les détails
d’implémentation vis-à-vis de l’extérieur,
EHTP 2019/2020
Accès protégé
• Les membres protégés sont équivalents
aux membres privés,
Accès publique
• Les membres publics sont accessibles
par tous,
• La partie publique est appelée interface
car tout le monde peut y accéder,
• De plus ce sont les méthodes (attributs)
que toutes classes dérivées possèdent
obligatoirement,
• Permet d’utiliser la classe (méthodes et
EHTP 2019/2020
Déclaration Utilisation
Définition
EHTP 2019/2020
Encapsulation en C++ : private vs public
• Les données membres portant l'étiquette ’private’ ne peuvent pas
Dr. H.CHAIBI
2. Setter
• Une fonction membre permettant de modifier le contenu d'une donnée membre
protégée.
• La différence entre les deux fonctions afficher() est que la version non-constante
ne peut être appelée pour des objets constants de type Point.
EHTP 2019/2020
• Il y a deux méthodes pour passer des variables en paramètre dans une fonction :
Dr. H.CHAIBI
Si l'expression passée en paramètre est une variable, son contenu est copié dans la variable
locale. La modification de la variable locale dans la fonction appelée ne modifie pas la
variable passée en paramètre, parce que ces modifications ne s'appliquent qu'à une copie
de cette dernière.
Passage de paramètres par référence
Dr. H.CHAIBI
• Il est recommandé, pour des raisons de performances, de passer par référence tous les
paramètres dont la copie peut prendre beaucoup de temps. Bien entendu, il faut utiliser des
EHTP 2019/2020
références constantes au maximum afin d'éviter les modifications accidentelles des variables de
la fonction appelante dans la fonction appelée.
Passage de paramètres par référence
Dr. H.CHAIBI
Exemple
Résultat de l’exécution
EHTP 2019/2020
• Lors d'un passage par référence, la variable (ou l'objet) n'est pas copiée.
Dr. H.CHAIBI
• Le gain est assez négligeable mais, si vous prenez un objet de type String
qui peut contenir un texte très long, la copie prendra alors un temps
important. C'est pour cela que, lorsque l'on manipule des objets, on
préfère utiliser des références. Et c'est pour cela que l'on utilise une
référence constante.
EHTP 2019/2020
Comment le compilateur fait-il pour vérifier si une fonction est bien différente d'une autre?
La signature d'une fonction: C'est un peu sa carte d'identité, ce qui permet au compilateur
de différencier les fonctions entre elles.
La surcharge des fonctions
Dr. H.CHAIBI
• Ces fonctions ont des signatures différentes et portent le même nom. Ce sont des
fonctions surchargées
EHTP 2019/2020 Dr. H.CHAIBI
2. Surcharge d’opérateurs
Surcharge d’opérateurs
• En langage C, l'opérateur division « / » est défini comme suit:
Dr. H.CHAIBI
(voir tableau)
• Le but est de définir ces “fonctions” pour des classes dépourvues de ces
opérateurs
Les opérateurs surchargeables
Dr. H.CHAIBI
EHTP 2019/2020
Qui ne peut pas être redéfini?
Dr. H.CHAIBI
• Les opérateurs peuvent être définis comme membres ou non membres d'une
classe.
Exemple de surcharge de l’opérateur +
Dr. H.CHAIBI
EHTP 2019/2020
Exercice: Surcharge d’opérateurs
Dr. H.CHAIBI
L’héritage
Héritage
Dr. H.CHAIBI
• Lorsqu'une classe hérite d'une autre classe, elle récupère toutes ses propriétés et
ses méthodes.
•Les constructeurs sont appelés dans un ordre bien précis : classe mère, puis classe
fille.
•En plus de public et private, il existe une portée protected. Elle est équivalente à
private mais elle est un peu plus ouverte : les classes filles peuvent elles aussi
accéder aux éléments.
EHTP 2019/2020
•Si une méthode a le même nom dans la classe fille et la classe mère, c'est la
méthode la plus spécialisée, celle de la classe fille, qui est appelée.
Héritage
Dr. H.CHAIBI
La syntaxe:
Class NomSousClasse : public NomSuperClasse { … }
Héritage - Exemple
Héritage et constructeurs
Dr. H.CHAIBI
• lorsqu'on crée un objet de type Personne le constructeur est appelé avant toute
chose.
• Mais que se passe-t-il lorsqu'on crée par exemple un Etudiant qui hérite de
Personne. L’Etudiant a le droit d'avoir un constructeur lui aussi ! Est-ce que cela
ne risque pas d'interférer avec le constructeur de Personne.
• Il faut appeler le constructeur de Personne si on veut que le nom, le prénom et
l'âge soient initialisés !
→Le compilateur appelle d'abord le constructeur de la classe mère Personne, puis
le constructeur de la classe fille Etudiant.
EHTP 2019/2020
Héritage
Dr. H.CHAIBI
La portée protected
• La portée protected est un autre type de droit d'accès que
on classe entre public et private. Il n'a de sens que pour les
classes qui se font hériter (les classes mères) mais on peut
l'utiliser sur toutes les classes, même quand il n'y a pas
d'héritage.
• Le masquage
Quand on écrit une fonction qui a le même nom que celle héritée de la
classe mère, on parle de masquage. La fonction héritée de Personne
est masquée, cachée.
EHTP 2019/2020
Héritage
Dr. H.CHAIBI
Personne
Afficher() Personne P1;
Utilisation de la version de la Etudiant E1;
méthode de la classe Personne
P1.Afficher();
Afficher()
Héritage
Dr. H.CHAIBI
• Exemple: Personne
Etudiant Enseignant
Doctorant
Personne P;
Etudiant E;
Doctorant D;
//…..
EHTP 2019/2020
P=E;
P=D;
Exercice: Héritage
Dr. H.CHAIBI
Le polymorphisme
Polymorphisme
Dr. H.CHAIBI
Personne
nom:string
prenom: string
age:int
Designation(): void
EHTP 2019/2020
Etudiant Enseignant
CNE: int Num_CNSS: int
Designation(): void Designation(): void
Polymorphisme
Dr. H.CHAIBI
Et
utiliser des méthodes virtuelles.
Déclaration des méthodes virtuelles
Dr. H.CHAIBI
Syntaxe:
Virtual Type nom_fonction (paramètres) const ;
EHTP 2019/2020 Dr. H.CHAIBI
• Exemple
Polymorphisme
Polymorphisme
Dr. H.CHAIBI
Personne
Virtual Designation() Utilisation de la version de la
méthode de la classe Personne
Utilisation de la version de la
Etudiant
EHTP 2019/2020
Les classes abstraites sont à utiliser lorsqu'une classe mère ne doit pas être
Dr. H.CHAIBI
instanciée.
Une classe abstraite est une classe comportant au moins une méthode
virtuelle pure.
Une méthode virtuelle pure est une méthode qui est déclarée mais non
EHTP 2019/2020
définie dans une classe. Elle est définie dans une des classes dérivées de
cette classe.
Méthode virtuelle pure
Dr. H.CHAIBI
• Pour déclarer une méthode virtuelle pure dans une classe, il suffit de
faire suivre sa déclaration de « =0 ». La fonction doit également être
déclarée virtuelle :
Syntaxe:
Virtual type nom (paramètres) =0;
→une méthode virtuelle peut être redéfinie dans une classe fille ;
→une méthode virtuelle pure doit être redéfinie dans une classe fille.
EHTP 2019/2020
Polymorphisme
Dr. H.CHAIBI
fichiers.
Les Entrées/ Sorties
Dr. H.CHAIBI
• Exemple
EHTP 2019/2020
Les Entrées/ Sorties: ifstream, ofstream
Dr. H.CHAIBI
Pour gérer les fichiers, il faut inclure fstream. Il s'agit d'un ensemble de classes
standards donc il ne faut pas oublier "using namepace std;"
Il existe plusieurs types:
• ifstream(Input FileStream)
en lecture
• Ofstream (Output File Stream)
Fichier en écriture
• fstream
Fichier en lecture et écriture.
Il faut toujours fermer le fichier lorsque qu'on a fini avec la méthode close();
EHTP 2019/2020
Les Entrées/ Sorties: ifstream, ofstream
Dr. H.CHAIBI
Simplification de l’écriture,
Dr. H.CHAIBI
Exercice: template
Les classes templates
Dr. H.CHAIBI
du programme :
un gestionnaire d'exception.
Gestion des exceptions
• On crée des zones où l'ordinateur
Dr. H.CHAIBI
etc.
Les exceptions standard
Dr. H.CHAIBI