Académique Documents
Professionnel Documents
Culture Documents
1. Definition :
Objet :
Contient des : - Donnes
- Mthodes : Procdure ou fonctions permettant de manipuler un objet.
Classe :
- Modle d'objet qui dcrit l'architecture des objets cres partir d'une classe.
- Une classe possde un nom significatif et unique dans l'espace de nom auquel elle appartient.
- Les donnes ports par les objets d'une classe sont contenus dans des champs ou proprits
- Une classe donne la description des proprits ou champs que l'on appelle aussi attributs ou
membres.
- Les methodes sont des fonctions ou procdures dfinies dans une classe et servent manipuler des
objets de la classe.
- Les methodes sont aussi des membres de la classe.
Une classe est constitu de membres : Proprits ou methodes.
Attention : Les classes dfinissent les proprit ou champs alors que les objets vont porter les
valeurs de ces proprits.
Methodes
Espace de nom :
A l'interieur d'un espace de nom se trouve des fonctions, methodes, objets, classe ...
Exemple : std (espace de nom standart ou librairie standart)
Pour appeller l'objet cout de l'espace de nom standart :
std::cout << "Bonjour";
std::ofstream nomfichier("toto.txt");
nonfichier << "Bonjour";
A partir d'une classe on peut crer des objets qui ont tous les memes proprits et les memes
methodes : On parle d'instanciation de classe ou d'instance :
En C++ :
(1) Personnes p1 Cration de l'objet p1 de type Personne sous la forme d'une
variable.
(2) Personnes *p = new Persone; On cr un ojetde Personnes avec l'oprateur
new et on stocke son adresse dans une variable pointeur ou variable de reference de type adresse
d'une Personne.
En Java :
(2) Personnes p = new Personnes On cr un objet de type de Personne et on stocke sa
rfrence dans la variable p.
En Php :
(2) $p = new Persnnes;
En JS :
(2) var p = new Personnes();
Represenation UML :
(1) (2)
P1 ::Personne P ::Personne *
Meyer
Alain
32
::Personne
Meyer
Alain
32
Proprit dynamaique
Par dfaut une proprit est dynamaique : c--d les valeurs sont stocks dans les objet : 1 valeur par
objet.
Proprit statique
Pour une proprit statique la valeur est porte par la classe et non par les objets. Tous les objets
d'une mme classe peuvent accder aux proprits statiques et partagent les mmes valeurs.
En gnral les proprits statiques sont signals par un mot cl : static
Les proprits statiques sont comparables une variable globale appartenant un espace de nom
identique au nom de la classe.
Exemple d'une proprit statique pour compter des objets de type Personnes.
- On cr dans la classe Personne la proprit statique entire nbpersonne que l'on initialise 0.
- Dans le constructeur de la classe Personn on incrmente la proprit nbpersonnes chaque fois
que l'on cr une personne
- Dans le destructeur de la classe Personnes on decremente la propriet nbpersonnes chaque fois
que l'on detruit une personne.
personnes.h
class Personnes
{
public :
string nom;
string prenom;
int age;
static int nbpersonnes; Proprit statique
Personnes(); constructeur
~Personnes(); destructeur
}
personnes.cpp
#include personne.h Inclue la definition de la classe
Personnes::Personnes() Constructeur
{
nbpersonnes++; Decremente nbpersonnes
}
Personnes::~Personnes() Destructeur
{
nbpersonnes--; Decremente nbpersonnes
}
Methodes dynamique :
Par dfaut une methode est dynamique, c'est dire qu'on l'appelle partir d'un objet pour le
manipuler.
Syntaxe :
En C++ : variable objet , Java, JS, CSharp
objet.methode( ... )
En C++ : avec un pointeur, Php :
objet -> methode( ... )
Remarque : En general objet est une reference une adresse d'un objet.
A l'interieur de la methode dynamique on accde directement aux valeurs de l'objet ayant servi
l'appel de celle i.
Syntaxe :
Java C++ :
proprit
Java, JS, CSharp
this.proprit
C++ :
this -> proprit
Php :
$this -> proprits
Exemple de la methode affiche() pour la classe Personnes.
C++ : p.affiche(); p->affiche();
void Personne::affiche()
{
cout << nom << " " << prenom;
}
php :
class Personnes
{
....
function affiche()
{
echo( $this-> nom." ".$this->prenom;
}
}
JS:
Personnes.prototype =
{
affiche: function()
{
document.write( this.nom + " " + this.prenom);
}
}
Methode statique :
- Une methode statique est en fait une procedure ou fonction classique mais appartient une classe.
- Une mthode statique permet surtout d'accder aux proprits statique de la classe.
- Contraitemen aux methodes dynamiques, une methode statique ne necessite pas d'objet pour
l'appel en revanche on precise la nom de la classe.
Syntaxe d'appel :
C++, Php :
classe::methode( ... )
JS :
classe.prototype.methode( ... )
Membre priv (Notation UML - ): N'est accessible que de l'interieur d'une mthode de la classe de
l'objet : Cas 1
Membre protg (Notation UML # ): N'est accsible que de l'interieur d'une methode de la classe ou
d'une classe parent de l'objet : Cas 2 + 1
Membre publique (Notation UML + ): Est accessible de partout : Cas 2 + 3 + 1
On dfinit le statut priv, publique, ou protg par des mots cls du langage :
Application : Personnages
nom
prenom
position
image
+static onloadImage()
#dessine
Etat 1
Succession de changement
Etat 2
de valeur de ses proprits
Etat 3
Remarque : Cette mthode coute des traitements en plus par l'utilisation d'un compteur de
reference qui va s'incrment ds qu'une variable pointe vers cette objet et se decrementer
ds qu'une variable ne pointe plus vers l'objet.
A B
Un objet qui fait refrence un autre objet qui lui mme fait reference un ce mme objet.
Dans ce cas, mme si les variables faisant reference ces objets sont tous mise jour, les objets ne
seront pas dtruit.
C++, Java :
Methode sans type et ayant le mme nom que la classe. Supporte le polymorphisme.
class Personnes
{
Personne();
}
Php :
Ne supporte pas le polymorphisme.
.... construct(....)
Dans le cas du polymorphisme on peut definir plusieurs constructeurs diffrencis par leur chane
argumentaire.
class Personnes
{
Personne();
Personnes(string prenom, string nom);
}
Point a(100,200);
Point b = a;
Les valeurs des octets de a
b::Point sont copies dans ceux de b
0
0 b::Point
100
200
Exemple : Personnages avec un objets qui fait reference un autre objet
class Personnage
{
public :
String prenom;
Point * position; Rfrence un autre objet
Personnage(string prenom-, int x-, int y-)
{
prenom = prenom-;
position = new Point(x-, y-);
}
~Personnage()
{
if( position != 0) delete position;
}
Personnage()
{
position = new Point;
}
}
a::Personnage b::Personnage
Toto Toto
Point Point
10 0 L'objet Point cr lors de la creation de
20 0 b n'est pas point par b et est donc
perdu => fuite de mmoire
Mais lors de la fin d'execution du programme et la suppression des objets a et b (d'abord b puis a
dans l'ordre inverse de creation), l'objet b sera supprim ainsi que l'objet Point. Lorsque l'objet a
sera supprim le programme tentera de detruire l'objet Point qui aura dk t dtruit => Plantage.
Pour viter ce problme on va crer un constructeur de copie pour effectuer une copie intelligente
de a :
Personnage( const Personnage& p)
{
prenom = p.prenom
position = new Point(p.position->x, p.position->y);
}
Remarque :
On peut crer l'objet b, copie de a avec les 2 syntaxes suivantes :
Personnage b =a;
Personnage b(a);
}
void main( ... )
{
Personnage a("toto", 10, 20);
titi( a );
}
Au sortir de la procdure titi
Destructeur
Methode execute automatiquement a la suppression d'un objet.
Permettre de liberer les ressources utilises par un objet.
Il n'y a qu'un seul destructeur par classe.
C++ : ~Nomdelaclasse()
Java : finalize()
Php : _ _ destruct()
<?php
$a = new Personnages("titi", 10, 20 )
}
void maprocdure( int, float)
{
}
void maprocdure( string )
{
}
On a la mme chose pour les mthodes sauf pour le destructeur.
class Personnage
{
.....
void setPosition( int x, int y )
{
position -> x = x;
position -> y = y;
}
void setPosition( Point p )
{
position -> x = p.x; Ou egalement not :
position -> x = p.x; *position = p
}
}
Surcharge d'oprateur :
Un oprateur est un symbole amenant realiser une operation avec 1 ou plusieurs oprande, le tout
produisent un resultat.
Informatiquement un oprateur unaire est assimile une fonction ayant 1 argument, l'oprande ou
une methode sans argument.
Exemple :
fonction surchargeant l'operateur : Code quivalent :
int operator !( int a )
{ while( a == 0)
int r=1; {
while( a ) r * = a--; r=r*a;
return r ; a -- ;
} }
x
N
M
0 y
OP = OM + ON
Point OM ( 2 , 4 )
Point ON (1 , 5)
Point OP ?
OP = OM + ON
OM.+(ON)
Exemple : Matrice
M 0 1 2 3
Class Matrice 4 x 4 4 5 6 7
{ 8 9 10 11
12 13 14 15
private :
double valeurs [ 16 ]; +
public : N
//Constructeur
Matrice4x4()
{
for( int i=a; i<16; valeurs[i] = 0.0;
} R
//Matrice resultat :
Surcharge de l'operateur [ ] :
double & operateur [ ] (int i ) Matrice4x4 M;
{ M(7)=12.2;
return valeur[ i ]; On recupere
} l'adresse pour
utiliser l'operateur [
] en lecture +ecr
Surcharge :
ostream& operateur <<( ostream & out , Matrice4x4 M;
Matrice4x4& m) cout << M << 12;
{ f << M << ....
for( int i=0; i <16; i++) out << m[i] << ' ';
return out;
}
Un objet cr partir de C, pour laquelle a1 et b1 sont redefinis contient l'union de tous les attributs
de A, B et C.
<Mettre photo Iphone 17/10/2012 13:50>
D p = new D;
p.d1= 12; copie de 12 dans D::12 <Mettre photo Iphone 17/10/2012 14:17>
p.c1 = 13; copie de 13 dans C::c1
p.b1 = 14; copie de 14 dans B::b1
p.B::a1 = 15; copie de 15 dans B::a1
p.B::A::a1=15;
p.C::a1 = 16; copie de 16 dans C::a1
p.a1=17; Erreur de syntaxe car le compilateur ne sait quel attribut choisir entre B::a2 et C::a1
Dans ce cas les attributs B::a1 et C::a1 proviennent de part l'heritage B -> A et C -> B de la meme
classe A. Ils sont donc de mme type de valeur. Dans ce cas la notion d'heritage virtuel entre B et A
ou C et A peremet que le compilateur ne cr pas de doublon de l'attribut a1 dans D
B p = new B;
p.ma1(); La methode execute est la premire methode ma1 trouve en remontant l'heritage de
la classe fille vers la classe mre => B::ma1
Cas du stockage de la reference ou de l'adresse d'un objet dans une variable qui n'est pas du mme
type que l'objet :
B b = new B;
E e;
A a;
a.ma1(); Erreur : On a declar la variable a mais elle ne contient pas d'objet
Il faut initialiser la variable avec un objet.
B b = new B;
a.ma1();
E e;
A a;
e = b; Interdit : Copier la reference d'un objet de type B dans une variable de type E. Un
objet de type B n'est pas un objet de type E.
a = b; Possible : de part l'heritage B -> A un objet de type B est aussi un ibjet de type A
<Mettre photo Iphone 17/10/2012 15:02>
Le modle MVC :
<Mettre photo Iphone 18/10/2012 10:00>