Vous êtes sur la page 1sur 22

La Programmation Orientee Objet

Les classes

Programmation Orientee Objet C++ Cours 1

P. Pesneau
pierre.pesneau@math.u-bordeaux1.fr
Universite Bordeaux 1
Bat A33 - Bur 265

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Ouvrages de reference

B. W. Kernighan et D. M. Ritchie - Le langage C : Norme ANSI.


Editions Dunod, 2004.
C. Delannoy - Programmer en langage C : Cours et exercices
corriges. Editions Eyrolles, 2009.
B. Stroustrup - Le langage C++. Editions Pearson Education,
2004.
C. Delannoy - Programmer en langage C++. Editions Eyrolles,
2011.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Sommaire

1 La Programmation Orientee Objet

2 Les classes

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Problematique de la programmation

Concevoir des logiciels avec des exigences de qualite :


Exactitude : aptitude dun logiciel a fournir les resultats
voulus dans des conditions normales dutilisation.
Robustesse : aptitude a bien reagir quand on secarte des
conditions normales dutilisation.
Extensibilite : facilite avec laquelle un programme pourra etre
adapte pour satisfaire a levolution de la demande.
Reutilisabilite : possibilite dutiliser certaines parties du logiciel
pour resoudre dautres problemes.
Portabilite : facilite avec laquelle on peut exploiter un meme
logiciel dans differentes implementations.
Efficience : temps dexecution, taille memoire ...

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Programmation structuree

Repose sur lequation de Writh :

Algorithmes + Structures de donnees = Programmes

Les algorithmes etant dissocies des donnees, il est necessaire


detablir le lien entre eux lors de la conception du programme.
La modification du logiciel par la remise en cause de lun des
elements necessite souvent la remise en cause de lensemble des
elements.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Programmation Orientee Objet

Repose sur le concept dobjet qui est une association de donnees et


de procedures (ou methodes) agissant sur ces donnees :

Methodes + Donnees = Objet

Un programme est alors constitue dun ensemble dobjets


communiquant par des requetes (ou messages).
La POO permet une modelisation plus naturelle des systemes
consideres. et propose un ensemble de concepts independants de
tout langage de programmation facilitant le representations des
objets :
du monde reel (personne, voiture, ...).
dun domaine particulier (vecteur, matrice, complexe, ...)

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Concept objet

Un objet est caraxterise par


un etat : ensemble de valeurs, les donnees.
un comportement : ensemble doperations realisables.
Ex : un vehicule
Un objet :
connat ses caracteristiques.
sait comment effectuer les operations qui le concernent.
reagit a des messages lui demandant deffectuer un certain
traitement.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Concept de classe

Cest une generalisation de la notion de type.


Cest la description dun ensemble dobjet ayant une structure
de donnees commune et disposant des meme methodes.
Une classe decrit le domaine de definition dun ensemble
dobjets.
Chaque objet est une instance dune classe (mecanisme
dinstanciation).
Une classe est decrite par :
Le type des donnees representees (declaration des attributs).
Le prototype (ou interface) des methodes accedant aux
attributs.
La realisation (ou definition) des methodes.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Autres concepts de la POO

Modularite : decomposition dun systeme en modules


coherents et faiblement couples (notions de classes et
dobjets)
Abstraction des donnees : ignorer les details pour ne conserver
quune notion generale.
Encapsulation des donnees : on nagit pas directement sur les
donnees dun objet. On interagit par lintermediaire de ses
methodes. Cela facilite la maintenance et la reutilisation.
Heritage : permet de definir une nouvelle classe a partir dune
classe existante a laquelle on ajoute de nouvelles donnees et
methodes. (Specialisation et reutilisation.)
Polymorphisme : donner plusieurs formes a une meme classe
dobjets en fonction des donnees.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Le C++
Sur-ensemble du langage C offrant les possibilites de la POO.
Ce nest pas un langage de POO pure.
C++ = C E + S + P avec :
C : le C norme ANSI.
E : les ecarts de C++ avec la norme ANSI.
S : les specificites du C++ qui ne sont pas de la POO.
P : les possibilites de la POO.
Structuration dun programme :
declaration des classes dans des fichiers .hpp (de preference un
fichier par classe).
realisation des methodes de classes dans des fichiers .cpp (de
preference un par classe).
implementation du programme principal dans un fichier .cpp.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Sommaire

1 La Programmation Orientee Objet

2 Les classes

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Introduction

Elles generalisent les structures en C.


Elles constituent un modele ou type abstrait permettant de
declarer des instances (objets) ayant les caracteristiques de la
classe.
Une classe contient :
des donnees-membres ou attributs.
des fonctions-membres ou methodes.
Chaque membre se voit definir un droit dacces par lun des
mots-cles public, private ou protected.
Seuls les membres publics sont accessible de lexterieur de la
classe. Ceci renforce lencapsulation des donnees.
Les membres publics constituent linterface pour lutilisateur.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Avantages

Seule linterface a besoin detre consideree par lutilisateur. Les


details techniques dimplementation sont dissimules dans les
realisations des methodes. Cest le principe dabstraction.

Le programme utilisateur ne peut pas acceder directement aux


membres prives ou proteges dun objet. Ce sont les principes de
masquage de linformation et dencapsulation des donnees.

Il est possible de modifier limplementation dune methode sans


repercution sur le texte des programmes utilisateurs (a condition
de respecter la meme interface). Cest le principe de separation de
linterface er de la realisation. Il facilite levolutivite dun logiciel.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Squelette dune classe

class Nom_class {
private:

// Declaration des attributs


// et methodes prives

protected:

// Declaration des attributs


// et methodes proteges

public:

// Declaration des attributs


// et methodes publics

};

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Exemple : la classe Point

Fichier Point.hpp :
class Point {
private:

int coord_x;
int coord_y;

public:

void SetCoord(const int & x, const int & y);


void Deplacer(const int & dx, const int & dy);
void Afficher() const;

};

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Les constructeurs
Avant de pouvoir etre utilise, un objet doit etre construit. Cette
operation est effectuee par des methodes specifiques : les
constructeurs. On peut en avoir plusieurs pour une meme classe.
Ils portent toujours le nom de la classe.
Ils ne retournent aucun resultat, pas meme void.
Si aucun constructeur nest declare, un constructeur par
defaut, sans parametres, est automatiquement cree. Ce
constructeur fera appel aux constructeurs par defaut des
attributs qui composent lobjet.
Le constructeur de copie est un constructeur qui prend en
parametre un objet de la meme classe et qui construit une copie de
cet objet. Si le constructeur de copie nest pas declare, un
constructeur de copie par defaut est cree qui fera appel au
constructeur de copie de chacun des attributs qui composent
lobjet.
P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1
La Programmation Orientee Objet
Les classes

Exemple : la classe Point

Fichier Point.hpp :
class Point {
private:

int coord_x;
int coord_y;

public:

Point();
Point(const in & x, const int & y);
Point(const Point & p);
void SetCoord(const int & x, const int & y);
void Deplacer(const int & dx, const int & dy);
void Afficher() const;

};

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Le destructeur

Lorsquun objet devient inutile, il doit etre detruit. Cette operation


est realisee par le destructeur.

Caracteristiques :
Il est unique.
Son nom est le nom de la classe precede par un .
Il na pas de parametre.
Il ne retourne aucun resultat, pas meme void.
Il doit restituer la place memoire allouee dynamiquement par
lobjet.

Un destructeur nest jamais appele explicitement. Il est execute


automatiquement lorsquun objet atteint la fin de la portee de sa
declaration, ou comme consequence dun ordre delete.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Exemple : la classe Point

Fichier Point.hpp :
class Point {
private:

int coord_x;
int coord_y;

public:

Point();
Point(const in & x, const int & y);
Point(const Point & p);
~Point();
void SetCoord(const int & x, const int & y);
void Deplacer(const int & dx, const int & dy);
void Afficher() const;

};

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Utilisation des objets

#include "Point.hpp"

int main(){
Point p1; // Constructeur par defaut
Point p2(5,3); // Constructeur avec parametre
Point p3(p1); // Constructeur de copie
Point p4 = p2; // Constructeur de copie

p2.Afficher(); // Affiche le point p2


p1.SetCoord(7,2); // Modifie les coordonnees de p1

Point * pt1; // Declaration dun pointeur sur un Point


pt1 = new Point; // Allocation dynamique - Const. par defaut
Point * pt2; // Declaration dun pointeur sur un Point
pt2 = new Point(3,1) // Allocation dynamique - Const. avec param

(*pt1).Afficher() // Affiche le point pointe par pt1;


pt1->Afficher() // Idem instruction precedente

delete pt1; // Appel destructeur pour *pt1


delete pt2; // Appel destructeur pour *pt2

return 0;
} // Appel destructeur pour p1, p2, p3 et p4

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Realisation des fonctions-membres

On ecrit generalement les fonctions-membres en dehors de la classe


dans un fichier .cpp. On utilise alors loperateur :: de realisation
de domaine pour prefixer le nom de la classe au nom de la
methode.

A linterieur de la fonction-membre, on travaille toujours par


defaut sur linstance acteur courante (celui-ci correspond a
lobjet sur lequel on a appele la methode). Les membres (attributs
et methodes) de cet objet sont accessibles directement par leur
nom, sans prefixe. Les membres des autres objets de la meme
classe, sont accessible par la notation pointee.

Toute fonction-membre possede un argument implicite note this


qui est un pointeur sur linstance acteur courante.

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1


La Programmation Orientee Objet
Les classes

Exemple : la classe Point

Fichier Point.cpp :

#include "Point.hpp" Point::~Point(){}

Point::Point(){ void Point::SetCoord(const int & x, const int & y){


coord_x = 0; coord_x = x;
coord_y = 0; coord_y = y;
} }

Point::Point(const in & x, const int & y): void Point::Deplacer(const int & dx, const int & dy){
coord_x(x),coord_y(y){ coord_x += dx; // coord_x = coord_x + dx;
} coord_y += dy; // coord_y = coord_y + dy;
}
Point::Point(const Point & p){
coord_x = p.coord_x; void Point::Afficher(){
coord_y = p.coord_y; cout << "x = " << coord_x << " y = " << coord_y << endl;
} }

P. Pesneau pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet C++ Cours 1

Vous aimerez peut-être aussi