05 - PRÁCTICA DE LENGUAJE DE PROGRAMACIÓN - Serializar

3
Prof. Simón Quispeluza M. Pág. 1/3 IESPP-“José Jiménez Borja” Figura 1: PRÁCTICA DE LENGUAJE DE PROGRAMACIÓN Tema: Serializar Objetos a Serialización de Objetos es un mecanismo fácil y rápido que provee Java para guardar y/o leer desde disco el estado de un Objeto, es decir de los atributos (datos) del objeto. Para serializar un Objeto éste al momento de definirse debe implementar la interface Serializable y para guardar o leer los Objetos se usan Streams (flujos) especializados como son ObjectOutputStream y ObjectInputStream con sus métodos writeObject y readObject respectivamente. En esta práctica veremos como usar la Serialización de Objetos para guardar y/o leer los datos del Alumno que se ingresan en el formulario que diseñamos previamente. Haremos una versión simple para “serializar” los datos de un sólo alumno. La versión mejorada serializa una listade alumnos. 1. Abrir el proyecto Sistema y agregue una nueva clase llamada Alumno añadiéndole la interfaz Serializable tal como se observa en la figura. a) Modifica la clase agregando atributos y constructores tal como se muestra. b) Luego desde el menú Código fuente > Generar métodos de obtención y establecimiento... activar todas las casillas: c) Debes comprobar que se han creado los métodos get… (obtener) y set… (setear/fijar) para cada atributo de nuestra clase Alumno. Respecto a becado y sexo modifique isBecado por getBecado así como isSexo por getSexo. Guarda los cambios. 2. Haz una copia de frmDatosAlumnos con el nombre FormularioAlumno. Es en esta copia que vamos hacer las modificaciones. a) Modifica los botones de comando tal como se muestran >>>>>>> b) Los nombres de los mismos deben ser btnLimpiar, btnLeer, etc… L public class Alumno implements Serializable { private String nombres; private String apellidos; private Date fena; private boolean sexo; private int nivel; private int grado; private int seccion; private int apoderado; private boolean becado; public Alumno() { nombres = ""; apellidos = ""; fena = null; sexo = true; // masculino nivel = 0; grado = 0; seccion = 0; apoderado = 0; becado = false; } public Alumno(String nombres, String apellidos, Date fena, boolean sexo, int nivel, int grado, int seccion, int apoderado, boolean becado) { this.nombres = nombres; this.apellidos = apellidos; this.fena = fena; this.sexo = sexo; this.nivel = nivel; this.grado = grado; this.seccion = seccion; this.apoderado = apoderado; this.becado = becado; } }

Transcript of 05 - PRÁCTICA DE LENGUAJE DE PROGRAMACIÓN - Serializar

Prof. Simón Quispeluza M. Pág. 1/3 IESPP-“José Jiménez Borja”

Figura 1:

PRÁCTICA DE LENGUAJE DE PROGRAMACIÓN Tema: Serializar Objetos

a Serialización de Objetos es un mecanismo fácil y rápido que provee Java para guardar y/o leer desde disco el estado de un Objeto, es decir de los atributos (datos) del objeto. Para serializar un Objeto éste al momento de definirse debe implementar la interface Serializable y para guardar o leer los Objetos se

usan Streams (flujos) especializados como son ObjectOutputStream y ObjectInputStream con sus métodos writeObject y readObject respectivamente.

En esta práctica veremos como usar la Serialización de Objetos para guardar y/o leer los datos del Alumno que se ingresan en el formulario que diseñamos previamente. Haremos una versión simple para “serializar” los datos de un sólo alumno. La versión mejorada serializa una “lista” de alumnos.

1. Abrir el proyecto Sistema y agregue una nueva clase llamada Alumno añadiéndole la interfaz Serializable tal

como se observa en la figura.

a) Modifica la clase agregando atributos y

constructores tal como se muestra. b) Luego desde el menú Código fuente >

Generar métodos de obtención y establecimiento... activar todas las casillas:

c) Debes comprobar que se han creado los métodos get… (obtener) y set… (setear/fijar) para cada atributo de nuestra clase Alumno. Respecto a becado y sexo modifique isBecado por getBecado así como isSexo por getSexo. Guarda los cambios.

2. Haz una copia de frmDatosAlumnos con el nombre FormularioAlumno. Es en esta copia que vamos hacer las modificaciones. a) Modifica los botones

de comando tal como se muestran >>>>>>>

b) Los nombres de los mismos deben ser btnLimpiar, btnLeer, etc…

L

public class Alumno implements Serializable { private String nombres; private String apellidos; private Date fena; private boolean sexo; private int nivel; private int grado; private int seccion; private int apoderado; private boolean becado; public Alumno() { nombres = ""; apellidos = ""; fena = null; sexo = true; // masculino nivel = 0; grado = 0; seccion = 0; apoderado = 0; becado = false; } public Alumno(String nombres, String apellidos, Date fena, boolean sexo, int nivel, int grado, int seccion, int apoderado, boolean becado) { this.nombres = nombres; this.apellidos = apellidos; this.fena = fena; this.sexo = sexo; this.nivel = nivel; this.grado = grado; this.seccion = seccion; this.apoderado = apoderado; this.becado = becado; } }

Prof. Simón Quispeluza M. Pág. 2/3 IESPP-“José Jiménez Borja”

3. Agregar como atributo de la clase FormularioAlumno un objeto “Alumno” tal como se muestra.

4. Agregar los siguientes métodos en la clase FormularioAlumno:

private Alumno alumno = new Alumno();

// Leer objeto alumno desde disco (mediante Serialización) public boolean leerDisco() { boolean exito = true; try { // crear un flujo de entrada desde archivo ObjectInputStream archivo = new ObjectInputStream (new FileInputStream("alumno.dat")); alumno = (Alumno) archivo.readObject(); // leer del archivo archivo.close(); } catch (IOException e) { exito = false; } // error de E/S catch (ClassNotFoundException e) {exito = false; } // error de conversión return exito; } // Guardar objeto alumno en disco (mediante Serialización) public void guardarDisco() { try { ObjectOutputStream archivo = new ObjectOutputStream (new FileOutputStream("alumno.dat")); archivo.writeObject(alumno); // guardar objeto alumno archivo.close(); } catch (IOException e) { } } // Dejar sin datos los campos (componentes) public void limpiarCampos(){ // Limpiar campos txtNombres.setText(""); txtApellidos.setText(""); dcFena.setDate(null); cboNivel.setSelectedIndex(-1); cboGrado.setSelectedIndex(-1); cboSeccion.setSelectedIndex(-1); lstApoderados.setSelectedIndex(-1); lstApoderados.clearSelection(); bgSexo.clearSelection(); chkBecado.setSelected(false); } // Capturar datos desde los componentes public void capturarCampos() { alumno.setNombres(txtNombres.getText()); alumno.setApellidos(txtApellidos.getText()); alumno.setFena(dcFena.getDate()); alumno.setSexo( rbMasculino.isSelected()?true : false); alumno.setNivel(cboNivel.getSelectedIndex()); alumno.setGrado(cboGrado.getSelectedIndex()); alumno.setSeccion(cboSeccion.getSelectedIndex()); alumno.setApoderado(lstApoderados.getSelectedIndex()); alumno.setBecado(chkBecado.isSelected()); } // Comprobar datos ingresados correctamente public boolean validarCampos() { return !txtNombres.getText().isEmpty() // si no es cadena vacia ("") && !txtApellidos.getText().isEmpty() && dcFena.getDate() != null // null = fecha no valida && cboNivel.getSelectedIndex() != -1 // -1 = no hay item seleccionado && cboGrado.getSelectedIndex() != -1 && cboSeccion.getSelectedIndex() != -1 && lstApoderados.getSelectedIndex() != -1 && (rbMasculino.isSelected() || rbFemenino.isSelected()); // uno debe estar seleccionado }

Prof. Simón Quispeluza M. Pág. 3/3 IESPP-“José Jiménez Borja”

5. Ahora programar el método actionPerformed de los objetos oyentes ActionListener de cada uno de los botones de comando: a) Para Limpiar:

b) Para Leer:

c) Para Guardar:

6. Ejecutar el programa corrigiendo posibles errores.

Actividades:

Revise el código de la versión mejorada del programa que gestiona una lista de alumnos, almacena y recupera de disco.

Basándose en el mismo desarrolle un programa que permita administrar una agenda de contactos o amigos.

// Actualizar componentes con datos del alumno public void actualizarCampos(){ txtNombres.setText(alumno.getNombres()); txtApellidos.setText(alumno.getApellidos()); dcFena.setDate( alumno.getFena() ); cboNivel.setSelectedIndex(alumno.getNivel()); cboGrado.setSelectedIndex(alumno.getGrado()); cboSeccion.setSelectedIndex(alumno.getSeccion()); lstApoderados.setSelectedIndex(alumno.getApoderado()); lstApoderados.ensureIndexIsVisible(alumno.getApoderado()); bgSexo.clearSelection(); if (alumno.getSexo() == true) rbMasculino.setSelected(true); else rbFemenino.setSelected(true); chkBecado.setSelected(alumno.getBecado());

}

limpiarCampos();

if ( leerDisco() == true ) { limpiarCampos(); actualizarCampos(); } else JOptionPane.showMessageDialog(null, "No se pudo leer del disco", "Mensaje", JOptionPane.ERROR_MESSAGE);

if ( validarCampos() ) { capturarCampos(); guardarDisco(); } else JOptionPane.showMessageDialog(frmDatos, "Faltan datos", "Mensaje", JOptionPane.WARNING_MESSAGE); }