Clon (programación)

De Wikipedia, la enciclopedia libre

En ciencia de la computación, clonar se refiere a la acción de hacer una copia exacta de un objeto, frecuentemente bajo el paradigma de programación basada en instancias, o programación orientada a objetos.

Copia Poco Profunda[editar]

En la mayoría de los lenguajes de programación (una excepción es: Ruby), tipos primitivos como double, float, int, long, etc. simplemente guardan su valor en algún lugar de la memoria del ordenador (a menudo en la pila). Al usar una asignación, se puede copiar el contenido de una variable a otra:

Copia de tipos primitivos en Java:

int original = 42;
int copia = 0;

copy = original;

Muchos lenguajes de programación que poseen características de la programación orientada a objetos (incluyendo Java, D, ECMAScript, y C#) hacen uso de referencias a objetos. Las referencias a objetos, que son similares a los punteros en otros lenguajes, permiten pasar la dirección de memoria de un objeto de manera que el objeto completo no tiene que ser copiado.

Ejemplo en Java, donde se "copia" un objeto usando una asignación:

Object original = new Object();
Object copia = null;

copia = original; // no copia el objeto, solo la referencia

El objeto no fue duplicado, las variables 'original' y 'copia' se refieren al mismo objeto.

Clonar[editar]

El proceso de hacer una copia exacta del objeto en lugar de solo la referencia es llamado clonar. En la mayoría de los lenguajes, el mismo lenguaje o alguna librería puede facilitar alguna forma de realizar la copia. En Java, la clase Object contiene el método clone(), que copia el objeto y retorna una referencia al objeto copiado. Como el método está definido en la clase Object, todas las clases definidas en Java podrán brindar este método al programador (para que el método funcione correctamente en algunos casos se deberá sobreescribir).

Clonando un objeto en Java:

Object original = new Object();
Object copia = null;

copia = original.clone(); // duplica el objeto y asigna la nueva referencia a 'copia'

Los objetos en C++ se comportan de manera general como tipos primitivos, así que para copiar un objeto en C++ se podría usar el operador de asignación '='. Existe un operador de asignación por defecto para todas las clases, pero el mismo pudiera ser alterado a través de la sobrecarga de operadores. Una solución similar al método clone() de Java, puede implementarse en C++ usando punteros. (Note que no hay un método clone() predefinido)

Ejemplo de clonar objetos en C++:

Object original;
Object copia(original); // crea una copia del original

Ejemplo de copia en C++ usando punteros.:

Object * original = new Object;
Object * copia = nullptr;

copy = new Object(* original); // crea una copia del original y asigna su dirección de memoria a copia

Referencias[editar]