22 Principes de la programmation par objets
La classe est une forme de moule pour ses instances. Elle d´efinit la structure de celles-
ci. Cette structure est d´efinie par des donn´ees repr´esentant l’´etat d’un objet particulier,
ainsi que les traitements s’appliquant sur cet ´etat. Ici, et contrairement `a la programmation
proc´edurale, donn´ees et traitements sont fortement li´es. Dans le cadre de la programmation
par objets, une donn´ee associ´ee `a un objet est appel´ee attribut. Un traitement associ´ee `a
un objet est, en g´en´eral, appel´e m´ethode. Les m´ethodes repr´esentent le moyen d’interagir
avec un objet et donc de pouvoir manipuler ses attributs. La classe Compteur poss`ede
un attribut qui repr´esente son ´etat courant, sa valeur, une m´ethode pour incr´ementer le
compteur (agir sur son ´etat) et une m´ethode pour avoir acc`es `a son ´etat.
Une classe d´efinit ainsi le comportement de ses instances qui est d´efini par les messages
(les demandes de traitement) qu’une instance peut recevoir. Toute les instances d’une classe
ont un comportement similaire (mˆeme traitements). Par exemple, tous les compteurs auront
le mˆeme comportement qui est d’incr´ementer leur valeur. Toutefois, les objets, mˆeme issus
d’une mˆeme classe, sont des entit´es individuelles et distingables. Un objet a une identit´e
propre, et son ´etat peut varier ind´ependamment des autres instance de sa classe. Lorsque
l’on utilise deux compteurs, il est possible d’incr´ementer l’un des deux sans modifier l’´etat
de l’autre. Ainsi, les objets sont caract´eris´es par leur ´etat et l’ensemble des m´ethodes
associ´ees.
L’instanciation d’un objet se fait en deux temps. Premi`erement, un espace m´emoire de
la taille requise par la d´efinition de la classe est allou´e afin de mat´erialiser l’objet. Ensuite,
l’´etat de l’objet est initialis´e. Cette initialisation est r´ealis´ee par le constructeur de la classe.
Le constructeur est une sorte de m´ethode particuli`ere qui est appel´ee lors de la cr´eation
d’un objet. Elle r´ealise les traitements n´ecessaires `a l’initialisation de toute instance d’une
classe. Cet appel est r´ealis´e par l’environnement de l’instanciation. Le constructeur ´etant
offert par la classe, il fait de celle-ci une usine `a objets.
Lorsqu’un objet n’est plus utilis´e, il est d´etruit. La destruction d’un objet ne se li-
mite pas `a rendre la m´emoire qu’il utilisait. Un objet peut utiliser un fichier ou bien
une connexion r´eseau. Il faut alors que l’objet ferme proprement cette connexion afin de
ne pas laisser l’application dans un ´etat incoh´erent. Le destructeur d’une classe pr´ecise
comment les objets doivent ˆetre d´etruits. Il peut ˆetre appel´e implicitement par l’environ-
nement (comme en Java ou Python) ou bien explicitement par le d´eveloppeur (comme en
C++ pour les instances cr´e´ees dynamiquement). Un destructeur par d´efaut est en g´en´eral
pr´esent dans toute classe. Ce destructeur ne g`ere que le cas basique o`u aucun attribut ne
repr´esente une ressource syst`eme (fichier, connexion r´eseau ou base de donn´ees, etc) qui
doit ˆetre ferm´ee proprement.
2.2.2 Constructions du langage
La figure 2.1 illustre la d´efinition d’une classe en Python. Le constructeur porte toujours
le nom __init__. Comme la classe Hello ne d´efinit pas d’´etat pour ses instances, le
constructeur ne fait rien1.Le destructeur d’une classe porte toujours le nom __del__ et il
1Le mot cl´e pass du langage Python explicite le fait de ne rien faire.
c
2003-2005, Rapha¨el Marvie