En informática , la clonación se refiere a la creación de una copia exacta de un objeto , frecuentemente bajo el paradigma de programación basada en instancias o programación orientada a objetos (POO).
En la mayoría de los lenguajes de programación (las excepciones incluyen Ruby ), los tipos primitivos como double
, float
, int
, long
, etc. simplemente almacenan sus valores en algún lugar de la memoria de la computadora (a menudo, la pila de llamadas ). Al usar una asignación simple, puede copiar el contenido de la variable a otra:
Copiar tipos primitivos en Java o C++ :
int original = 42 ; int copia = 0 ; copia = original ;
Muchos lenguajes de programación OOP (incluidos Java , D , ECMAScript y C# ) utilizan referencias a objetos. Las referencias a objetos, que son similares a los punteros en otros lenguajes, permiten que los objetos se pasen por dirección, de modo que no sea necesario copiar todo el objeto.
Un ejemplo de Java, al "copiar" un objeto mediante una asignación simple:
Objeto original = nuevo Objeto (); Objeto copia = null ; copy = original ; // no copia el objeto sino solo su referencia
El objeto no está duplicado, las variables 'original' y 'copia' en realidad hacen referencia al mismo objeto. En C++, el código equivalente
Objeto * original = nuevo Objeto (); Objeto * copia = NULL ; copia = original ;
deja claro que es un puntero al objeto que se está copiando, no el objeto en sí.
El proceso de hacer otra réplica exacta del objeto en lugar de solo su referencia se llama clonación. En la mayoría de los lenguajes, el lenguaje o las bibliotecas pueden facilitar algún tipo de clonación. En Java, la Object
clase contiene el clone()
método , que copia el objeto y devuelve una referencia a ese objeto copiado. Dado que está en la Object
clase, todas las clases definidas en Java tendrán un método de clonación disponible para el programador (aunque para que funcione correctamente debe sobrescribirse en cada nivel en el que se utiliza).
Clonando un objeto en Java:
Objeto originalObj = new Object (); Objeto copyObj = null ; copyObj = originalObj . clone (); // duplica el objeto y asigna la nueva referencia a 'copyObj'
→
Los objetos de C++ en general se comportan como tipos primitivos, por lo que para copiar un objeto de C++ se podría utilizar el =
operador ' ' (asignación). Hay un operador de asignación predeterminado para todas las clases, pero su efecto puede alterarse mediante el uso de la sobrecarga de operadores . Existen peligros al utilizar esta técnica (consulte slicing ). Un método para evitar el slicing puede ser implementar una solución similar al clone()
método Java para las clases y utilizar punteros. (No hay un método integrado clone()
).
Un ejemplo de clonación de objetos en C++:
Objeto originalObj ; Objeto copyObj ( originalObj ); // crea una copia de originalObj llamada copyObj
Un ejemplo en C++ de clonación de objetos usando punteros (para evitar cortes, consulte [1] ):
Objeto * originalObj = nuevo Objeto ; Objeto * copyObj = nullptr ; copyObj = new Object ( * originalObj ); // crea una copia de originalObj y asigna su dirección a copyObj