En ciencias de la computación , la clonación se refiere a la realización de una copia exacta de un objeto , frecuentemente bajo el paradigma de programación basada en instancias o programación orientada a objetos (OOP).
Copias superficiales
En la mayoría de los lenguajes de programación (excepciones incluyen: Rubí ), tipos primitivos , tales como double
, float
, int
, long
, etc, simplemente guardar sus valores en algún lugar de la memoria del ordenador (a menudo la pila de llamadas ). Al usar una asignación simple, puede copiar el contenido de la variable a otra:
Copia de tipos primitivos en Java o C ++:
int original = 42 ; int copia = 0 ;copia = original ;
Muchos lenguajes de programación de programación orientada a objetos (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 para 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 (); Copia de objeto = nulo ; copia = original ; // no copia el objeto sino solo su referencia
El objeto no está duplicado, las variables 'original' y 'copia' en realidad se refieren al mismo objeto. En C ++, el código equivalente
Objeto * original = nuevo Objeto (); Objeto * copia = NULO ; copia = original ;
deja en claro que es un puntero al objeto que se está copiando, no al objeto en sí.
Clonación
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 funcionar correctamente debe anularse en cada nivel que se utilice).
Clonando un objeto en Java:
Objeto originalObj = nuevo Objeto (); Objeto copyObj = null ;copyObj = originalObj . clon (); // duplica el objeto y asigna la nueva referencia a 'copyObj'
Los objetos C ++ en general se comportan como tipos primitivos, por lo que para copiar un objeto C ++ se podría usar el =
operador ' ' (asignación). Se proporciona un operador de asignación predeterminado para todas las clases, pero su efecto puede modificarse mediante el uso de la sobrecarga de operadores . Existen peligros al usar esta técnica (ver rebanar ). Un método para evitar el corte puede ser implementar una solución similar al clone()
método Java para las clases y usar punteros. (Tenga en cuenta que no hay un clone()
método incorporado )
Un ejemplo de C ++ de clonación de objetos:
Object originalObj ; Objeto copyObj ( originalObj ); // crea una copia de originalObj llamada copyObj
Un ejemplo de C ++ de clonación de objetos usando punteros (para evitar el corte, consulte [1] ):
Objeto * originalObj = nuevo Objeto ; Objeto * copyObj = nullptr ;copyObj = nuevo objeto ( * originalObj ); // crea una copia de originalObj y asigna su dirección a copyObj
Referencias
- ^ Ver preguntas y respuestas en en.allexperts.com Archivado el 18 de julio de 2009 en Wayback Machine.