5.- Persistencia del componente.
Caso práctico
Ada continúa hablando sobre los componentes...
—Fijaos en editor de texto que utilizáis a diario, o el IDE con el que desarrolláis vuestros programas, cada uno lo utiliza de una forma, a María le gusta dejar el máximo espacio para poder escribir sus programas, sin embargo Juan necesita tener cuantos más paneles y barras de herramientas mejor, y cada mañana cuando encendéis el equipo la configuración que habéis establecido continúa ahí, y podéis continuar vuestro trabajo en lugar de tener que empezar cambiar, añadir y quitar cosas, con los componentes pasa algo parecido.
A veces, necesitamos almacenar el estado de una clase para que perdure a través del tiempo. A esta característica se le llama persistencia. Para implementar esto, es necesario que pueda ser almacenada en un archivo y recuperado posteriormente.
El mecanismo que implementa la persistencia se llama serialización.
Al proceso de almacenar el estado de una clase en un archivo se le llama serializar.
Al de recuperarlo después deserializar.
Todos los componentes deben persistir. Para ello, siempre desde el punto de vista Java, deben implementar los interfaces java.io.Serializable o java.io.Externalizable que te ofrecen la posibilidad de serialización automática o de programarla según necesidad:
- Serialización Automática: el componente implementa la interfaz
Serializableque proporciona serialización automática mediante la utilización de las herramientas deJava Object Serialization. Para poder usar la interfaz serializable debemos tener en cuenta lo siguiente:- Las clases que implementan
Serializabledeben tener un constructor sin argumentos que será llamado cuando un objeto sea "reconstituido" desde un fichero .ser. - Todos los campos excepto
staticytransientson serializados. Utilizaremos el modificadortransientpara especificar los campos que no queremos serializar, y para especificar las clases que no son serializables (por ejemploImageno lo es). - Se puede programar una serialización propia si es necesario implementando los siguientes métodos (las firmas deben ser exactas):
private void writeObject(java.io.ObjectOutputStream out) throws IOException;private void readObject(java.io.ObjectInputStream in) throws IOExcept
- Las clases que implementan
-
Serialización programada: el componente implementa la interfaz
Externalizable, y sus dos métodos para guardar el componente con un formato específico. Características:- Precisa de la implementación de los métodos
readExternal()ywriteExternal(). - Las clases
Externalizabletambién deben tener un constructor sin argumentos.
- Precisa de la implementación de los métodos
Los componentes que implementarás en esta unidad emplearán la serialización por defecto por lo que debes tener en cuenta lo siguiente:
- La clase debe implementar la interfaz
Serializable. - Es obligatorio que exista un constructor sin argumentos.
Para saber más
La documentación sobre la interfaz serializable de java la puedes encontrar en el siguiente enlace:
También tienes un pequeño ejemplo sobre como serializar un objeto en java.