Vous êtes sur la page 1sur 3

PRCTICA DE LENGUAJE DE PROGRAMACIN

Tema: Serializar Objetos a Serializacin de Objetos es un mecanismo fcil y rpido 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 mtodos writeObject y readObject respectivamente.

En esta prctica veremos como usar la Serializacin de Objetos para guardar y/o leer los datos del Alumno que se ingresan en el formulario que diseamos previamente. Haremos una versin simple para serializar los datos de un slo alumno. La versin mejorada serializa una lista de alumnos. 1. Abrir el proyecto Sistema y agregue una nueva clase llamada Alumno aadindole la interfaz Serializable tal como se observa en la figura.
Figura 1:

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 = ""; fena = null; nivel = 0; seccion = 0; becado = false; } apellidos = ""; sexo = true; // masculino grado = 0; apoderado = 0;

a) Modifica la clase agregando atributos y constructores tal como se muestra. b) Luego desde el men Cdigo fuente > Generar mtodos de obtencin y establecimiento... activar todas las casillas:

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; } }

c) Debes comprobar que se han creado los mtodos 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 Prof. Simn Quispeluza M. Pg. 1/3 IESPP-Jos Jimnez Borja

3. Agregar como atributo de la clase FormularioAlumno un objeto Alumno tal como se muestra.
private Alumno alumno = new Alumno();

4. Agregar los siguientes mtodos en la clase FormularioAlumno:


// Leer objeto alumno desde disco (mediante Serializacin) 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 conversin return exito; } // Guardar objeto alumno en disco (mediante Serializacin) 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. Simn Quispeluza M.

Pg. 2/3

IESPP-Jos Jimnez Borja

// 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()); }

5. Ahora programar el mtodo actionPerformed de los objetos oyentes ActionListener de cada uno de los botones de comando: a) Para Limpiar:
limpiarCampos();

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

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

6. Ejecutar el programa corrigiendo posibles errores.

Actividades: Revise el cdigo de la versin mejorada del programa que gestiona una lista de alumnos, almacena y recupera de disco. Basndose en el mismo desarrolle un programa que permita administrar una agenda de contactos o amigos.

Prof. Simn Quispeluza M.

Pg. 3/3

IESPP-Jos Jimnez Borja