Vous êtes sur la page 1sur 14

Universidad Nacional Mayor de San Marcos Facultad de Ingeniera de Sistemas e Informtica E.A.P.

de Ingeniera de Sistemas Algortmica II

GUIA C DE LABORATORIO
ARREGLO DE OBJETOS
Objetivo: Aplicar los conceptos de la Programacin Orientada a Objetos. 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 las clases Producto, ArregloDeProducto, ReporteAlmacen. El objetivo es comprender como se relacionan estas clases. 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 objetos. 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. Clase Producto A continuacin se presenta la clase Producto, que define los atributos y mtodos ms importantes de un objeto real Producto, obtenidos mediante el proceso de la ABSTRACCIN. Por ejemplo: una COMPUTADORA Cdigo Descripcin Cantidad Precio Fecha de Vencimiento Estado COMP1000 Pentium IV 1500 2300 10/05/2038 Trae

La clase Producto implementa un mtodo constructor, varios mtodos de tipo SET y GET, un mtodo llamado descripcionEstado() y al mtodo toString()

Pasos a seguir 1:
1. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado. 2. Generar el archivo Producto.class (Proceso de Compilacin)

Nota:
Las clases utilizan los mtodos de la clase Base.java, que se encuentra en el paquete ClasesBase

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

La clase Producto
package Almacen; import java.util.Date; public class Producto { private String codigo; private String descripcion; private int cantidad; private double precio; private Date fechaDeVencimiento; private boolean estado; public Producto(){ this.codigo = "1000"; this.descripcion = "Computadora"; this.cantidad = 50; this.precio = 1500; this.fechaDeVencimiento = new Date(); this.estado = true; } public void setCodigo(String codigo) { this.codigo = codigo; } public void setDescripcion(String descripcion) { this.descripcion = descripcion; } public void setCantidad(int cantidad) { this.cantidad = cantidad; } public void setPrecio(double precio) { this.precio = precio; } public void setFechaDeVencimiento(Date fechaDeVencimiento) { this.fechaDeVencimiento = fechaDeVencimiento; } public void setEstado(boolean estado) { this.estado = estado; } public String getCodigo() { return (this.codigo); } public String getDescripcion() { return (this.descripcion); } public int getCantidad() { return (this.cantidad); Pg. 2

Algortmica II } public double getPrecio() { return (this.precio); } public Date getFechaDeVencimiento() { return (this.fechaDeVencimiento); } public boolean getEstado() { return (this.estado); } public String descripcionEstado(){ if(this.estado){ return "ACTIVO"; }else{ return "DESACTIVO"; } } public String toString() {

Gua C de Laboratorio Arreglo de Objetos

String sep = System.getProperty("line.separator"); StringBuffer buffer = new StringBuffer(); buffer.append(sep); buffer.append("codigo = "); buffer.append(codigo); buffer.append(sep); buffer.append("descripcion = "); buffer.append(descripcion); buffer.append(sep); buffer.append("cantidad = "); buffer.append(cantidad); buffer.append(sep); buffer.append("precio = "); buffer.append(precio); buffer.append(sep); buffer.append("fechaDeVencimiento = "); buffer.append(fechaDeVencimiento); buffer.append(sep); buffer.append("estado = "); buffer.append(descripcionEstado()); buffer.append(sep); return buffer.toString(); } }

Clase ArregloDeProducto A continuacin se presenta la clase ArregloDeProducto, que define los atributos y mtodos ms importantes de un arreglo de objetos real Producto, obtenidos mediante el proceso de la ABSTRACCIN. Los mtodos del auto son: aadir producto, en este mtodo se pide ingresar un CODIGO de producto (cadena de caracteres), seguidamente se verifica si YA existe dicho cdigo dentro Pg. 3

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

del arreglo de productos. Si Ya existe dicho cdigo, el programa no permite aadir un nuevo producto. Si NO existe dicho cdigo, el programa continua con el registro de los datos del nuevo producto. Por ello, el programa solicitar ingresar DESCRIPCION (cadena de caracteres), CANTIDAD (numero entero), PRECIO (nmero real), FECHA DE VENCIMIENTO (cadena de caracteres con el siguiente formato dd/mm/aaaa; ejemplo: 15/05/2005). Notar que no se pide ingresar el atributo ESTADO, dado que este es asignado con el valor de true dentro del mtodo constructor por defecto. Para cumplir con este mtodo aadirProducto() se invocan al mtodo devolverPosicionDelProducto() que tiene como parmetro al CODIGO del producto a buscar dentro del arreglo de productos. Este mtodo devuelve un valor entero. Si devuelve -1, es porque dentro del arreglo de productos NO SE ENCUENTRA el cdigo enviado por parmetro. Caso contrario devolver un valor entero, que puede ser 0, 1, 2, ... dependiendo del ndice donde se encuentre dicho cdigo de producto. A su vez tambin se utiliza al mtodo registrarProducto() dentro del cual se instancia un objeto de tipo Producto, para luego llenar el valor de sus atributos con los datos que se piden ingresar por teclado. Mostrar arreglo de productos, en este mtodo se verifica si hay productos dentro del arreglo de productos. Si la cantidad de productos es CERO, se mostrar un mensaje indican que no existen productos en el almacn. Caso contrario, se recorre con un bucle for al arreglo de productos, por cada iteracin se obtiene a un objeto de tipo Producto y se imprime sus datos utilizando el mtodo toString. buscar producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a buscar. En caso que si se encuentre, el programa debe mostrar sus datos. Caso contrario el programa debe indicar que no existe el cdigo ingresado. modificar datos del producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a modificar sus datos (Descripcin, Cantidad, Precio, Fecha de Vencimiento). En caso que si se encuentre, el programa debe mostrar un SUB MENU, donde se escoja al Dato a modificar (uno solo). Caso contrario el programa debe indicar que no existe el cdigo ingresado. activar estado del producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a activar. En caso que si se encuentre, el programa debe verificar si el estado del producto es activo (true) o si el estado del producto es inactivo (false). Si el estado del producto es activo, se debe mostrar un mensaje indicando que el estado YA esta ACTIVO. Caso contrario el programa debe cambiar de estado INACTIVO a estado ACTIVO. Recordar que si no existe el cdigo ingresado se debe mostrar un mensaje. desactivar estado del producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a desactivar. En caso que si se encuentre, el programa debe verificar si el estado del producto es activo (true) o si el estado del producto es inactivo (false). Si el estado del producto es inactivo, se debe mostrar un mensaje indicando que el estado YA esta INACTIVO. Caso contrario el programa debe cambiar de estado ACTIVO a estado INACTIVO. Recordar que si no existe el cdigo ingresado se debe mostrar un mensaje. eliminar producto, PARA IMPLEMENTAR, en este mtodo se pide ingresar el CODIGO del producto a eliminar. En caso que si se encuentre, el programa debe eliminar cualquier referencia que se tenga a dicho objeto. De tal manera que no se puede acceder a dicha zona de memoria. Recordar que si se pierde la referencia de un objeto, este queda lista para ser recogido por el GARBAGE COLLECTOR. Se recomienda utilizar el mtodo remove de la clase ArrayList.

Pg. 4

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

reportes, PARA IMPLEMENTAR, en este mtodo se hace uso del objeto reporte de la clase ReporteAlmacen. Este objeto reporte invocar a su mtodo men() el cual mostrar un men con los diferentes tipos de reportes que tiene nuestro Almacn, los cuales son: Producto ms costoso Productos con cantidades mnimas permitidas Productos con cantidades igual a 0 (cero) Productos con fecha de Vencimiento vencidas Productos desactivados Productos ordenados por Codigo Productos ordenados por Descripcion Productos ordenados por Cantidad Productos ordenados por Precio Cada opcin del reporte es un mtodo dentro de la clase ReporteAlmacen.

Pasos a seguir 2:
3. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado. 4. Generar el archivo ArregloDeProducto.class (Proceso de Compilacin) NOTA: RECORDAR QUE SI DESEAMOS DECLARAR UN OBJETO DE UNA CLASE, PRIMERO SE DEBE COMPILAR DICHA CLASE. Por ejemplo: private ReporteAlmacen reporte; En este cdigo se desea declarar al objeto reporte, pero primero debe compilarse la clase ReporteAlmacen.

A continuacin:
1. Completar la implementacin de todas las opciones del men.

La clase ArregloDeProducto
package Almacen; import ClasesBase.Base; import java.util.Date; import java.util.ArrayList; import javax.swing.JOptionPane; public class ArregloDeProducto { private ArrayList arreglo; private ReporteAlmacen reporte; public ArregloDeProducto(){ this.arreglo = new ArrayList(); this.reporte = new ReporteAlmacen(arreglo); }

Pg. 5

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

public int devolverPosicionDelProducto(String codigo){ int posicion = -1; for (int indice = 0; indice < arreglo.size() ; indice++){ Producto auxiliar = (Producto)arreglo.get(indice); if(auxiliar != null){ if(auxiliar.getCodigo().equals(codigo)){ return indice; } } } return posicion; } public Producto registrarProducto(String codigo){ String dato; Producto prod = new Producto(); prod.setCodigo(codigo); dato = Base.ingresarDato("Ingrese la DESCRIPCION del Producto:"); prod.setDescripcion(dato); dato = Base.ingresarDato("Ingrese la CANTIDAD del Producto:"); prod.setCantidad(Base.aEntero(dato)); dato = Base.ingresarDato("Ingrese el PRECIO del Producto:"); prod.setPrecio(Base.aReal(dato)); dato = Base.ingresarDato("Ingrese la FECHA DE VENCIMIENTO del Producto:"); Date fecha = new Date(dato); prod.setFechaDeVencimiento(fecha); return prod; } public void aadirProducto(){ String codigo; String mensaje; int tipoDeIcono; codigo = Base.ingresarDato("Ingrese el CODIGO del Producto:"); if(devolverPosicionDelProducto(codigo) < 0){ arreglo.add(registrarProducto(codigo)); mensaje = "El Producto ha sido REGISTRADO con xito."; tipoDeIcono = JOptionPane.INFORMATION_MESSAGE; }else{ mensaje = "El cdigo ingresado, YA xiste."; tipoDeIcono = JOptionPane.WARNING_MESSAGE; } JOptionPane.showMessageDialog(null, mensaje, "Aadir Producto", tipoDeIcono); } public void mostrarArregloDeProducto(){ String mensaje; int tipoDeIcono; Pg. 6

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

if(arreglo.size() > 0){ for(Object obj : arreglo){ Producto prod = (Producto)obj; System.out.print(prod.toString()); } mensaje = "Productos mostrados con xito."; tipoDeIcono = JOptionPane.INFORMATION_MESSAGE; }else{ mensaje = "No existen Productos en el Almacen."; tipoDeIcono = JOptionPane.INFORMATION_MESSAGE; } JOptionPane.showMessageDialog(null, mensaje, "Mostrar Producto", tipoDeIcono); } public void menu(){ int opcion; String cadena[]={"1.- Aadir Producto", "2.- Mostrar Productos", "3.- Buscar Producto", "4.- Modificar datos del Producto", "5.- Activar estado del Producto", "6.- Desactivar (anular) estado del Producto", "7.- Eliminar Producto", "8.- Reportes", "9.- Salir"}; do{ System.out.println("MENU DEL ALMACEN"); opcion = Base.pintarMenu(cadena); switch(opcion){ case 1: aadirProducto(); break; case 2: mostrarArregloDeProducto(); break; case 8: reporte.menu(); break; } }while(opcion!=cadena.length); } }

Pasos a seguir 3:
5. Escribir el siguiente cdigo Java, utilizando un Entorno de Desarrollo Integrado. 6. Generar el archivo ReporteAlmacen.class (Proceso de Compilacin)

A continuacin:
2. Completar la implementacin de todas las opciones del men.

Pg. 7

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

La clase ReporteAlmacen
package Almacen; import ClasesBase.Base; import java.util.ArrayList; import javax.swing.JOptionPane; public class ReporteAlmacen { private ArrayList arreglo; public ReporteAlmacen(ArrayList arregloReferencia){ this.arreglo = arregloReferencia; } public void menu(){ int opcion; String cadena[]={"1.- Producto mas costoso", "2.- Productos con cantidades mnimas permitidas", "3.- Productos con cantidades igual a 0 (cero)", "4.- Productos con fecha de Vencimiento vencidas", "5.- Productos desactivados", "6.- Productos ordenados por Codigo", "7.- Productos ordenados por Descripcion", "8.- Productos ordenados por Cantidad", "9.- Productos ordenados por Precio", "10.- Salir"}; do{ System.out.println("REPORTES DEL ALMACEN"); opcion = Base.pintarMenu(cadena); switch(opcion){ case 1: hallarProductoMasCostoso(); break; case 6: ordenarArregloDeProductoPorCodigo(); break; } }while(opcion!=cadena.length); } public Producto devolverProducto(int indice){ return (Producto)arreglo.get(indice); } public void hallarProductoMasCostoso(){ double maximo; int indice, i; String mensaje; int tipoDeIcono; if(arreglo.size() > 0){ maximo = -1; indice = 0; i = 0; //Recorro el arreglo de productos //Hacemos un 'if' para saber cual es mayor precio Pg. 8

Algortmica II

Gua C de Laboratorio Arreglo de Objetos //Guardamos el indice donde se encuentra dicho producto for(Object obj : arreglo){ Producto prod = (Producto)obj; if(prod.getPrecio() > maximo){ maximo = prod.getPrecio(); indice = i; } i++; } //Invocamos al mtodo 'devolverProducto()' //se le pasa por parmetro el indice //este mtodo nos devuelve un OBJETO Producto //al cual le aplicamos su mtodo 'toString()' mensaje = devolverProducto(indice).toString(); tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;

}else{ mensaje = "No existen Productos en el Almacen."; tipoDeIcono = JOptionPane.INFORMATION_MESSAGE; } JOptionPane.showMessageDialog(null, mensaje, "Producto mas costoso", tipoDeIcono); } //Utilizamos el mtodo de la BURBUJA para ordernar los Productos public void ordenarArregloDeProductoPorCodigo(){ int i, j; if(arreglo.size() > 0){ //Inicio de la Burbuja for (i = 0; i<arreglo.size()-1; i++){ for (j = 0; j<arreglo.size()-1; j++){ Producto A = (Producto)arreglo.get(j); Producto B = (Producto)arreglo.get(j+1); //El mtodo compareTo() de la clase String //Toma en cuenta el orden Alfabetico del String //devuelve > 0 cuando BETO > ANA (B es mayor que A) //devuelve == 0 cuando BETO == BETO (B es igual que B) //devuelve < 0 cuando ANA < BETO (A es menor que B) //Recordar: Es muy parecido al 'strcmp( , )' del C++ if(A.getCodigo().compareTo(B.getCodigo()) > 0){ Producto aux = A; arreglo.set(j,B); arreglo.set(j+1,aux); } } } //Fin de la Burbuja //Invocamos al mtodo que recorre el Arreglo de Productos //para imprimir sus datos por Consola imprimirArregloDeProducto(); }else{ String mensaje = "No existen Productos en el Almacen."; int tipoDeIcono = JOptionPane.INFORMATION_MESSAGE; Pg. 9

Algortmica II

Gua C de Laboratorio Arreglo de Objetos JOptionPane.showMessageDialog(null, mensaje, "Ordenamiento por Codigo", tipoDeIcono);

} } public void imprimirArregloDeProducto(){ if(arreglo.size() > 0){ String dato; System.out.println("Listado de Productos..."); System.out.println("***********************"); //Recorremos el arreglo de productos //Obtenemos cada producto //Concatenamos sus atributos y lo asignamos a 'dato' //Imprimimos en una sola linea todos los datos del producto for(Object obj : arreglo){ Producto prod = (Producto)obj; dato = prod.getCodigo() + " " + prod.getDescripcion() + " " + prod.getCantidad() + " " + prod.getPrecio(); System.out.println(dato); } System.out.println("***********************"); }else{ String mensaje = "No existen Productos en el Almacen."; int tipoDeIcono = JOptionPane.INFORMATION_MESSAGE; JOptionPane.showMessageDialog(null, mensaje, "Producto mas costoso", tipoDeIcono); } } }

Pg. 10

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

EJECUCIN del Programa


Se muestra el men de opciones MENU DEL ALMACEN 1.- Aadir Producto 2.- Mostrar Productos 3.- Buscar Producto 4.- Modificar datos del Producto 5.- Activar estado del Producto 6.- Desactivar (anular) estado del Producto 7.- Eliminar Producto 8.- Reportes 9.- Salir Ingrese su opcion: Se ingresa la opcin 1 Se ingresan los datos Ingrese el CODIGO del Producto:COMP1000 Ingrese la DESCRIPCION del Producto:Pentium IV Ingrese la CANTIDAD del Producto:1500 Ingrese el PRECIO del Producto:2300 Ingrese la FECHA DE VENCIMIENTO del Producto:10/05/2038

Se ingresa la opcin 2 codigo = COMP1000 descripcion = Pentium IV cantidad = 1500 precio = 2300.0 fechaDeVencimiento = Tue Oct 05 00:00:00 COT 2038 estado = ACTIVO

Se ingresa la opcin 1 Ingrese el CODIGO del Producto:COMP099 Ingrese la DESCRIPCION del Producto:MONITOR Pg. 11

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

Ingrese la CANTIDAD del Producto:800 Ingrese el PRECIO del Producto:450 Ingrese la FECHA DE VENCIMIENTO del Producto:12/10/2010

Se ingresa la opcin 2 codigo = COMP1000 descripcion = Pentium IV cantidad = 1500 precio = 2300.0 fechaDeVencimiento = Tue Oct 05 00:00:00 COT 2038 estado = ACTIVO codigo = COMP099 descripcion = MONITOR cantidad = 800 precio = 450.0 fechaDeVencimiento = Fri Dec 10 00:00:00 COT 2010 estado = ACTIVO

Se ingresa la opcin 8 REPORTES DEL ALMACEN 1.- Producto mas costoso 2.- Productos con cantidades mnimas permitidas 3.- Productos con cantidades igual a 0 (cero) 4.- Productos con fecha de Vencimiento vencidas 5.- Productos desactivados 6.- Productos ordenados por Codigo 7.- Productos ordenados por Descripcion 8.- Productos ordenados por Cantidad 9.- Productos ordenados por Precio 10.- Salir Ingrese su opcion: Se ingresa la opcin 1

Pg. 12

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

Se ingresa la opcin 6 Listado de Productos... *********************** COMP099 MONITOR 800 450.0 COMP1000 Pentium IV 1500 2300.0 *********************** Se ingresa la opcin 10 MENU DEL ALMACEN 1.- Aadir Producto 2.- Mostrar Productos 3.- Buscar Producto 4.- Modificar datos del Producto 5.- Activar estado del Producto 6.- Desactivar (anular) estado del Producto 7.- Eliminar Producto 8.- Reportes 9.- Salir Ingrese su opcion: Se ingresa la opcin 2 codigo = COMP099 descripcion = MONITOR cantidad = 800 precio = 450.0 fechaDeVencimiento = Fri Dec 10 00:00:00 COT 2010 estado = ACTIVO codigo = COMP1000 descripcion = Pentium IV cantidad = 1500 precio = 2300.0 fechaDeVencimiento = Tue Oct 05 00:00:00 COT 2038 estado = ACTIVO

Pg. 13

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

Se ingresa la opcin 9 Process completed.

Pg. 14

Vous aimerez peut-être aussi