Vous êtes sur la page 1sur 21

Programmation Oriente Objet

Cours n3 : Construction
d'objets et gestion de la mmoire
Alain Giorgetti
giorgetti@univ-fcomte.fr
http://lifc.univ-fcomte.fr/~giorgett/
Laboratoire d'Informatique
de lUniversit de Franche-Comt
Construction d'objets et gestion de la mmoire - A. Giorgetti 2
Les 3 zones de mmoire
Un programme dispose de 3 zones de mmoire au
fonctionnement diffrent
Mmoire statique : stocke les donnes connues la
compilation (donnes statiques)
Pile : lors de lappel dune mthode, stocke ladresse de
retour et les variables locales de la mthode
Mmoire dynamique, ou tas : stocke les donnes
construites au cours de lexcution du programme
Remarques
En Pascal, le segment de mmoire statique est limit 64 Ko
Le tas nest limit que par la taille de la mmoire physique du
PC
Construction d'objets et gestion de la mmoire - A. Giorgetti 3
Mmoire statique
Segment de mmoire qui stocke les
variables dclares dans le programme
VAR
x : REAL;
unObjet : TClasse;
La zone mmoire de chaque variable est
rserve durant toute lexcution du
programme
La taille de la zone rserve dpend du
type de la variable
Mmoire
statique
unObjet
x
Construction d'objets et gestion de la mmoire - A. Giorgetti 4
VAR res : BYTE;
BEGIN
res := expo2(56);
END.
avec :
FUNCTION expo2( b:BYTE ) : BYTE;
BEGIN
IF b MOD 2 = 0 THEN
expo2 := expo2(b DIV 2)+1
ELSE
expo2 := 0;
END;
END;
Empiler avant chaque appel
adresse de retour (1, 1)
valeurs des paramtres (2)
Dpiler aprs chaque appel (3)
Pile des appels : exemple
Pile des appels
expo2(56)?
b = 56
expo2(28)?
b = 28
(1)
(2)
b = 14
expo2(14)?
(3)
(1)
Construction d'objets et gestion de la mmoire - A. Giorgetti 5
Mmoire dynamique (tas)
Mmoire gre au cours de
lexcution du programme
Rservation temporaire dun
espace mmoire : instruction
NEW
Echec possible de la rservation
lexcution (plus de mmoire)
Libration dun espace
mmoire rserv : instruction
DISPOSE
Un espace mmoire rserv est
repr par son adresse, stocke
dans un pointeur
espace
rserv
Mmoire dynamique
Construction d'objets et gestion de la mmoire - A. Giorgetti 6
unObjet

Adresse : dfinition
Toute variable globale, tout objet global possde une
adresse permanente dans la mmoire statique

expo2(56)?
b = 56
expo2(28)?
b = 28
b = 14
expo2(14)?

Le sommet de la pile des appels possde une adresse, qui
suffit pour empiler et dpiler variables locales et adresses
de retour
Un espace rserv dynamiquement possde
temporairement une adresse dans la mmoire dynamique
Construction d'objets et gestion de la mmoire - A. Giorgetti 7
Pointeur : dfinition
Un pointeur est une variable qui peut stocker soit
ladresse dune variable, soit la valeur nil
Types
Type du pointeur li au type de lespace point
En Pascal, si le type dune variable est TVar, alors le
type dun pointeur sur cette variable est ^TVar
Valeur nil
Donner la valeur nil un pointeur p qui ne stocke pas
encore (ou plus) ladresse dun espace mmoire rserv,
par linstruction :
p := nil;
nil est un mot rserv du langage Pascal
Construction d'objets et gestion de la mmoire - A. Giorgetti 8
Reprsentation dun pointeur
pointeur
espace point
v...
nom de
lespace point
adresse
Pointeur sur un espace mmoire
Pointeur sur nil : ne dsigne aucun espace mmoire
pt...
ou
nil
pt...
nom du pointeur
pt...
Construction d'objets et gestion de la mmoire - A. Giorgetti 9
Variable pointe : type simple, compos ou objet
Oprations sur les pointeurs
VAR
pt : ^CHAR;
obj : TClasse;
pt1 : ^TClasse;
pt2 : TPtClasse;
TYPE
TClasse = OBJECT

END;
TPtClasse = ^TClasse;
Adresse de la variable : oprateur @
pt1 := @ obj;
Accs la variable pointe : oprateur ^
pt^ := f;
write(pt^);
Construction d'objets et gestion de la mmoire - A. Giorgetti 10
Pointer une donne statique
Dclarations : objet statique, pointeur
VAR
unObjet : TClasse;
ptObjet : ^TClasse;
unObjet
ptObjet
Instructions
nil
Attention : avant affectation, valeur du
pointeur ptObjet non dfinie
Le pointeur ne repre aucun objet
ptObjet := nil;
Le pointeur repre un objet de type
TClasse
ptObjet := @ unObjet;
Le pointeur repre-t il un objet ?
IF ptObjet = nil THEN
Construction d'objets et gestion de la mmoire - A. Giorgetti 11
Gestion de la mmoire dynamique
Actions
Rservation (allocation dynamique) d'un espace
mmoire, pour stocker un nouvel objet
Stockage de ladresse de l'espace rserv dans un
pointeur, pour pouvoir ensuite accder cet espace
Initialisation du contenu de lespace rserv
Plusieurs accs au contenu, plusieurs modifications ...
Libration de l'espace mmoire rserv, pour faire de la
place en mmoire pour d'autres rservations
Limitation : espace libre restant dans le tas
Conseil : grouper les 3 premires actions en une
seule instruction
Construction d'objets et gestion de la mmoire - A. Giorgetti 12
Objet dynamique : exemple
Allocation
(2 syntaxes)
UNIT date;
TYPE
TDate = OBJECT

END;
TPtDate = ^TDate;
{type pointeur sur TDate}
VAR
ptNaissance, ptAnniv : TPtDate;
BEGIN
NEW(ptNaissance);
ptAnniv := NEW(TPtDate);

ptNaissance^.entrer(21,12);
ptAnniv^.jour := ptNaissance^.jour;

DISPOSE(ptNaissance);
DISPOSE(ptAnniv);
END;
Types
Libration
Dclaration
de pointeurs
Utilisation
Construction d'objets et gestion de la mmoire - A. Giorgetti 13
unPointeur := NEW(TPointeur);
Conditions
TYPE
TClasse = OBJECT
nomChamp : TChamp;
END;
TPointeur = ^TClasse;
VAR
unPointeur : TPointeur;
Allocation dynamique
Signification
Rservation sur le tas de lespace ncessaire au stockage
Retour de ladresse de l'espace mmoire rserv
unPointeur
Construction d'objets et gestion de la mmoire - A. Giorgetti 14
Plusieurs syntaxes lmentaires
procdure NEW
NEW(ptNaissance);
fonction NEW
ptAnniv := NEW(TPtDate);
Dfaut : le contenu de lespace mmoire rserv nest pas dfini
Syntaxe conseille pour les objets
poi nt eur := NEW(TPt Obj et ,const r uct eur );
Utiliser la fonction NEW : utile pour la liaison dynamique
Dans le type de lobjet point, dfinir un constructeur
qui garantisse le contenu de lespace rserv
Dans la fonction NEW, nom du constructeur en paramtre
Allocation : choix dune syntaxe
Construction d'objets et gestion de la mmoire - A. Giorgetti 15
Constructeur : exemple
TYPE
TDate = OBJECT
jour : TJour;
mois : TMois;
{ Self : contenu non dfini }
CONSTRUCTOR init;
{ Contenu de Self : 1er janvier }
END;
TPtDate = ^TDate;
CONSTRUCTOR TDate.init;
BEGIN
Self.jour := 1;
Self.mois := 1;
END;
VAR ptCeJour : TPtDate;
BEGIN
ptCeJour := NEW(TPtDate,init);
ptCeJour^.jour := 25;
END;
Dclaration
Implantation
Utilisation
Construction d'objets et gestion de la mmoire - A. Giorgetti 16
Constructeurs en Pascal
Un constructeur est une mthode particulire dun type
objet
On dclare et on implante un constructeur comme une
mthode procdure, en remplaant PROCEDURE par
CONSTRUCTOR
TYPE
TObjet = OBJECT

CONSTRUCTOR nomConst r uct eur ();
END;
Un constructeur peut avoir des paramtres
Rgle : dclarer et implanter un constructeur dans chaque
type objet (indispensable pour les mthodes virtuelles)
Construction d'objets et gestion de la mmoire - A. Giorgetti 17
Rles dun constructeur
Rle minimal : un constructeur doit donner une
valeur initiale tous les champs de son type objet
Self.champ := val eur i ni t i al e;
Autres rles possibles
Un constructeur avec paramtres peut calculer la valeur
des champs en contrlant la validit de ses paramtres
Difficult : mme si les paramtres sont incorrects, lobjet
est construit et il faut en remplir les champs
Exemple : pour le type objet TFraction
CONSTRUCTOR init(a,b : BYTE);
{ Self reprsente a/b si b < > 0
et Self = ??? si b = 0 }
Construction d'objets et gestion de la mmoire - A. Giorgetti 18
Libration dun espace mmoire
DISPOSE(unPointeur);
Effets
Rend disponible sur le tas lespace
mmoire point par unPointeur
Aprs la libration, la valeur du pointeur
nest pas dfinie
unPointeur
???
{p < > nil}
PROCEDURE DISPOSE(var p : TPoi nt eur );
{espace point par p libre, p = ???}
Construction d'objets et gestion de la mmoire - A. Giorgetti 19
DISPOSE : usage classique
Regrouper les instructions de libration dans une mthode
Lorsquun objet est dfini partir dautres objets, ne pas
oublier de les librer aussi
Librer chaque objet ds que possible
IF unPointeur < > nil THEN
BEGIN
DISPOSE(unPointeur);
unPointeur := nil;
END;
Construction d'objets et gestion de la mmoire - A. Giorgetti 20
Conclusions
Zones de mmoire en Pascal
Les donnes dun programme occupent
une partie connue de la mmoire statique (< 64 Ko)
une partie variable de la pile (stack), limite 16 Ko
une partie variable du tas (heap), limite 640 Ko
Le code du programme occupe un autre segment de
mmoire
Avantages de la mmoire dynamique
Permet un programme d'utiliser plus ou moins de
mmoire lors de son excution, selon ses besoins, selon
la taille des donnes traites
En Pascal, utilise plus de mmoire
Construction d'objets et gestion de la mmoire - A. Giorgetti 21
Vocabulaire
Statique : fix et connu la compilation, avant
excution
Dynamique : qui se produit lors de l'excution
Tas : nom donn la partie de la mmoire qui est
gre dynamiquement
adresse : position dun espace mmoire rserv
pointeur : variable dont la valeur est une adresse
allocation (= rservation) et libration de mmoire :
oprations sur la mmoire dynamique