La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation...

22
La Programmation Orient´ ee Objet Les classes Programmation Orient´ ee Objet – C++ – Cours 1 P. Pesneau [email protected] Universit´ e Bordeaux 1 at A33 - Bur 265 P. Pesneau [email protected] Programmation Orient´ ee Objet – C++ – Cours 1

Transcript of La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation...

Page 1: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Programmation Orientee Objet – C++ – Cours 1

P. [email protected]

Universite Bordeaux 1

Bat A33 - Bur 265

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 2: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes 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 exercicescorriges”. Editions Eyrolles, 2009.

B. Stroustrup - “Le langage C++”. Editions Pearson Education,2004.

C. Delannoy - “Programmer en langage C++”. Editions Eyrolles,2011.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 3: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Sommaire

1 La Programmation Orientee Objet

2 Les classes

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 4: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Problematique de la programmation

Concevoir des logiciels avec des exigences de qualite :

Exactitude : aptitude d’un logiciel a fournir les resultatsvoulus dans des conditions normales d’utilisation.

Robustesse : aptitude a bien reagir quand on s’ecarte desconditions normales d’utilisation.

Extensibilite : facilite avec laquelle un programme pourra etreadapte pour satisfaire a l’evolution de la demande.

Reutilisabilite : possibilite d’utiliser certaines parties du logicielpour resoudre d’autres problemes.

Portabilite : facilite avec laquelle on peut exploiter un memelogiciel dans differentes implementations.

Efficience : temps d’execution, taille memoire ...

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 5: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Programmation structuree

Repose sur l”’equation de Writh” :

Algorithmes + Structures de donnees = Programmes

Les algorithmes etant dissocies des donnees, il est necessaired’etablir le lien entre eux lors de la conception du programme.La modification du logiciel par la remise en cause de l’un deselements necessite souvent la remise en cause de l’ensemble deselements.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 6: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Programmation Orientee Objet

Repose sur le concept d’objet qui est une association de donnees etde procedures (ou methodes) agissant sur ces donnees :

Methodes + Donnees = Objet

Un programme est alors constitue d’un ensemble d’objetscommuniquant par des requetes (ou messages).La POO permet une modelisation plus naturelle des systemesconsideres. et propose un ensemble de concepts independants detout langage de programmation facilitant le representations desobjets :

du monde reel (personne, voiture, ...).

d’un domaine particulier (vecteur, matrice, complexe, ...)

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 7: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Concept objet

Un objet est caraxterise par

un etat : ensemble de valeurs, les donnees.

un comportement : ensemble d’operations realisables.

Ex : un vehicule

Un objet :

connaıt ses caracteristiques.

sait comment effectuer les operations qui le concernent.

reagit a des messages lui demandant d’effectuer un certaintraitement.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 8: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Concept de classe

C’est une generalisation de la notion de type.

C’est la description d’un ensemble d’objet ayant une structurede donnees commune et disposant des meme methodes.

Une classe decrit le domaine de definition d’un ensembled’objets.

Chaque objet est une instance d’une classe (mecanismed’instanciation).

Une classe est decrite par :

Le type des donnees representees (declaration des attributs).

Le prototype (ou interface) des methodes accedant auxattributs.

La realisation (ou definition) des methodes.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 9: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Autres concepts de la POO

Modularite : decomposition d’un systeme en modulescoherents et faiblement couples (notions de classes etd’objets)

Abstraction des donnees : ignorer les details pour ne conserverqu’une notion generale.

Encapsulation des donnees : on n’agit pas directement sur lesdonnees d’un objet. On interagit par l’intermediaire de sesmethodes. Cela facilite la maintenance et la reutilisation.

Heritage : permet de definir une nouvelle classe a partir d’uneclasse existante a laquelle on ajoute de nouvelles donnees etmethodes. (Specialisation et reutilisation.)

Polymorphisme : donner plusieurs formes a une meme classed’objets en fonction des donnees.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 10: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Le C++

Sur-ensemble du langage C offrant les possibilites de la POO.Ce n’est 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 d’un programme :

declaration des classes dans des fichiers .hpp (de preference unfichier par classe).

realisation des methodes de classes dans des fichiers .cpp (depreference un par classe).

implementation du programme principal dans un fichier .cpp.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 11: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Sommaire

1 La Programmation Orientee Objet

2 Les classes

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 12: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Introduction

Elles generalisent les structures en C.Elles constituent un modele ou type abstrait permettant dedeclarer des instances (objets) ayant les caracteristiques de laclasse.Une classe contient :

des donnees-membres ou attributs.

des fonctions-membres ou methodes.

Chaque membre se voit definir un droit d’acces par l’un desmots-cles public, private ou protected.Seuls les membres publics sont accessible de l’exterieur de laclasse. Ceci renforce l’encapsulation des donnees.Les membres publics constituent l’interface pour l’utilisateur.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 13: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Avantages

Seule l’interface a besoin d’etre consideree par l’utilisateur. Lesdetails techniques d’implementation sont dissimules dans lesrealisations des methodes. C’est le principe d’abstraction.

Le programme utilisateur ne peut pas acceder directement auxmembres prives ou proteges d’un objet. Ce sont les principes demasquage de l’information et d’encapsulation des donnees.

Il est possible de modifier l’implementation d’une methode sansrepercution sur le texte des programmes utilisateurs (a conditionde respecter la meme interface). C’est le principe de separation del’interface er de la realisation. Il facilite l’evolutivite d’un logiciel.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 14: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Squelette d’une 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 [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 15: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes 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 [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 16: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Les constructeurs

Avant de pouvoir etre utilise, un objet doit etre construit. Cetteoperation est effectuee par des methodes specifiques : lesconstructeurs. 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 n’est declare, un constructeur pardefaut, sans parametres, est automatiquement cree. Ceconstructeur fera appel aux constructeurs par defaut desattributs qui composent l’objet.

Le constructeur de copie est un constructeur qui prend enparametre un objet de la meme classe et qui construit une copie decet objet. Si le constructeur de copie n’est pas declare, unconstructeur de copie par defaut est cree qui fera appel auconstructeur de copie de chacun des attributs qui composentl’objet.P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 17: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes 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 [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 18: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Le destructeur

Lorsqu’un objet devient inutile, il doit etre detruit. Cette operationest realisee par le destructeur.

Caracteristiques :

Il est unique.

Son nom est le nom de la classe precede par un .

Il n’a pas de parametre.

Il ne retourne aucun resultat, pas meme void.

Il doit restituer la place memoire allouee dynamiquement parl’objet.

Un destructeur n’est jamais appele explicitement. Il est executeautomatiquement lorsqu’un objet atteint la fin de la portee de sadeclaration, ou comme consequence d’un ordre delete.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 19: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes 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 [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 20: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes 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 d’un pointeur sur un Point

pt1 = new Point; // Allocation dynamique - Const. par defaut

Point * pt2; // Declaration d’un 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 [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 21: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Realisation des fonctions-membres

On ecrit generalement les fonctions-membres en dehors de la classedans un fichier .cpp. On utilise alors l’operateur :: de realisationde domaine pour prefixer le nom de la classe au nom de lamethode.

A l’interieur de la fonction-membre, on travaille toujours pardefaut sur l’instance “acteur” courante (celui-ci correspond al’objet sur lequel on a appele la methode). Les membres (attributset methodes) de cet objet sont accessibles directement par leurnom, sans prefixe. Les membres des autres objets de la memeclasse, sont accessible par la notation pointee.

Toute fonction-membre possede un argument implicite note thisqui est un pointeur sur l’instance “acteur” courante.

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1

Page 22: La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation Orient´ee Objet – C++ – Cours 1 P. Pesneau pierre.pesneau@math.u-bordeaux1.fr

La Programmation Orientee ObjetLes classes

Exemple : la classe Point

Fichier Point.cpp :

#include "Point.hpp"

Point::Point(){

coord_x = 0;

coord_y = 0;

}

Point::Point(const in & x, const int & y):

coord_x(x),coord_y(y){

}

Point::Point(const Point & p){

coord_x = p.coord_x;

coord_y = p.coord_y;

}

Point::~Point(){}

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

coord_x = x;

coord_y = y;

}

void Point::Deplacer(const int & dx, const int & dy){

coord_x += dx; // coord_x = coord_x + dx;

coord_y += dy; // coord_y = coord_y + dy;

}

void Point::Afficher(){

cout << "x = " << coord_x << " y = " << coord_y << endl;

}

P. Pesneau [email protected] Programmation Orientee Objet – C++ – Cours 1