0% ont trouvé ce document utile (0 vote)
0 vues34 pages

Cours ClasseC++

Ce document présente les concepts fondamentaux de la programmation orientée objet en C++, en se concentrant sur les classes, les objets, l'encapsulation, l'héritage et les méthodes. Il décrit également la syntaxe pour définir une classe, ainsi que l'importance des constructeurs et des destructeurs. Enfin, il aborde les spécificateurs d'accès et le rôle du pointeur 'this' dans les méthodes d'objet.

Transféré par

charefeddineahmed
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
0 vues34 pages

Cours ClasseC++

Ce document présente les concepts fondamentaux de la programmation orientée objet en C++, en se concentrant sur les classes, les objets, l'encapsulation, l'héritage et les méthodes. Il décrit également la syntaxe pour définir une classe, ainsi que l'importance des constructeurs et des destructeurs. Enfin, il aborde les spécificateurs d'accès et le rôle du pointeur 'this' dans les méthodes d'objet.

Transféré par

charefeddineahmed
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 34

29/01/2019

UNIVERSITÉ DES SCIENCES ET DE LA TECHNOLOGIE D’ORAN « USTOMB »


FACULTÉ DE GÉNIE ÉLECTRIQUE - DÉPARTEMENT D’ELN

MASTER 1:RT/II/ESE/ EB
MODULE: POO

C++ : Approche orientée


objets

La responsable du module: Dr. Zouagui-Meddeber L.


[email protected]

1
1

Objet - classe
• Un objet est une structure informatique
regroupant :
– Des variables, caractérisant l’état de l’objet,
– Des fonctions, caractérisant le comportement de
l’objet.
• Un ensemble d’objets de même type s’appelle une
classe.
• En C++, la programmation d’une classe se fait en
trois phases : déclaration, définition, utilisation
(en abrégé : D.D.U).
2

1
29/01/2019

Objet
 Approche procédurale :
"Que doit faire mon programme ?"
 Approche orientée-objet :
"De quoi doit être composé mon programme ?"
 Cette composition est conséquence d'un choix de
modélisation fait pendant la conception
Exemple: Gestion d'une bibliothèque

L’attentat
Yasmina Khadra
El Watan Amina Kara Djamila Nait
Directrice Lectrice

L’incendie Mohamed Daoud


Bachir Abidi Lecteur
Mohamed Dib Bibliothécaire

Classe
Des objets similaires peuvent être informatiquement décrits par
une même abstraction : une classe
 même structure de données et méthodes de traitement
 valeurs différentes pour chaque objet
Classe Lecteur
Classe Livre Classe Employé -nom, prénom
-titre, auteur Classe Journal -nom, prénom, statut
-titre

Germinal
E. Zola
Le Monde Alice Dupont Anne Durand
Directrice Lectrice

Le seigneur des anneaux Arsène Deschamps


Michel Martin Lecteur
J.R.R.Tolkien Bibliothécaire

2
29/01/2019

Contenu d'une classe


Une classe est composée de plusieurs membres dont chacun est soit :
 un attribut : variable typée
 une méthode (ou opération) : ensemble d'instructions de traitement

L’approche objet considère comme indissociable les données et les méthodes pour
les manipuler.
class CompteBancaire
{
String proprietaire;
Attributs double solde;

double getSolde()
{
return solde;
Méthodes }
void credite(double val)
{
solde = solde + val;
}
}

Objets
• Les instances possèdent :
– Des caractéristiques dont les types sont semblables :
les attributs.
– Des comportements qui leur sont tous identiques : les
méthodes.

– Chaque instance d’une classe possède les mêmes


champs et les mêmes méthodes que les autres. Mais
les valeurs de ces champs peuvent varier d’un objet à
l’autre.

3
29/01/2019

CLASSE
ETUDIANT Nom de la classe
N°INS: int
NOM_ET: string(50)
PRENOM_ET: string(50) Les attributs de
ADRESSE: string(100) la classe
NOTES: double
Calcul_moyenneG(…): double
Les méthodes la
classe

ETUDIANT 1 ETUDIANT 2 ETUDIANT 3


3255 4269 3955
Bentabet Ziane Badji
Mohamed karima Anes
Oran Alger Tlemcen
12.5; 10.0; 8.5 13.75; 11.0; 16.5 8.5; 10.5;16.0
Calcul_moyenneG(…) Calcul_moyenneG(…) Calcul_moyenneG(…)
Instance1 : Objet1 Instance2 : Objet2 Instance3 : Objet3 7

Concepts de base de l’approche


orientée-objets
• Modélisation (classes, instances)
• Encapsulation
– C’est la protection que les objets accordent à leurs
attributs.
• Activation (méthodes, messages)
– C’est la capacité à actionner un objet depuis
l’extérieur, par l’appel de ses méthodes.
• Héritage
– Héritage des propriétés (attributs et méthodes).
8

4
29/01/2019

Classes : syntaxe C++


• Définition simple d'une classe :

class <nom>
{
public:
<prototypes de fonctions membres public>
private:
<données membres>
<prototypes de fonctions membres private>
};
9

Classes : syntaxe C++


• La définition d'une classe débute par le mot clé
réservé : class
Nom de la classe

Mot-clé « class »

Accolade ouvrante
Définitions d’attributs :
Type + nom de variable
Déclarations de méthodes :
fonctions qui sont «connues » par la classe

Accolade fermante

Point-virgule 10

5
29/01/2019

Classes : syntaxe C++


• Class vs struct

11

Classes : syntaxe C++


• Méthodes d’objets
– Les méthodes d’objets (ou d’instances) sont des
fonctions qu’il est possible d’appliquer à un objet
d’une classe.
– Synonymes : « fonctions membres » ou simplement
«méthodes».

– L’ensemble des méthodes forment la partie


comportementale (dynamique) d’un objet.

12

6
29/01/2019

Classes : syntaxe C++


• La classe Point a deux membres données privés
x et y.
• Elle a trois méthodes publiques ‘initialise’,
‘deplace’ et ‘affiche’.

13

Classes : syntaxe C++


• L'opérateur de portée :: indique la classe à
laquelle appartient la méthode.

14

7
29/01/2019

Classes : syntaxe C++


• Utilisation :

15

Classes : syntaxe C++


• Comme d’habitude, il faut distinguer les notions
de définition et de déclaration.
• On peut procéder de deux manières pour
introduire une méthode dans une classe :
1. Définir la fonction au sein de la définition de la classe
elle-même.

2. Déclarer la fonction dans la classe, et la définir


ailleurs.
16

8
29/01/2019

Classes : définition vs déclaration


• EN GENERAL :
– On définit la classe et on déclare ses méthodes dans
un fichier dont le nom est celui de la classe et portant
l’extension « .h »

– On définit les méthodes (leur corps) dans un fichier


dont le nom est aussi celui de la classe et portant
l’extension « .cpp » qui inclut le précédent.

17

Classes : définition vs déclaration

18

9
29/01/2019

Séparation entre la déclaration et


l’implémentation d’une classe

19

Classes : définition vs déclaration

20

10
29/01/2019

Classes : encapsulation
• L’encapsulation est une notion fondatrice de
l’approche orientée-objets. C’est elle qui garantit
la modularité des programmes. Dans l’esprit le
plus pur de l’approche objet, les attributs seront
donc déclarés privés (private), nous verrons plus
loin cette notion.
• C’est une bonne pratique de protéger les données
des objets pour respecter le principe de
l’encapsulation.
21

Notion d’encapsulation

22

11
29/01/2019

Classe : encapsulation
• On voit apparaître un nouveau mot-clé « public »
dans l’exemple. Il signifie que tout ce qui suit est
de portée générale et peut être appelé depuis
n’importe quel endroit dans le code.
• Les deux méthodes ont accès à tous les attributs
quels qu’ils soient. Enfin, une méthode peut
appeler n’importe quelle autre méthode de la
même classe, quelle qu’elle soit.

23

Classe : encapsulation

24

12
29/01/2019

Classe : encapsulation
• Les spécificateurs private, protected et public
peuvent apparaître dans un ordre et un nombre
quelconque dans la définition d'une classe. Un
spécificateur définit les règles d'accès applicables
jusqu'au spécificateur suivant.
• Si aucun spécificateur n'est précisé :
– Les membres sont privés (private) par défaut pour une
classe (class) ;
– Ils sont publics (public) par défaut pour une structure
(struct). 25

Classe : encapsulation

26

13
29/01/2019

Spécificateur private
• L'accès aux données et fonctions privées d'une
classe (private) est réservé aux méthodes de la
classe elle-même, ainsi qu'à des fonctions ou à
des classes
• étrangères déclarées amies (friend).

27

Spécificateurs protected, public


• Le spécificateur protected a un effet semblable à
private, mais avec une limitation moins sévère des
accès. En effet, l'accès est également autorisé aux
méthodes des sous-classes et aux amis de ces
sous-classes.
• Le spécificateur public signifie que la méthode ou
l'attribut est accessible depuis n'importe quelle
autre fonction du programme. Pour respecter
l'esprit de la programmation objet, il faut
cependant éviter de rendre publics des attributs. 28

14
29/01/2019

Accès aux membres (attributs et méthodes)


• On accède aux
attributs et aux
méthodes d'un objet
par la notation
pointée (ou la
notation fléchée dans
le cas d'un pointeur
sur un objet).

29

Accès aux membres (attributs et méthodes)


• Par souci de simplicité, on a
déclaré tous les membres
publics.
• « pa » est du type « Point »,
on accède à ses attributs et
appelle ses méthodes par la
notation pointée.
• « pb » est du type « pointeur
vers Point », on utilise la
notation fléchée
• « tp[0] » est du type « Point »,
notation pointée
• « tp » est du type « pointeur
vers Point », notation fléchée 30

15
29/01/2019

Accès aux membres (attributs et méthodes)

31

Encapsulation : notion d’accesseurs


• Pour respecter le principe d’encapsulation des
données, on ne rend pas les attributs publics. Si
leur accès est nécessaire, une bonne pratique
consiste à le faire par des méthodes.
• Ces méthodes s’appellent des accesseurs
(setters/getters en anglais).

32

16
29/01/2019

Encapsulation : notion d’accesseurs/Modificateurs

33

Encapsulation : notion d’accesseurs/Modificateurs


#include <iostream>
#include "rectangle.h"
using namespace std;

int main()
{
Rectangle *R1=new Rectangle;

R1->largeur=10;// erreur de compilation


R1->hauteur=30;// erreur de compilation
R1->setHauteur(20);
R1->setLargeur(6);

cout<<R1->getHauteur()<<endl;
cout<<R1->getLargeur()<<endl;

return 0;
}
34

17
29/01/2019

Classes - Recommandations de style


• Mettre :
– La première lettre du nom de la classe en majuscule.
– La liste des membres publics en premier.
– Les noms des méthodes en minuscules.
– Le caractère _ comme premier caractère du nom
d’une donnée membre.

• Exemple :

35

Constructeurs/Destructeurs
• Les constructeurs et les destructeurs sont les
méthodes les plus importantes d'une classe.

– C'est là que sont créées toutes les données qui seront


ensuite utilisées dans le programme ;
– On y manipule allocation et désallocation dynamique
de la mémoire ;

36

18
29/01/2019

Constructeurs
• Un constructeur est une méthode particulière qui
est appelée automatiquement juste après une
création d’objet. Il porte le même nom que la
classe, et n'a pas de type de retour.
• Un constructeur sert à initialiser l'objet au
moment de sa création.
• Syntaxe :
<nom>(<liste des paramètres>): <liste d’initialisation>
{ // code du constructeur, éventuellement vide}
37

Constructeurs

38

19
29/01/2019

Constructeurs

39

Constructeurs

40

20
29/01/2019

Constructeurs

Constructeurs

21
29/01/2019

Destructeurs
• Les destructeurs sont les symétriques des
constructeurs. On trouve dans un destructeur des
tâches qui sont du domaine du "nettoyage" :
– Libération de la mémoire allouée dynamiquement ;
– Enregistrement de données, fermeture de fichiers ...
• Le nom du destructeur est le même que celui de
la classe, précédé du signe tilde "~". Un
destructeur ne possède pas de valeur de retour et
n'a aucun argument.
43

Destructeurs

44

22
29/01/2019

Destructeurs
• Dans l'immense majorité des situations, les
destructeurs sont appelés implicitement pendant
l'exécution du programme.
• Pour les objets créés dynamiquement, il faut
cependant appeler explicitement la destruction
sur le pointeur.

45

Destructeurs

46

23
29/01/2019

Constructeurs/Destructeurs

47

Constructeurs/Destructeurs

48

24
29/01/2019

Pointeur this
• Chaque méthode d'objet dispose en fait d'un
argument supplémentaire, ajouté
automatiquement par le compilateur. Cet
argument est un pointeur du nom de this, vers
l'objet à qui est appliqué la méthode.
• this est un pointeur constant dont la valeur est
l'adresse de l'objet (permet de désigner l'objet
courant).
• L'intérêt du pointeur this se fait sentir dans au
moins deux cas :
49

Pointeur this
1. Lorsque les attributs de l'objet sont masqués par des
déclarations qui utilisent les mêmes noms :

2. Lorsqu'on veut retourner l'adresse de l'objet :

50

25
29/01/2019

Pointeur this
this->
• Exemple :

51

Pointeur this

Création ou allocation statique

Création ou allocation dynamique


52

26
29/01/2019

Classes : fonctions amies


• Une fonction amie d'une classe C est une fonction
qui, sans être membre de cette classe, a le droit
d'accéder à tous ses membres, aussi bien publics
que privés.
• Une fonction amie doit être déclarée ou définie
dans la classe qui accorde le droit d'accès,
précédée du mot réservé friend. Cette déclaration
doit être écrite indifféremment parmi les membres
publics ou parmi les membres privés :
53

Classes : fonctions amies


• Fonction extérieure à la classe ayant accès aux
données privées de la classe
• Plusieurs situations d’« amitié »
– Une fonction indépendante, amie d’une classe.
– Une méthode d’une classe, amie d’une autre classe.
– Une fonction amie de plusieurs classes.
– Toutes les méthodes d’une classe amies d’une autre
classe.

54

27
29/01/2019

Classes : fonctions amies

55

Classes : fonctions amies

56

28
29/01/2019

Classe : surcharge d’opérateurs


• En C++, on peut surcharger la plupart des
opérateurs usuels du langage, c’est-à-dire les
reprogrammer pour que, dans un certain
contexte, ils fassent autre chose que ce qu’ils font
d’habitude.
– Opérateurs qu’on peut surcharger en C++ :

57

Classes - résumé
• Exemple de classe :

58

29
29/01/2019

Classes - résumé

59

Classes - résumé

60

30
29/01/2019

Classe : résumé
r1 : allocation statique
class Rectangle
{ main()
private: {
Rectangle r1;
int width;
r1.set(5, 8);
int length;
}
public:
void set(int w, int l); r1
width = 5
int compute_area(); length = 8
};
61

Classe : résumé
r2 est un pointeur sur l’objet Rectangle
class Rectangle
{ main()
{
private: Rectangle r1;
int width; r1.set(5, 8); // notation pointée

int length; Rectangle *r2;


r2 = &r1;
public: r2->set(8,10); // notation fléchée
void set(int w, int l); }

int compute_area(); 5000


r1 r2
6000
}; width = 8
5
length = 10
8 5000
???

62

31
29/01/2019

Classe : résumé
r3 : allocation dynamique
class Rectangle
main()
{
{
private: Rectangle *r3;
r3 = new Rectangle();
int width;
int length; r3->set(80,100); // notation fléchée

public: delete r3;


r3 = NULL;
void set(int w, int l);
}
int compute_area(); r3
6000 5000
}; NULL
5000
???
width = 80
length = 100
63

Vie d’un objet

64

32
29/01/2019

Classes : résumé
• Trois objets de même type ‘Circle’ mais différents
de par leurs champs données (data fields).

65

66

33
29/01/2019

Constructeurs

67

Séparation entre la déclaration et


l’implémentation d’une classe

68

34

Vous aimerez peut-être aussi