Clon (programación)
# Clon (programación)

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

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:

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:

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

## Clonar

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:

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++:

Ejemplo de copia en C++ usando punteros.:

