Copie profonde ou superficielle des objets
239
Dans les méthodes de « conception objet » telles que UML, on établit généralement une classification très fine des relations existant entre différentes classes, en distinguant notamment
des liens d’association, d’agrégation ou de composition ou de simple utilisation. Mais, il est
parfois difficile de retrouver l’expression de ces différentes relations dans les langages euxmêmes, comme on a pu commencer à l’entrevoir précédemment.
4 Copie profonde ou superficielle des objets
Nous avons vu que, dans les langages gérant les objets par référence, on se trouve souvent en
présence de la recopie de cette référence et non pas de la recopie des attributs des objets
concernés. Cela concerne à la fois les affectations et les transmissions en paramètre ou en résultat des objets.
Si on le désire, il reste toujours possible de réaliser explicitement la recopie de tous les attributs d’un objet dans un autre objet du même type. Toutefois, si les données sont convenablement encapsulées, il n’est pas possible d’y accéder directement. On peut alors songer à
s’appuyer sur l’existence de méthodes d’accès et d’altérations de ces attributs privés. Cependant, comme nous l’avons déjà évoqué, cette démarche demande la connaissance de
l’implémentation effective de la classe correspondante et elle doit être reconsidérée à chaque
modification de cette implémentation.
En fait, la démarche la plus réaliste consiste plutôt à prévoir dans la classe elle-même une
méthode particulière destinée à fournir une copie de l’objet concerné, comme dans cet
exemple :
classe Point
{ méthode Point (entier x, entier y ) { abs := x ; ord := y }
méthode déplace (entier dx, entier dy ) { abs := abs + dx ; ord := ord + dy }
méthode copie
{ Point p
// référence locale à un objet de type Point
p := Création Point (abs, ord)
retourne p
}
.....
entier abs, ord
}
Point a, b
a := Création Point (1, 2)
a.déplace (3, 5) // a a pour coordonnées 4, 7
b := a.copie
// b contient la référence d’un nouveau point de coordonnées 4, 7
Cette démarche ne présente aucune difficulté tant que la classe concernée ne contient pas
d’attributs de type classe. Dans le cas contraire, il faut décider si leur copie doit porter, à son
tour, sur les objets référencés plutôt que sur les références. Par exemple, avec la classe Segment présentée précédemment, on pourrait ne recopier que les références des points concer-
Précédent

- 262/370

Suivant