GUIA F DE LABORATORIO
HERENCIA CLASES ABSTRACTAS INTERFACE
Objetivo:
Aplicar los conceptos de la Programacin Orientada a Objetos.
Aplicar las definiciones de Herencia, Clases Abstractas e Interface Java.
Aprender la herencia entre clases, utilizando el lenguaje de programacin Java.
Descripcin:
A continuacin se presentan varias clases. Cada clase contiene mtodos de tipo SET
y GET, y mtodos operacionales. Los mtodos operacionales son mtodos que
implementan las operaciones FUNCIONALIDADES del objeto.
En esta gua de Laboratorio se va a trabajar con el paquete Clases, que contiene a
las clases ArregloDeDocumentos, Documento, Libro, Revista y Tesis. El objetivo es
comprender como se relacionan estas clases, especialmente como funciona el
mecanismo de la Herencia.
El alumno debe encontrar el mecanismo que utilizan las clases para el envi de
datos; as como las referencias entre objetos. Al finalizar esta gua, cada alumno
comprender cuando, donde, como y por que se instancian los objetos.
Se debe mencionar que para el desarrollo de esta gua de laboratorio se ha utilizado
la librera grfica SWING de Java, la cual posee muchos componentes grficos tales
como JFrame (marco o contorno), JPanel (panel o lienzo), JLabel (etiqueta),
JTextField (caja de texto), JButton (botn), JTextArea (rea de texto), JScrollPane
(panel de scroll horizontal y vertical), JMenuBar (barra de men), JToolBar (barra
de herramientas), etc. A su vez se ha utilizado la librera grfica AWT de Java, para
el uso de algunos de sus componentes grfico, como por ejemplo, la clase Color.
Recordar que nos encontramos en un entorno Orientado a Objetos. Eso quiere decir
que cada clase tiene atributos y mtodos PROPIOS de su correspondiente objeto
real. Se pide analizar el cdigo desarrollado, e implementar todas las
funcionalidades.
PAQUETE Biblioteca.Clases
Documento
A continuacin se presenta la clase Documento, que define los atributos y mtodos
ms importantes de un documento de una biblioteca de la vida real. Es decir, esta
clase Documento define los atributos y mtodos mas importante de un documento.
Paso a seguir 1:
1. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
2. Generar el archivo Documento.class (Proceso de Compilacin)
Algortmica II
La clase Documento
//Declaracin del nombre del paquete donde se encuentra la clase 'Documento'
package Biblioteca.Clases;
//Declaramos las librerias del Java que necesitamos usar
import java.util.Date;
//Declaracin de la clase 'Documento'
public class Documento {
//Declaracin de Atributos
protected String codigo;
protected String titulo;
protected String descripcion;
protected String autor;
protected int ao;
protected Date fecha;
protected int cantidad;
protected boolean estado;
//Este es el mtodo constructor por defecto
public Documento(){
this.codigo = "Codigo";
this.titulo = "Documento";
this.descripcion = "Descripcion";
this.autor = "Autor";
this.ao = 2008;
this.fecha = new Date();
this.cantidad = 1;
this.estado = true;
}
//Mtodos de tipo SET
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public void setAutor(String autor) {
this.autor = autor;
}
public void setAo(int ao) {
this.ao = ao;
}
public void setFecha(Date fecha) {
this.fecha = fecha;
}
public void setCantidad(int cantidad) {
Prof. Arn Elas Herrera Ponte
Pg. 2
Algortmica II
this.cantidad = cantidad;
}
public void setEstado(boolean estado) {
this.estado = estado;
}
//Mtodos de tipo GET
public String getCodigo() {
return (this.codigo);
}
public String getTitulo() {
return (this.titulo);
}
public String getDescripcion() {
return (this.descripcion);
}
public String getAutor() {
return (this.autor);
}
public int getAo() {
return (this.ao);
}
public Date getFecha() {
return (this.fecha);
}
public int getCantidad() {
return (this.cantidad);
}
public boolean getEstado() {
return (this.estado);
}
}
Libro
A continuacin se presenta la clase Libro, que define los atributos y mtodos ms
importantes de un libro de la vida real. Es decir, esta clase Libro define los atributos
y mtodos mas importante de un libro.
OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Libro HEREDA los
atributos y mtodos (de mbito protegido y pblico) de la clase Documento.
Paso a seguir 2:
3. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
4. Generar el archivo Libro.class (Proceso de Compilacin)
Pg. 3
Algortmica II
La clase Libro
package Biblioteca.Clases;
public class Libro extends Documento{
}
Revista
A continuacin se presenta la clase Revista, que define los atributos y mtodos ms
importantes de una revista de la vida real. Es decir, esta clase Revista define los
atributos y mtodos ms importantes de una revista.
OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Revista HEREDA los
atributos y mtodos (de mbito protegido y pblico) de la clase Documento.
Paso a seguir 3:
5. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
6. Generar el archivo Revista.class (Proceso de Compilacin)
La clase Revista
package Biblioteca.Clases;
public class Revista extends Documento{
}
Tesis
A continuacin se presenta la clase Tesis, que define los atributos y mtodos ms
importantes de una tesis de la vida real. Es decir, esta clase Tesis define los
atributos y mtodos ms importantes de una tesis.
OBSERVACION: Hemos aplicado HERENCIA. Es decir la clase Tesis HEREDA los
atributos y mtodos (de mbito protegido y pblico) de la clase Documento.
Paso a seguir 4:
7. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
8. Generar el archivo Tesis.class (Proceso de Compilacin)
La clase Tesis
package Biblioteca.Clases;
Pg. 4
Algortmica II
Paso a seguir 5:
9. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
10. Generar el archivo ArregloDeDocumentos.class (Proceso de Compilacin)
La clase ArregloDeDocumentos
//Declaracin del nombre del paquete donde se encuentra la clase 'ArregloDeDocumentos'
package Biblioteca.Clases;
//Declaramos las librerias del Java que necesitamos usar
import java.util.ArrayList;
//Declaracin de la clase 'ArregloDeDocumentos'
public class ArregloDeDocumentos {
//Declaracin de Atributos
//Declamos un objeto de tipo ArrayList que forma parte de la familia COLLECTION
private ArrayList documentos;
//Este es el mtodo constructor por defecto
public ArregloDeDocumentos(){
//Instanciamos al objeto de tipo ArrayList
documentos = new ArrayList();
}
//Este mtodo ade un objeto de tipo Documento dentro del ArrayList
public void aadeDocumento(Documento documento){
documentos.add(documento);
}
//Este mtodo ade por ndice a un objeto de tipo Documento dentro del ArrayList
public void insertaDocumentoPorIndice(int indice, Documento documento){
documentos.set(indice,documento);
}
//Este mtodo devuelve la referencia al ArrayList
public ArrayList devuelveElArregloDeDocumentos(){
return documentos;
}
//Este mtodo devuelve por ndice a un objeto que est dentro del ArrayList
public Documento devuelveUnDocumentoPorIndice(int indice){
Prof. Arn Elas Herrera Ponte
Pg. 5
Algortmica II
return (Documento)documentos.get(indice);
}
}
PAQUETE Biblioteca. Formularios
jpanFondo
A continuacin se presenta la clase jpanFondo, que hereda de la clase JPanel
(javax.swing.JPanel). Esta clase se utiliza para crear el panel o lienzo de fondo del
formulario principal, as como de los dems formularios.
JPanel
Paso a seguir 6:
11. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
12. Generar el archivo jpanFondo.class (Proceso de Compilacin)
La clase jpanFondo
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanFondo'
package Biblioteca.Formularios;
//Declaracion de libreras o paquetes
import javax.swing.JPanel;
import java.awt.Color;
//Definimos la clase 'jpanFondo'
//que HEREDA de la clase 'JPanel'
public class jpanFondo extends JPanel{
//Declaracin de Atributos
//Declaramos un objeto de tipo 'Color'
protected Color coColorDeFondo;
//Atributo que almacenar la ruta donde se encuentran las imagenes
protected String rutaDeImagenes;
Prof. Arn Elas Herrera Ponte
Pg. 6
Algortmica II
Pg. 7
Algortmica II
JPanel
Paso a seguir 7:
13. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
14. Generar el archivo jpanInicio.class (Proceso de Compilacin)
La clase jpanInicio
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanInicio'
package Biblioteca.Formularios;
//Declaramos las librerias del Java que necesitamos usar
import javax.swing.JLabel;
import javax.swing.ImageIcon;
//Declaracin de la clase 'jpanInicio' que hereda de un 'jpanFondo'
public class jpanInicio extends jpanFondo{
//Declaracin de Atributos
//Declaracin de componentes grficos swing para crear la GUI
private JLabel jlblImagen;
private JLabel jlblTitulo;
//Este es el mtodo constructor por defecto
//Invoca o llama al mtodo 'iniciarComponentes()'
public jpanInicio(){
iniciarComponentes();
}
//Este mtodo instancia los objetos o componentes grficos
//que se van a mostrar dentro del JPanel (lienzo)
public void iniciarComponentes(){
//Indicamos que el Administrador de Diseo sea nulo
Prof. Arn Elas Herrera Ponte
Pg. 8
Algortmica II
this.setLayout(null);
//Instanciamos dos objetos de tipo JLabel
this.jlblImagen = new JLabel();
this.jlblTitulo = new JLabel();
//Instanciamos dos objetos de tipo 'ImageIcon'
//Estos objetos cargarn una imagen respectivamente
ImageIcon iconoImagen = new ImageIcon(rutaDeImagenes+"estudiando.gif");
ImageIcon iconoTitulo = new ImageIcon(rutaDeImagenes+"titulo.jpg");
//Indicamos a cada objeto de tipo 'JLabel' cargar al objeto de tipo
//'ImageIcon', de esta forma la imagen se mostrar en el 'JLabel'
this.jlblImagen.setIcon(iconoImagen);
this.jlblImagen.setBounds(250,80,320,320);
this.jlblTitulo.setIcon(iconoTitulo);
this.jlblTitulo.setBounds(100,400,600,100);
//Aadimos cada objeto de tipo 'JLabel' dentro del JPanel 'jpanInicio'
this.add(jlblImagen);
this.add(jlblTitulo);
}
}
jpanBarraDeMenu
A continuacin se presenta la clase jpanBarraDeMenu, que hereda de la clase
jpanFondo. Esta clase se utiliza para crear el panel o lienzo de que contendr a la
barra de men. Esta barra de men contiene a dos mens llamados (Archivo) y
(Mantenimiento). Este panel se colocar en la parte superior del formulario principal
llamado jfrmPrincipal.
OBSERVACIN: Esta clase hereda de la clase 'jpanFondo'.
JMenuBar
JMenu
Pg. 9
Algortmica II
JMenuItem
Paso a seguir 8:
15. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo
Integrado.
16. Generar el archivo jpanBarraDeMenu.class (Proceso de Compilacin)
La clase jpanBarraDeMenu
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanBarraDeMenu'
package Biblioteca.Formularios;
//Declaramos las librerias del Java que necesitamos usar
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.ImageIcon;
import javax.swing.JSeparator;
import java.awt.CardLayout;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//Declaracin de la clase 'jpanBarraDeMenu' que hereda de un 'jpanFondo'
//e implementa a la interface 'ActionListener'
public class jpanBarraDeMenu extends jpanFondo implements ActionListener{
//Declaracin de Atributos
Prof. Arn Elas Herrera Ponte
Pg. 10
Algortmica II
Pg. 11
Algortmica II
//Instanciamos a un
item del men llamado 'jmniLibro'
//Este item va ir dentro del men 'jmnMantenimiento'
//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar
//los eventos que se originan sobre l
jmniLibro = new JMenuItem("Libro");
jmniLibro.setIcon(new ImageIcon(rutaDeImagenes+"libro.gif"));
jmniLibro.addActionListener(this);
//Instanciamos a un
item del men llamado 'jmniRevista'
//Este item va ir dentro del men 'jmnMantenimiento'
//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar
//los eventos que se originan sobre l
jmniRevista = new JMenuItem("Revista");
jmniRevista.setIcon(new ImageIcon(rutaDeImagenes+"revista.jpg"));
jmniRevista.addActionListener(this);
//Instanciamos a un
item del men llamado 'jmniTesis'
//Este item va ir dentro del men 'jmnMantenimiento'
//Indicamos la imagen a mostrar y que tenga la propiedad de escuchar
//los eventos que se originan sobre l
jmniTesis = new JMenuItem("Tesis");
jmniTesis.setIcon(new ImageIcon(rutaDeImagenes+"tesis.gif"));
jmniTesis.addActionListener(this);
//Aadimos los items al men 'jmnMantenimiento'
//Tambien aadimos un objeto de tipo 'JSeparator'
//el cual es una lnea que separa a dos items del men
jmnMantenimiento.add(jmniLibro);
jmnMantenimiento.add(new JSeparator());
jmnMantenimiento.add(jmniRevista);
jmnMantenimiento.add(new JSeparator());
jmnMantenimiento.add(jmniTesis);
//Aadimos los mens dentro de la barra
jmnbBarra.add(jmnArchivo);
jmnbBarra.add(jmnMantenimiento);
//Desactivamos las opciones del men
cambiarEstadoDeLaBarraDeMenu(false);
//Aadimos la barra de mens dentro del JPanel
this.add(jmnbBarra);
}
//Este mtodo activa o desactiva a las opciones del men
//segn sea el valor de la varible que viene por parmetro
public void cambiarEstadoDeLaBarraDeMenu(boolean valor){
jmniEntrar.setEnabled(!valor);
jmniSalir.setEnabled(valor);
jmnMantenimiento.setEnabled(valor);
}
//Este mtodo detecta los eventos de tipo ACTION generados en los componentes
//grficos swing. Siempre y cuando dichos componentes tengan habilitado su
//propiedad 'addActionListener(this)'
public void actionPerformed(ActionEvent e){
if(e.getSource() == jmniEntrar){
//Cambiamos de 'JPanel', ahora mostramos a 'jpanValidarUsuario'
((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"usuario" );
}
if(e.getSource() == jmniSalir){
Prof. Arn Elas Herrera Ponte
Pg. 12
Algortmica II
}
if(e.getSource() == jmniLibro){
//Cambiamos de 'JPanel', ahora mostramos a 'jpanMantenimientoLibro'
((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"libro" );
}
if(e.getSource() == jmniRevista){
//Cambiamos de 'JPanel', ahora mostramos a 'jpanMantenimientoRevista'
((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"revista" );
}
if(e.getSource() == jmniTesis){
//Cambiamos de 'JPanel', ahora mostramos a 'jpanMantenimientoTesis'
((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"tesis" );
}
}
}
jpanValidarUsuario
A continuacin se presenta la clase jpanValidarUsuario, que hereda de la clase
jpanFondo e implementa la interface java ActionListener. Esta clase se utiliza para
crear el panel o lienzo de que contendr a los componentes grficos swing, que
forman parte del formulario para validar el USUARIO y CLAVE del usuario del
sistema.
OBSERVACIN: Esta clase hereda de la clase 'jpanFondo'.
JPanel
Pasos a seguir 9:
Prof. Arn Elas Herrera Ponte
Pg. 13
Algortmica II
La clase jpanValidarUsuario
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanValidarUsuario'
package Biblioteca.Formularios;
//Declaramos las librerias del Java que necesitamos usar
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import java.awt.CardLayout;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
//Declaracin de la clase 'jpanValidarUsuario'
//que hereda de un 'jpanFondo'
//e implementa a la interface 'ActionListener'
public class jpanValidarUsuario extends jpanFondo implements ActionListener{
//Declaracin de Atributos
//Declaracin de componentes grficos swing para crear la GUI
private JLabel jlblImagen;
private JLabel jlblUsuario;
private JLabel jlblClave;
private JTextField jtxfUsuario;
private JPasswordField jpwfClave;
private JButton jbtnAceptar;
//Declaracin de los objetos que referencian a 'jpanelFondo'
//y 'jpanBarraDeMenu', instanciados en la clase 'jfrmPrincipal'
private jpanBarraDeMenu jpanelBarra;
private jpanFondo jpanelFondo;
//Este es el mtodo constructor por parmetro
//le llega por parmetro la referencia de un objeto de tipo 'jpanBarraDeMenu',
//y 'jpanFondo', luego invoca o llama al mtodo 'iniciarComponentes()'
public jpanValidarUsuario(jpanBarraDeMenu jpanelBarra,
jpanFondo jpanelFondo){
this.jpanelBarra = jpanelBarra;
this.jpanelFondo = jpanelFondo;
iniciarComponentes();
}
//Este mtodo instancia los objetos o componentes grficos
//que se van a mostrar dentro del JPanel (lienzo)
public void iniciarComponentes(){
//Indicamos que el Administrador de Diseo sea nulo
this.setLayout(null);
//***************************************************
//Creamos la GUI para validar los datos de un Usuario
//***************************************************
Prof. Arn Elas Herrera Ponte
Pg. 14
Algortmica II
Pg. 15
Algortmica II
grficos swing, que forman parte del formulario para el registro de un Nuevo
Documento (que puede ser un libro, una revista o una tesis).
Este panel disea un formulario tpico de Mantenimiento, el cual tiene una barra de
herramientas con botones que realizan las operaciones de (1) Nuevo, (2) Grabar,
(3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.
Este panel va a servir de clase Padre para crear clases Hijas.
Esta clase jpanMantenimientoDocumento declara 4 mtodos abstractos, los cuales
son:
public
public
public
public
abstract
abstract
abstract
abstract
void
void
void
void
grabarDocumento();
mostrarDocumento();
activarDocumento();
inactivarDocumento();
La clase jpanMantenimientoDocumento
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanMantenimientoDocumento'
package Biblioteca.Formularios;
//Declaramos las librerias del Java que necesitamos usar
import javax.swing.JToolBar;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Color;
//Importamos a las clases que se encuentran en otros paquetes
import Biblioteca.Clases.ArregloDeDocumentos;
//Declaracin de la clase 'jpanMantenimientoDocumento' que hereda de un 'jpanFondo'
Prof. Arn Elas Herrera Ponte
Pg. 16
Algortmica II
Pg. 17
Algortmica II
Pg. 18
Algortmica II
//********************************************************
//Creamos la GUI para el registro de datos de un Documento
//********************************************************
//Instanciamos objetos de tipo JLabel (etiqueta), JTextField (caja de texto),
//JTextArea (Area de texto) y JScrollPane
//Indicamos el texto a mostrar
//Indicamos la posicin y tamao de cada componente grfico dentro del JPanel
jlblCabecera = new JLabel("Mantenimiento de " + tipoDocumento);
jlblCabecera.setBounds(250,110,200,20);
jlblCodigo = new JLabel("Cdigo:");
jlblCodigo.setBounds(250,140,100,20);
jlblTitulo = new JLabel("Ttulo:");
jlblTitulo.setBounds(250,170,100,20);
jlblDescripcion = new JLabel("Descripcin:");
jlblDescripcion.setBounds(250,200,100,60);
jlblAutor = new JLabel("Autor:");
jlblAutor.setBounds(250,270,100,20);
jlblAo = new JLabel("Ao:");
jlblAo.setBounds(250,300,100,20);
jlblFecha = new JLabel("Fecha:");
jlblFecha.setBounds(250,330,100,20);
jlblCantidad = new JLabel("Cantidad:");
jlblCantidad.setBounds(250,360,100,20);
jlblEstado = new JLabel("Estado:");
jlblEstado.setBounds(250,390,100,20);
jtxfCodigo = new JTextField();
jtxfCodigo.setBounds(350,140,100,20);
jtxfTitulo = new JTextField();
jtxfTitulo.setBounds(350,170,100,20);
jtxaDescripcion = new JTextArea();
jscrpanDescripcion = new JScrollPane( jtxaDescripcion );
jscrpanDescripcion.setBounds(350,200,200,60);
jtxfAutor = new JTextField();
jtxfAutor.setBounds(350,270,100,20);
jtxfAo = new JTextField();
jtxfAo.setBounds(350,300,100,20);
jtxfFecha = new JTextField();
jtxfFecha.setBounds(350,330,100,20);
jtxfCantidad = new JTextField();
jtxfCantidad.setBounds(350,360,100,20);
jlblImagenEstado = new JLabel("Activo");
jlblImagenEstado.setIcon(new ImageIcon(rutaDeImagenes+"check.gif"));
jlblImagenEstado.setBounds(350,390,100,20);
Prof. Arn Elas Herrera Ponte
Pg. 19
Algortmica II
Pg. 20
Algortmica II
}else if(jtxaDescripcion.getText().trim().length()==0){
mensaje = "Ingrese la descripcin.";
valor = false;
}else if(jtxfAutor.getText().trim().length()==0){
mensaje = "Ingrese el autor.";
valor = false;
}else if(jtxfAo.getText().trim().length()==0){
mensaje = "Ingrese el ao.";
valor = false;
}else if(jtxfFecha.getText().trim().length()==0){
mensaje = "Ingrese la fecha.";
valor = false;
}else if(jtxfCantidad.getText().trim().length()==0){
mensaje = "Ingrese la cantidad.";
valor = false;
}
if(!valor){
JOptionPane.showMessageDialog(null,
mensaje,"Validando el Formulario",
JOptionPane.WARNING_MESSAGE);
}
return valor;
}
//Este mtodo detecta los eventos de tipo ACTION generados en los componentes
//grficos swing. Siempre y cuando dichos componentes tengan habilitado su
//propiedad 'addActionListener(this)'
public void actionPerformed(ActionEvent e){
if(e.getSource() == jbtnNuevo){
limpiarFormulario();
}
if(e.getSource() == jbtnGrabar){
accionDelBotonGrabar();
}
if(e.getSource() == jbtnMostrar){
accionDelBotonMostrar();
}
if(e.getSource() == jbtnActivar){
accionDelBotonActivar();
}
if(e.getSource() == jbtnInactivar){
accionDelBotonInactivar();
}
if(e.getSource() == jbtnSalir){
//Cambiamos de 'JPanel', ahora mostramos a 'jpanInicio'
((CardLayout)jpanelFondo.getLayout()).show( jpanelFondo,"inicio" );
}
}
//****************************************************************
//Estos mtodos se invocarn cuando se haga clic sobre los botones
//de la barra de herramientas
//OBSERVACION:
//Es cdigo interno de cada mtodo, ser implementada por las clases HIJAS
//por que se est invocando a un MTODO ABSTRACTO, y como es bien
//conocido, las clases HIJAS son las encargadas de implementar a cada
//MTODO ABSTRACTO defino en la clase PADRE.
public void accionDelBotonGrabar(){
Prof. Arn Elas Herrera Ponte
Pg. 21
Algortmica II
if(validarDatosDelFormulario()){
grabarDocumento(); //MTODO ABSTRACTO
limpiarFormulario();
}
}
public void accionDelBotonMostrar(){
if(validarIngresoDelCampoCodigoDelFormulario()){
mostrarDocumento(); //MTODO ABSTRACTO
}
}
public void accionDelBotonActivar(){
if(validarIngresoDelCampoCodigoDelFormulario()){
activarDocumento(); //MTODO ABSTRACTO
}
}
public void accionDelBotonInactivar(){
if(validarIngresoDelCampoCodigoDelFormulario()){
inactivarDocumento(); //MTODO ABSTRACTO
}
}
//****************************************************************
//Declaracin de los MTODOS ABSTRACTOS
public abstract void grabarDocumento();
public abstract void mostrarDocumento();
public abstract void activarDocumento();
public abstract void inactivarDocumento();
}
jpanMantenimientoLibro
A continuacin se presenta a la clase hija jpanMantenimientoLibro, que hereda de la
clase jpanMantenimientoDocumento. Esta clase se utiliza para crear el panel para el
registro de un Nuevo Libro.
Este panel HEREDA el diseo un formulario tpico de Mantenimiento, el cual tiene
una barra de herramientas con botones que realizan las operaciones de (1) Nuevo,
(2) Grabar, (3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.
Este panel hereda todos los atributos y mtodos de su clase Padre.
Esta clase jpanMantenimientoLibro implementa los 4 mtodos abstractos definidos
en la clase Padre:
public
public
public
public
void
void
void
void
grabarDocumento(){ }
mostrarDocumento(){ }
activarDocumento(){ }
inactivarDocumento(){ }
Pg. 22
Algortmica II
La clase jpanMantenimientoLibro
//Declaracin del nombre del paquete donde se encuentra la clase 'jpanMantenimientoLibro'
package Biblioteca.Formularios;
//Declaramos las librerias del Java que necesitamos usar
import java.util.Date;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
//Importamos a las clases que se encuentran en otros paquetes
import ClasesBase.Base;
import Biblioteca.Clases.ArregloDeDocumentos;
import Biblioteca.Clases.Documento;
import Biblioteca.Clases.Libro;
//Declaracin de la clase 'jpanMantenimientoLibro'
//que hereda de un 'jpanMantenimientoDocumento'
public class jpanMantenimientoLibro extends jpanMantenimientoDocumento{
//Este es el mtodo constructor por parmetro
//le llega por parmetro la referencia de un objeto de tipo 'jpanFondo',
//el tipo de documento, y 'arreglo'
public jpanMantenimientoLibro(jpanFondo jpanelFondo,
Prof. Arn Elas Herrera Ponte
Pg. 23
Algortmica II
String tipoDocumento,
ArregloDeDocumentos arreglo){
//Pasamos por parmetro al constructor por parmetro de la clase padre
//'jpanMantenimientoDocumento'
super(jpanelFondo, tipoDocumento, arreglo);
}
//Este mtodo devuelve el indice donde se encuentra el documento con cdigo
//'codigoDocumento' y que sea de tipo 'Libro'
//Si no encuentra dicho cdigo, devuelve el valor de -1
public int devolverIndiceDelDocumentoEnElArreglo(String codigoDocumento){
ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();
int indice = -1, i;
for(i=0;i<arregloAuxiliar.size();i++){
Documento doc = (Documento)arregloAuxiliar.get(i);
if(doc instanceof Libro){
if(doc.getCodigo().equals(codigoDocumento)){
indice = i;
break;
}
}
}
return indice;
}
//Este mtodo registra los datos de un nuevo libro
//Por ello instancia un objeto de tipo libro y le va asignando sus datos
//utiliza a sus mtodos de tipo SET
//luego se devuelve la referencia a este objeto instanciado
public Libro registrarNuevoLibro(){
Libro libro = new Libro();
libro.setCodigo(jtxfCodigo.getText().trim());
libro.setTitulo(jtxfTitulo.getText().trim());
libro.setDescripcion(jtxaDescripcion.getText().trim());
libro.setAutor(jtxfAutor.getText().trim());
libro.setAo(Base.aEntero(jtxfAo.getText().trim()));
try{
libro.setFecha(new Date(jtxfFecha.getText().trim()));
}catch(Exception e){
libro.setFecha(new Date());
}
libro.setCantidad(Base.aEntero(jtxfCantidad.getText().trim()));
libro.setEstado(true);
return libro;
}
//Este mtodo carga el valor de los atributos de un objeto de tipo 'Libro'
//los muestra en los componentes grficos del JPanel
public void cargarDatosDelLibroEnElFormulario(Libro libro){
jtxfTitulo.setText(libro.getTitulo());
jtxaDescripcion.setText(libro.getDescripcion());
jtxfAutor.setText(libro.getAutor());
jtxfAo.setText(""+libro.getAo());
jtxfFecha.setText(libro.getFecha().toString());
jtxfCantidad.setText(""+libro.getCantidad());
if(libro.getEstado()){
jlblImagenEstado.setIcon(new ImageIcon(rutaDeImagenes+"check.gif"));
jlblImagenEstado.setText("Activo");
}else{
Prof. Arn Elas Herrera Ponte
Pg. 24
Algortmica II
}
}
//Este mtodo Graba los datos ingresados de un nuevo libro
//Primero verifica que no exista otro libro con el mismo cdigo
//Luego registra los datos del nuevo libro
//Finalmente lo aade al arreglo de documentos
//Si ya existe el codigo, mostrar un mensaje
public void grabarDocumento(){
String codigoDocumento = jtxfCodigo.getText().trim();
if(devolverIndiceDelDocumentoEnElArreglo(codigoDocumento) < 0){
arregloRelacionado.aadeDocumento( registrarNuevoLibro() );
JOptionPane.showMessageDialog(null,"Operacin realizada con xito.",
"Grabar Libro",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"El cdigo YA existe, ingrese un nuevo cdigo.",
"Grabar Libro",JOptionPane.WARNING_MESSAGE);
}
}
//Este mtodo muestra los datos de un objeto de tipo libro
//Para lo cual, primero busca si se encuentra dicho libro,
//lo hace comparando con el cdigo ingresado
//Si el cdigo Si existe, se invoca al metod 'cargarDatosDelLibroEnElFormulario'
//Si el cdigo No existe se mostrar un mensaje
public void mostrarDocumento(){
ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();
String codigoDocumento = jtxfCodigo.getText().trim();
int indice = devolverIndiceDelDocumentoEnElArreglo(codigoDocumento);
if(indice >= 0){
Documento doc = (Documento)arregloAuxiliar.get(indice);
cargarDatosDelLibroEnElFormulario((Libro)doc);
JOptionPane.showMessageDialog(null,"Libro encontrado.",
"Mostrar Libro",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"No existe el cdigo ingresado.",
"Mostrar Libro",JOptionPane.WARNING_MESSAGE);
}
}
//Este mtodo actualiza el atributo estado del libro a 'true'
//Primero verifica que si existe el libro
//Luego modifica el atributo 'estado' del libro
//Finalmente lo aade en su mismo indice dentro arreglo de documentos
//Si No existe el codigo ingresado, se mostrar un mensaje
//Si el valor del atributo estado es 'true', se mostrar un mensaje
public void activarDocumento(){
ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();
String codigoDocumento = jtxfCodigo.getText().trim();
int indice = devolverIndiceDelDocumentoEnElArreglo(codigoDocumento);
if(indice >= 0){
Documento doc = (Documento)arregloAuxiliar.get(indice);
Libro libro = (Libro)doc;
if(libro.getEstado()){
JOptionPane.showMessageDialog(null,"Libro YA estaba activado.",
"Inactivar Libro",JOptionPane.WARNING_MESSAGE);
}else{
Prof. Arn Elas Herrera Ponte
Pg. 25
Algortmica II
}else{
JOptionPane.showMessageDialog(null,"No existe el cdigo ingresado.",
"Activar Libro",JOptionPane.WARNING_MESSAGE);
}
}
//Este mtodo actualiza el atributo estado del libro a 'false'
//Primero verifica que si existe el libro
//Luego modifica el atributo 'estado' del libro
//Finalmente lo aade en su mismo indice dentro arreglo de documentos
//Si No existe el codigo ingresado, se mostrar un mensaje
//Si el valor del atributo estado es 'false', se mostrar un mensaje
public void inactivarDocumento(){
ArrayList arregloAuxiliar = arregloRelacionado.devuelveElArregloDeDocumentos();
String codigoDocumento = jtxfCodigo.getText().trim();
int indice = devolverIndiceDelDocumentoEnElArreglo(codigoDocumento);
if(indice >= 0){
Documento doc = (Documento)arregloAuxiliar.get(indice);
Libro libro = (Libro)doc;
if(libro.getEstado()){
libro.setEstado(false);
arregloRelacionado.insertaDocumentoPorIndice(indice,libro);
cargarDatosDelLibroEnElFormulario(libro);
JOptionPane.showMessageDialog(null,"Libro inactivado.",
"Inactivar Libro",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"Libro YA estaba inactivado.",
"Inactivar Libro",JOptionPane.WARNING_MESSAGE);
}
}else{
JOptionPane.showMessageDialog(null,"No existe el cdigo ingresado.",
"Inactivar Libro",JOptionPane.WARNING_MESSAGE);
}
}
}
jpanMantenimientoRevista
A continuacin se presenta a la clase hija jpanMantenimientoRevista, que hereda de
la clase jpanMantenimientoDocumento. Esta clase se utiliza para crear el panel para
el registro de una Nueva Revista.
Este panel HEREDA el diseo un formulario tpico de Mantenimiento, el cual tiene
una barra de herramientas con botones que realizan las operaciones de (1) Nuevo,
(2) Grabar, (3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.
Este panel hereda todos los atributos y mtodos de su clase Padre.
Pg. 26
Algortmica II
public
public
public
public
void
void
void
void
grabarDocumento(){ }
mostrarDocumento(){ }
activarDocumento(){ }
inactivarDocumento(){ }
La clase jpanMantenimientoRevista
package Biblioteca.Formularios;
import Biblioteca.Clases.ArregloDeDocumentos;
public class jpanMantenimientoRevista extends jpanMantenimientoDocumento{
public jpanMantenimientoRevista(jpanFondo jpanelFondo,
String tipoDocumento,
ArregloDeDocumentos arreglo){
super(jpanelFondo, tipoDocumento, arreglo);
}
public void grabarDocumento(){
Prof. Arn Elas Herrera Ponte
Pg. 27
Algortmica II
}
public void mostrarDocumento(){
}
public void activarDocumento(){
}
public void inactivarDocumento(){
}
}
jpanMantenimientoTesis
A continuacin se presenta a la clase hija jpanMantenimientoTesis, que hereda de la
clase jpanMantenimientoDocumento. Esta clase se utiliza para crear el panel para el
registro de una Nueva Tesis.
Este panel HEREDA el diseo un formulario tpico de Mantenimiento, el cual tiene
una barra de herramientas con botones que realizan las operaciones de (1) Nuevo,
(2) Grabar, (3) Mostrar, (4) Activar, (5) Inactivar, y (6) Salir.
Este panel hereda todos los atributos y mtodos de su clase Padre.
Esta clase jpanMantenimientoTesis implementa los 4 mtodos abstractos definidos
en la clase Padre:
public
public
public
public
void
void
void
void
grabarDocumento(){ }
mostrarDocumento(){ }
activarDocumento(){ }
inactivarDocumento(){ }
Pg. 28
Algortmica II
La clase jpanMantenimientoTesis
package Biblioteca.Formularios;
import Biblioteca.Clases.ArregloDeDocumentos;
public class jpanMantenimientoTesis extends jpanMantenimientoDocumento{
public jpanMantenimientoTesis(jpanFondo jpanelFondo,
String tipoDocumento,
ArregloDeDocumentos arreglo){
super(jpanelFondo, tipoDocumento, arreglo);
}
public void grabarDocumento(){
}
public void mostrarDocumento(){
}
public void activarDocumento(){
}
public void inactivarDocumento(){
}
}
jfrmPrincipal
A continuacin se presenta a la clase jfrmPrincipal, que hereda de la clase Jrame
(javax.swing.JFrame). Esta clase se utiliza para crear el formulario principal del
sistema.
Esta clase jfrmPrincipal se van a agregar los dems paneles (formularios) que se
han diseado para usarse en el sistema.
Esta clase jfrmPrincipal tiene al mtodo main. Por lo tanto, es en clase, donde
tenemos que ejecutar el sistema (Proceso de Ejecucin - RUN)
Pg. 29
Algortmica II
Pg. 30
Algortmica II
La clase jfrmPrincipal
//Declaramos el nombre del paquete donde se encuentra la clase 'jfrmPrincipal'
package Biblioteca.Formularios;
//Declaramos las librerias del Java que necesitamos usar
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.CardLayout;
//Importamos la clase 'ArregloDeDocumentos', que se encuentra en otro paquete
import Biblioteca.Clases.ArregloDeDocumentos;
//Declaracin de la clase 'jfrmPrincipal' que hereda de un 'JFrame'
public class jfrmPrincipal extends JFrame{
//Declaracin de Atributos
//Declaracin de componentes grficos swing para crear la GUI
private jpanFondo jpanelFondo;
private jpanBarraDeMenu jpanelBarra;
private jpanInicio jpanelInicio;
private jpanValidarUsuario jpanelValidarUsuario;
private jpanMantenimientoLibro jpanelMantLibro;
private jpanMantenimientoRevista jpanelMantRevista;
private jpanMantenimientoTesis jpanelMantTesis;
//Declaracin del objeto que referenciar a la zona de memoria donde se
//est guardando los objetos de tipo Documento
private ArregloDeDocumentos arregloRelacionado;
//Este es el mtodo constructor por parmetro
//le llega por parmetro la referencia de un objeto de tipo 'ArregloDeDocumentos'
//luego invoca o llama al mtodo 'iniciarComponentes()'
public jfrmPrincipal(ArregloDeDocumentos arreglo){
//Referenciamos al objeto creado en el mtodo 'main'
this.arregloRelacionado = arreglo;
iniciarComponentes();
}
//Este mtodo instancia los objetos o componentes grficos
//que se van a mostrar dentro del JFrame (marco o contorno)
public void iniciarComponentes(){
//Indicamos el ttulo del formulario
this.setTitle("Sistema de Biblioteca");
//Indicamos el tamao del formulario
this.setSize(800,600);
//Desactivamos el boton Maximizar
this.setResizable(false);
//Llamamos al mtodo que centra la ventana 'jfrmPrincipal'
centrarVentana();
//Indicamos que no tenga Administrador de Diseo
this.setLayout(null);
//Instanciamos el JPanel 'jpanelFondo'
Prof. Arn Elas Herrera Ponte
Pg. 31
Algortmica II
Pg. 32
Algortmica II
TAREA
1. Se pide implementar los mtodos de las clases: (1) jpanMantenimientoRevista y (2)
jpanMantenimientoTesis. De tal manera que funcionen las opciones de la barra de
men para Revista y Tesis.
Es decir implementar las opciones: Nuevo, Grabar, Mostrar, Activar, Inactivar y Salir,
para la Revista y Tesis.
2. Se pide crear la clase Persona, que declare los atributos y mtodos generales de toda
persona. Luego crear las clases hijas Alumno y Profesor, que heredan de Persona.
Adems crear una clase llamada ArregloDePersonas, que se utilice para almacenar
objetos de tipo Persona (que puede ser Alumno o Profesor), se recomienda guiarse de
la clase ArregloDeDocumentos.
3. Se
pide
implementar
el
formulario
de
mantenimiento
(JPanel)
jpanMatenimientoPersona, que disee la interface grfica de usuario (GUI) para el
registro
de
una
Persona.
Se
recomienda
guiarse
de
la
clase
jpanMantenimientoDocumento. Luego
se pide
crear las clases hijas
jpanMantenimientoAlumno y jpanMantenimientoProfesor que implementen los
mtodos propios del registro de un Alumno y Profesor respectivamente. Se recomienda
guiarse de la clase jpanMantenimientoLibro.
4. Se pide adicionar un nuevo JMenu dentro de la barra de men llamada jmnbBarra.
Este nuevo JMenu ser etiquetado como Registro. Luego se pide crear 2 JMenuItem,
uno etiquetado como Alumno y otro etiquetado como Profesor. Finalmente se pide
implementar los eventos necesarios para invocar a los formularios
jpanMantenimientoAlumno y jpanMantenimientoProfesor respectivamente desde
la barra de men.
Pg. 33
Algortmica II
Pg. 34