Qu’est-ce qu’une copie d’objet ?

Dans la programmation informatique orientée objet, une copie d’objet est la procédure utilisée pour créer une copie exacte d’un objet de données existant. Le nouvel objet de données est généralement complètement indépendant de l’objet d’origine, sauf qu’ils partagent la même définition de classe. La programmation orientée objet tente d’encapsuler à la fois les données et les méthodes qui fonctionnent sur les données dans un seul objet, il peut donc être difficile d’effectuer une copie d’objet, en particulier dans une instance dans laquelle un objet a des champs privés ou protégés. La majeure partie de la mécanique d’une copie d’objet est laissée au programmeur, car la plupart des objets sont créés par l’utilisateur ; cependant, certains mécanismes, tels que la méthode de clonage dans Java®, fournissent un cadre lâche pour le processus.

Selon le langage utilisé pour la programmation, il peut y avoir deux types distincts de copie d’objet qui peuvent être effectués. Contrairement à une véritable copie d’objet, dans laquelle l’objet résultant est séparé de l’objet source, une copie superficielle peut créer deux références aux mêmes champs de données en mémoire. À l’aide d’opérateurs et de pointeurs, les champs d’un nouvel objet peuvent être définis sur les emplacements de mémoire des champs de données correspondants dans l’objet source, créant essentiellement deux objets qui pointent exactement sur les mêmes informations. Cependant, cela n’est pas possible dans certains langages de programmation.

Une méthode plus traditionnelle pour effectuer une copie d’objet consiste à créer une instance correspondant à la classe de l’objet source. Grâce à des méthodes définies par l’utilisateur au sein de la classe, toutes les données variables de l’objet source peuvent être copiées manuellement vers l’objet de destination, créant ainsi une copie exacte, bien que les informations du nouvel objet soient indépendantes des données de l’objet source et soient stockées dans emplacements de mémoire différents. Ceci est parfois connu sous le nom de clonage d’un objet.

Certains langages de programmation, tels que Java® et C++, fournissent des indications sur les procédures de copie d’objet. Les deux langages ont des méthodes standard qui peuvent être remplacées pour implémenter la fonctionnalité de copie d’objet, bien qu’elles soient plus ou moins vides telles qu’implémentées par les langages. Par héritage, cependant, si les méthodes sont constamment mises à jour dans chaque sous-classe, un objet peut être copié facilement avec un seul appel à une méthode.

Dans les situations de réseau, certaines méthodes plus lourdes de création de copies d’objets instanciés ont été développées. L’une d’elles consiste à écrire l’objet à copier dans un flux de données, puis à recevoir le flux dans une nouvelle instance de la classe, en le copiant efficacement comme s’il était transmis sur un réseau ou lu à partir d’un fichier. Cette méthode peut être utilisée dans des situations où l’accès aux champs de l’objet est restreint et où aucune méthode ou interface de copie n’est définie.