Saltar la navegación

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.

Imagen que muestra la representación de una pantalla de una aplicación dibujada con la representación de un menú, un panel y un área de dibujo con un borrón de color rojo.
xurxosanz (Dominio público)



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.

Imagen que muestra un dibujo de una una flecha azul que apunta hacia un rectángulo en su parte inferior.
warszawianka (Dominio público)


Al de recuperarlo después deserializar.

Imagen que muestra un dibujo de un documento saliendo de una carpeta.
warszawianka (Dominio público)


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 Serializable que proporciona serialización automática mediante la utilización de las herramientas de Java Object Serialization. Para poder usar la interfaz serializable debemos tener en cuenta lo siguiente:
    • Las clases que implementan Serializable deben tener un constructor sin argumentos que será llamado cuando un objeto sea "reconstituido" desde un fichero .ser.
    • Todos los campos excepto static y transient son serializados. Utilizaremos el modificador transient para especificar los campos que no queremos serializar, y para especificar las clases que no son serializables.
    • Se puede programar una serialización propia si es necesario implementando los siguientes métodos (las definiciones de los métodos deben ser exactas):
      • private void writeObject(java.io.ObjectOutputStream out) throws IOException;
      • private void readObject(java.io.ObjectInputStream in) throws IOExcept;
  • 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() y writeExternal().
    • Las clases Externalizable también deben tener un constructor sin argumentos.

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.