La Programmation Orient´ee Objet Les classesppesneau/cours/cpp/C++_Cours1.pdf · Programmation...
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
Universite Bordeaux 1
Bat A33 - Bur 265
P. Pesneau [email protected] 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 [email protected] Programmation Orientee Objet – C++ – Cours 1
La Programmation Orientee ObjetLes classes
Sommaire
1 La Programmation Orientee Objet
2 Les classes
P. Pesneau [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] Programmation Orientee Objet – C++ – Cours 1
La Programmation Orientee ObjetLes classes
Sommaire
1 La Programmation Orientee Objet
2 Les classes
P. Pesneau [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] 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 [email protected] Programmation Orientee Objet – C++ – Cours 1