Programmation orientée objet
Introduction aux classes et
objets en C++
Vu Pham
Introduction aux classes et objets
Introduction
C++, java sont des langages orientés objet.
Qu'est-ce que ça veut dire?
Les objets sont de nouvelles sortes de variables encore plus
générales que les types dérivés (ou structures).
Leur caractéristique principale: ils acceptent des procédures et
fonctions comme composantes.
A quoi ça sert?
Améliorer la lisibilité d'un code en utilisant des schémas plus
proche du raisonnement humain grâce aux objets.
Développer un code au sein d'un grand projet (plusieurs
développeurs)
47
Introduction aux classes et objets
Objet & classe : définition
Un objet est une entité cohérente rassemblant des
données (partie statique) et des traitements (partie
dynamique) .
Une classe est une classe d'équivalence d'objets. Une
classe est un moule à partir duquel on peut créer des
objets.
Une classe C++ est le prolongement des structures C
(mot-clé struct).
Une classe décrit la Un objet est une
structure interne Instanciation occurrence de sa classe
d'un objet : une instance
48
Introduction aux classes et objets
Objet & classe : présentation
Véhicule Nom de la classe
Matricule : Chaîne
Marque : Chaîne
Puissance : Entier Description des
VitesseMax : Entier attributs ou
VitesseCourante : Entier données membres
CéerUnVehicule()
DétruireUnVéhicule() Description des
Démarrer() méthodes =
Accélerer(Taux: entier) traitements associés
Avancer()
Reculer()
49
Introduction aux classes et objets
Objet & classe : présentation
Véhicule Instanciation Instances
Matricule : Chaîne
Marque : Chaîne Matricule = " 33-A-567"
Marque="Fiat"
Puissance : Entier
Puissance =07
VitesseMax : Entier VitesseMax =200
VitesseCourante : Entier VitesseCourante =80
CéerUnVehicule()
DétruireUnVéhicule() Matricule = "36-A-2337 "
Démarrer() Marque="Renault"
Accélerer(Taux: entier) Puissance =09
Avancer() VitesseMax =240
Reculer() VitesseCourante =60
50
Introduction aux classes et objets
Instanciation
Pour désigner un objet de la classe, on dit aussi une
instance
L'instanciation est le mécanisme de création d'objets à
partir d'une classe.
Ce mécanisme comporte deux phases:
1. allouer de la mémoire pour l'instance;
2. initialiser ses attributs d'instance.
51
Introduction aux classes et objets
Attributs et Méthodes
Attribut ou membre
L’état d’un objet est l ‘ensemble des valeurs de ses attributs. Un
attribut est une propriété de l’objet.
En C++, on dit membre.
Méthode ou fonction membre
Vue de la modélisation objet, une méthode est une opération
que l’on peut effectuer sur un objet.
Vue de la programmation objet, une méthode est une fonction
qui s’applique sur une instance de la classe.
En C++, on dit fonction membre.
52
Introduction aux classes et objets
Encapsulation
L'encapsulation est l'un des grands principes de la POO :
Un objet rassemble en lui même ses données et ses
traitements.
Abstraction de données : la structure d'un objet n'est pas
visible de l'extérieur.
L'objet protège les données et ne les rendant accessibles qu'au
travers des interfaces.
L'interface précise quelles sont les services ( actions )
offerts par l'objet.
53
Introduction aux classes et objets
Encapsulation : Message
L'objet est une boite noire. Le message est le moyen de
formuler une requête à un objet (une demande de
service).
Le message doit contenir:
1. Handle de l'objet : une référence ou un pointeur vers l'objet.
2. Sélecteur de méthode (nom de la méthode).
3. Liste des paramètres.
Exemple : [Link]élerer (2)
Handle Sélecteur de méthode Paramètre
54
Introduction aux classes et objets
Encapsulation : Interface
La liste des messages auxquels est capable de répondre un objet
constitue son interface.
C'est la partie public d'un objet.
En pratique, dans C++, l'interface représente la liste des méthodes
accessibles (publiques) au client de l'objet.
Ampoule
Allumer() Interface
Éteindre()
C'est au programmeur de
Augmenter()
veiller au respect du principe Réduire()
d'encapsulation
55
Introduction aux classes et objets
Les Classes en C++
Syntaxe : de déclaration class Cfraction
d’une classe en C++ {
private :
class NomDelaClasse int num;
{ int den;
[protection1] : public :
…. Cfraction ();
[protection2] : Cfraction (int a, int b);
…… void Saisir();
……… Cfraction AdditionerA (Cfraction F) ;
[protection n] : Cfraction MultiplierPar (Cfraction F) ;
…… void Affiche()
}; ~Cfraction() {} ;
};
[protection] ≡ < public | private | protected >
56
Introduction aux classes et objets
Exemple
Exemple : déclarons une classe « Compte » correspondant à ce
diagramme UML
57
Introduction aux classes et objets
Exemple
58
Introduction aux classes et objets
Les Classes en C++
Protections:
public : les membres publics seront accessibles à l’extérieur de
la classe (section d'interface)
private : les membres privés ne sont accessibles que par les
méthodes membres de la classe
• Pour l’exemple précédent ( la calass Cfraction), une instruction du style
de [Link] dans le main() serait rejetée à la compilation car num est un
membre privé de la classe Cfraction.
protected : les membres protégés sont comme les membres
privés. Mais ils sont aussi accessibles par les méthodes des
classes dérivées (Héritage)
Par défaut les membres d’une classe sont déclarés privés.
59
Introduction aux classes et objets
Définition des méthodes membres
La déclaration d'une classe contient simplement les
prototypes des méthodes de la classe.
Toute méthode définie à l'intérieur de la déclaration de la
classe est considérée comme une fonction inline
Les méthodes membres sont définies à l'extérieur de la
déclaration de la classe ou dans un fichier séparé.
Syntaxe :
Type NomDeLaClasse :: NomFonction(liste arguments)
{
// Corps de la fonction
}
60
Introduction aux classes et objets
Constructeur & Destructeur
Les constructeurs et les destructeurs sont deux types de
méthodes particulières qui sont appelées respectivement
à la création et à la destruction d’un objet.
Il est nécessaire de gérer certaines actions (initialisation)
qui doivent avoir lieu lors de la création d’un objet et de
sa destruction
Par exemple, si l’objet doit contenir des variables
dynamiques, il faut leur réserver de la mémoire à la
création de l’objet. À la destruction de l’objet, il
convient de libérer la mémoire allouée.
61
Introduction aux classes et objets
Constructeur
Les constructeurs se définissent comme une méthode. Ils
doivent :
• porter le même nom que la classe ;
• n'avoir aucun type (pas même le type void).
Conformément au principe de surcharge des fonctions,
une classe peut contenir plusieurs constructeurs.
Les paramètres des constructeurs peuvent avoir des
valeurs par défaut (comme toute fonction en C++).
On appelle constructeur par défaut un constructeur
n'ayant pas de paramètres ou ayant des valeurs par
défaut pour tous ses paramètres:
62
Introduction aux classes et objets
Destructeur
Destructeur : méthode dont le rôle principal est de supprimer de la
mémoire d'un objet.
Un destructeur est appelé implicitement à la fin de la durée de vie
d’un objet, typiquement à la fin du bloc d’instructions dans lequel il
a été défini.
Un destructeur est très rarement appelé explicitement par le
programmeur.
Le destructeur est une méthode qui :
• porte le même nom que la classe précédé du caractère ~ (tilda)
• n'a aucun type (pas même le type void).
• n'accepte aucun argument.
• une classe ne peut posséder qu’un seul destructeur.
63
Introduction aux classes et objets
Destructeur
Si le programmeur ne crée pas lui même un destructeur dans une
classe, le compilateur en générera un par défaut.
Ce dernier remplira tout à fait son rôle, à l’unique condition que la
classe ne possède pas d’attributs de type pointeurs, ou que ses
méthodes n’en utilisent pas.
Sinon, il faudra en créer un afin de libérer l’espace mémoire
occupée par ces pointeurs.
Quand créer un destructeur ?
Quand la classe contient un attribut qui est un pointeur.
Quand on veut que la libération de la mémoire s’accompagne d’une autre
tâche (affichage, modification d’un attribut de classe…).
~Compte() { nbcomptes--; } ;
64
Introduction aux classes et objets
Exemple
Cfraction::Cfraction() // constructeur par défaut
class Cfraction {
{ num = 0;
private : den = 1;
int num; }
int den;
public : Cfraction::Cfraction(int newnum, int
Cfraction (); newden)
Cfraction (int, int); {
void Saisir(); num=newnum;
void Affiche(); den=newden;
~Cfraction() {} ; }
};
65
Introduction aux classes et objets
Exemple
Exemple de déclaration des objets fractions dans la fonction main
Cfraction F; // utilisation du constructeur par défaut;
Cfraction F2(1,2) ; //Appel du constructeur Cfraction(int
// newnum, int newden)
Cfraction *pF ; // pas de constructeur
Cfraction Ftable[5] ;//Appel du constructeur par défaut
// pour chaque élément
pF=new Cfraction ; // utilisation du constructeur par défaut
delete pF; // destructeur
pF = new Cfraction (2,5); //Appel du constructeur
// Cfraction(intnewnum, int newden)
66
Introduction aux classes et objets
Remarques
Les méthodes d’une classe disposent d’un accès direct aux
attributs de cette même classe, c’est pourquoi il n’est pas
nécessaire de passer ces derniers en paramètres pour qu’une
méthode puisse les manipuler.
67
Introduction aux classes et objets
Règles d'utilisation des fichiers .cpp et .h
Pour pouvoir effectivement réutiliser les classes
programmées et les compiler séparément, il est
indispensable de les exploiter proprement et les ranger
dans des fichiers qui portent des noms corrects.
La déclaration d’une classe MaClasse doit être mise dans un
fichier maclasse.h
La définition d’une classe MaClasse doit être mise dans un
fichier [Link]
68
Introduction aux classes et objets
Règles d'utilisation des fichiers .cpp et .h
Pour l’instant, retenir qu’un fichier maclasse.h possède la
structure suivante :
// fichier maclasse.h
#ifndef MACLASSE_H
#define MACLASSE_H
#include ... // includes de classes eventuelles
...
class MaClasse {
...
};
#endif
#ifndef #define et #endif dans le .h pour que le fichier ne soit
effectivement inclus qu’une seule fois lors d’une compilation
69
Introduction aux classes et objets
Règles d'utilisation des fichiers .cpp et .h
Le fichier [Link] possède la structure suivante :
// fichier [Link]
#include "maclasse.h" // include de sa propre classe
#include ... // autres includes optionnels
...
MaClasse : : MaClasse (...) { // definition du constructeur
...
}
MaClasse : :~ MaClasse () { // definition du destructeur
...
}
.. // autres definitions de fonctions membres
70
Introduction aux classes et objets
Règles d'utilisation des fichiers .cpp et .h
L’arborescence du projet ressemble alors à cela :
71
Introduction aux classes et objets
Attributs et méthodes de classe
un attribut de classe est un attribut qui possède la même valeur
pour toutes les instances de la classe,
une méthode de classe est une méthode qui porte sur des attributs
de classe.
Déclaration : les attributs et méthodes de classes se déclarent avec
le préfixe « static ». Ils peuvent être publics ou privés.
attribut de classe
méthode de classe
72
Attributs et méthodes de classe
Exemple
73