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

Post on 13-Sep-2018

227 views 2 download

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

La Programmation Orientee ObjetLes classes

Programmation Orientee Objet – C++ – Cours 1

P. Pesneaupierre.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 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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

La Programmation Orientee ObjetLes 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 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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

La Programmation Orientee ObjetLes 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 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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1

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 pierre.pesneau@math.u-bordeaux1.fr Programmation Orientee Objet – C++ – Cours 1