Académique Documents
Professionnel Documents
Culture Documents
Classes
Classes
Interface de classe
Implantation
Constructeur / destructeur
Hritage / polymorphisme
Donnes membres
Fonctions membres
Ex : un objet vecteur est compos de trois rels et doprations telles que la translation, la norme, le
produit scalaire
Vision interne
Partie prive
Partie publique
Vision externe
Vision
interne
Vision
externe
DeuxRoues
m_tailleRoues
m_nbVitesses
m_couleur
m_poids
Acclrer()
Freiner()
ChangerVitesse()
GetCouleur()
GetPoids()
Nom de la classe
Donnes membres
ou attributs
Fonctions membres
ou mthodes
CompteBancaire
m_numro
m_solde
m_propritaire
Crditer()
Dbiter()
Fermer()
Numro()
Solde()
Propritaire()
Vision
interne
Vision
externe
Notion dhritage
L'hritage est un principe propre la POO qui permet de crer une nouvelle classe
partir d'une classe existante. La classe nouvellement cre, dite classe drive,
contient les attributs et les mthodes de la classe dont elle drive, auxquelles
sajoutent de nouveaux attributs et de nouvelles mthodes propres la classe drive.
Deux roues
Sans moteur
Vlo
Patinette
A moteur
Moto
Scooter
classes drives
ou classes filles
Mobylette
Notion de polymorphisme
Une classe drive peut fournir une nouvelle dfinition dune mthode d'une classe parent car elle peut avoir
besoin de ragir diffremment l'appel de cette mthode. Cette redfinition substituera une mthode une autre :
cest la spcialisation.
La notion de polymorphisme signifie que, la mme opration pouvant se comporter diffremment sur
diffrentes classes de la hirarchie, il est possible d'appeler la mthode d'un objet sans se soucier de son type
intrinsque. Ceci permet de faire abstraction des dtails des classes spcialises d'une famille d'objet, en les
masquant par une interface commune (qui est la classe de base).
DeuxRoues
m_tailleRoues
m_couleur
m_poids
m_nbVitesses
virtual Acclrer()
virtual Freiner()
virtual ChangerVitesse()
GetCouleur()
GetPoids()
Velo
m_typePedale
GetTypePedale()
virtual Acclrer()
virtual Freiner()
virtual ChangerVitesse()
Moto
m_moteur
m_boiteVitesse
FairePlein()
AllumerClignotant()
virtual Acclrer()
virtual Freiner()
virtual ChangerVitesse()
Avantages :
Programmes plus faciles maintenir
Si on dcide de modifier la structure des donnes dans un programme squentiel,
presque tout le code est rcrire
Inconvnients :
Le programme rsultant peut tre moins efficace (en termes de taille mmoire et
de rapidit)
Classe : interface
Cest la description de la structure interne de la classe
class Ellipse
{
protected :
float m_cX, m_cY;
float m_a, m_b;
Vision
interne
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
Vision
externe
};
NB : dans cet exemple, on a choisi de reprsenter l'ellipse en interne la classe par les coordonnes de
son centre (cX, cY), par son grand axe a et par son petit axe b.
Classe : implantation
Cest la dfinition des fonctions associes
Interface de la classe Ellipse
class Ellipse
{
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
};
Oprateur
de porte
Classe : instanciation
Interface de la classe Ellipse
class Ellipse
{
protected :
float m_cX, m_cY;
float m_r;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
};
Implantation de la classe Ellipse
void Ellipse::deplace(float dx, float dy)
{
m_cX += dx;
m_cY += dy;
}
void Ellipse::zoom(float z)
{
m_a *= z;
m_b *= z;
}
float Ellipse::surface()
{
return 3.14 * m_a * m_b / 4.;
}
int main()
{
Ellipse e;
Accs aux
membres
par le "."
Instanciation statique de
lobjet e, e tant une
variable de type Ellipse
e.deplace(50, 0);
float s = e.surface();
e.zoom(1.5);
e.m_cX = 30;
e. deplace(20);
}
// Impossible
// Impossible
Par convention, l'extension d'un fichier contenant du code C est .cpp, .c++ , .cc , .cxx ou .C
L'extension d'un fichier de dclarations, appel header, est .h
Par convention, on cre un fichier .cpp et un .h par classe, chaque fichier ayant le nom de la classe en minuscule.
ellipse.h
class Ellipse
{
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
};
ellipse.cpp
main.cpp
#include ellipse.h
#include "ellipse.h"
int main()
{
Ellipse e;
e.deplace(50, 0);
float s = e.surface();
e.zoom(1.5);
return 0;
}
Par convention, les noms de classe commencent par une majuscule, les donnes membres par _ ou m_,
les fonctions membres par une minuscule.
Constructeurs de classe
Le constructeur est une fonction membre qui sert initialiser les donnes membres de
lobjet
Systmatiquement appel quand un objet est instanci.
Na pas de type de retour
Porte le nom de lobjet
Constructeurs particuliers :
constructeur par dfaut
Ne contient aucun argument
Automatiquement gnr si aucun constructeur nest dfini
A dfinir explicitement dans le cas contraire
constructeur de copie
Contient comme argument un objet du mme type
Sert crer des clones dobjets
Automatiquement gnr par le compilateur (copie membre membre) mais pas
toujours satisfaisant
ellipse.cpp
main.cpp
class Ellipse
{
public :
Ellipse(); // Constructeur par dfaut
Ellipse(float x, float y, float a, float b);
Ellipse(const Ellipse & e);
#includeellipse.h
#include "ellipse.h"
Ellipse::Ellipse()
{
m_cX = m_ cY = 0;
m_a = m_b = 1;
}
int main()
{
Ellipse e1;
Ellipse e2(2.5, 6.5, 12, 15);
Ellipse e3(e1);
// e3 est un clone de e1
Ellipse e4 = e1;
// e4 est un clone de e1
return 0;
}
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z) ;
float surface() ;
};
Destructeur de classe
ellipse.h
class Ellipse
{
public :
Ellipse(); // Constructeur par dfaut
Ellipse (float x, float y, float a, float b);
Ellipse(const Ellipse & e);
~Ellipse(); // Destructeur
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
};
ellipse.cpp
prog.cpp
#includeellipse.h
#include "ellipse.h"
Ellipse::Ellipse()
{
m_cX = m_ cY = 0;
m_a = m_b = 1;
}
int main()
{
Ellipse e;
Ellipse* pE = new Ellipse(2.5, 6.5, 12, 15);
delete pE;
etc
return 0;
Ellipse::~ Ellipse()
{
// Libration des ressources
}
void Ellipse::deplace(float dx, float dy)
{
m_cX += dx; m_cY += dy;
}
etc
Hritage
Lhritage permet de spcialiser une classe en dfinissant une relation de type est une sorte de .
Un cercle est un spcialisation d'une ellipse, il en possde les proprits plus d'autres qui lui sont spcifiques.
On drive donc la classe Cercle de la classe Ellipse.
Forme
Ellipse
Cercle
Rectangle
Carre
Hritage
Lhritage permet de spcialiser une classe en dfinissant une relation de type est une sorte de .
Un cercle est un spcialisation d'une ellipse, il en possde les proprits plus d'autres qui lui sont spcifiques.
On drive donc la classe Cercle de la classe Ellipse.
ellipse.h
cercle.h
prog.cpp
class Ellipse
{
public :
Ellipse();
Ellipse (float x, float y, float a, float b);
Ellipse(const Ellipse & e);
~Ellipse();
#include ellipse.h
#include "cercle.h"
int main()
{
Cercle c(5, 5, 15);
c. affiche();
return 0;
}
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
Autorise la
virtual void affiche();
redfinition de
};
la fonction dans
les classes
drives
ellipse.cpp
#include <iostream.h>
void Ellipse::affiche()
{
std::cout << "Ellipse de grand axe " << m_a;
std ::cout << " et de petitt axe " << m_b << "\n";
}
cercle.cpp
#include <iostream.h>
#include cercle.h
Polymorphisme
Un objet hritant une mthode d'une classe parente peut ragir de faon diffrente l'appel de cette mthode.
ellipse.h
cercle.h
class Ellipse
{
public :
Ellipse();
Ellipse (float x, float y, float a, float b);
Ellipse(const Ellipse & e);
~Ellipse();
#include ellipse.h
protected :
float m_cX, m_cY;
float m_a, m_b;
public :
void deplace(float dx, float dy);
void zoom(float z);
float surface();
virtual void affiche();
};
Ellipse *p1;
p1 = new Ellipse;
p1 ->affiche();
#include cercle.h
Cercle::Cercle() : public Ellipse()
{
}
#include <iostream.h>
void Ellipse::affiche()
{
std::cout << "Ellipse de grand axe " << m_a;
std ::cout << " et de petit axe " << m_b << "\n";
}
void Cercle::affiche()
{
std::cout << "Cercle de rayon ";
std::cout << m_a / 2 << "\n";
}
cercle.cpp
ellipse.cpp
main.cpp
Ellipse *p2;
p2 = new Cercle;
p2->affiche();
return 0;
}
Vocabulaire
Variable : associe un nom (un symbole) une valeur qui peut ventuellement varier au cours du
temps ; une variable est dun type donn, dfini une fois pour toute (type prdfini dans le langage
ou cr par le dveloppeur).
Encapsulation : regroupement des variables et des fonctions au sein d'une mme entit appele
classe .
Classe : prototype qui dfinit des attributs et des mthodes communes tous les objets d'une certaine
nature.
Interface de classe : description de la structure interne de la classe incluant une liste des donnes
membres et le prototype des fonctions membres ; dans un .h .
Implantation de classe : dfinition (code) des fonctions dclares dans linterface de classe ; dans
un .cpp .
Instanciation dun objet : permet de crer un objet dun type donn ; analogue une dclaration de
variable.
Hritage : permet de dfinir une hirarchie de classe, chaque classe fille hritant des mthodes et
des donnes de son/ses antcdent(s).
Polymorphisme : deux objets hritant une mme mthode d'une classe parente, peuvent ragir de
faon diffrente l'appel de cette mthode et, cette fin, redfinir la mthode. Il est ensuite possible
d'appeler la mthode d'un objet sans se soucier de son type intrinsque.