Interfaz Cloneable

Qué es Cloneable?


Cloneable es un interfaz de java, que permite crear una "copia" exacta de un objeto, es decir ayuda a la duplicación de un objeto, para que en memoria existan dos objetos idénticos en un mismo instante de tiempo; si no es implementada la interfaz cloneable no es posible realizar "cloning" de objetos.


Cloneable vs =


Si realizamos la asignación de un objeto con = , no estaríamos haciendo "cloning", ya que no generaríamos dos variables que apuntan hacia el mismo objeto, y no dos variables que apunten a su respectivo objeto idéntico.


Cómo implementar Cloneable?


A igual que cualquier interfaz se la implementa después del nombre de la clase anteponiendo implements, para su uso es necesario llamar y sobrescribir a su método característico clone().



Cómo implementar clone()?


Es un método que vamos a sobrescribirlo, tiene como parámetro de retorno es un objeto del mismo tipo de la clase que lo contiene, y no posee ningún atributo de entrada.


Dentro del desarrollo de la función ira lo siguiente, return después entre paréntesis el tipo de objeto (el nombre de la clase), aquí se crea un nuevo objeto del tipo Persona, a continuación el constructor super, con el método clone(), que crea un "gemelo" que hacer referencia a los mismos valores de atributos de la clase.



Por qué me arroja una excepción?


Al momento de crear la función nos arroja una excepción del tipo  CloneNotSupportedException, para prevenir el "cloning", si no se ha otorgado el permiso para realizarlo ( si no se implementa la interfaz Cloneable). A la final tendremos lo siguiente:



Cómo utilizar clone()?


Después de crear un nuevo objeto igualamos al objeto que deseamos "clonar" y llamamos al método clone().



Ejemplo



Primero creamos una clase Persona con dos atributos: (String) nombre, (char) genero, realizamos el encapsulamiento de sus atributos NO especificamos el toString.



Nota: no definimos en toString para mas adelante poder comprobar que "=" hacer referencia a un mismo objeto, mientras que clone(), crea un nuevo objeto con su propia referencia.


Segundo otorgamos el permiso de "cloning", es decir implementamos al interfaz cloneable.



Tercero agregamos al función para hacer posible la copia exacta, e implementamos su respectivo trow exception: throws CloneNotSupportedException; es decir creamos un nuevo objeto persona dentro del retorno y le asignamos todos los valores de los atributos de la clase con el método super.clone().



Cuarto ya creada nuestra clase Persona procedemos a crear nuestra clase Aplicación en la cual crearemos un objeto Persona con valores iniciales ya establecidos.



Quinto realizamos el clon respectivo a nuestro objeto prsn ya definido, para lo cual creamos un nuevo objeto prsnClon de tipo Persona y lo igualamos al objeto ya creado prsn seguido del método clone() para asignar los mismos valores en sus atributos; y llamamos a su debida excepción.





Sexto realizamos una asignación con "=" a un nuevo objeto prsnIgual de tipo Persona y lo igualamos al objeto ya creado prsn.


Séptimo Agregamos dos System.out.println por cada objeto, con el objetivo de poder observar la diferencia entre "=" y clone(); un println para mostrar las referencia del objeto y otro para imprimir los atributos del objeto.



Finalmente Compilamos el programa [>] y observamos los resultados.



=> Como podemos observar  la información de cada atributo es al misma para todos los casos; pero si hacemos énfasis en  la referencia del atributo "clonado" es distinta a la del original, porque en si esto logra la interfaz Cloneable; mientras que la persona asignada con "=" tiene como referencia la misma de la Persona (objeto) original.


Ejemplo

A la final tendremos este código:

Persona
Aplicacion

No hay comentarios.:

Publicar un comentario