Вы находитесь на странице: 1из 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);
Prof. Arn Elas Herrera Ponte

Pg. 2

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

}
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() {
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
Prof. Arn Elas Herrera Ponte

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
Prof. Arn Elas Herrera Ponte

Pg. 4

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

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.
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;
Prof. Arn Elas Herrera Ponte

Pg. 5

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

public ArregloDeProducto(){
this.arreglo = new ArrayList();
this.reporte = new ReporteAlmacen(arreglo);
}
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);
Prof. Arn Elas Herrera Ponte

Pg. 6

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

}
public void mostrarArregloDeProducto(){
String mensaje;
int tipoDeIcono;
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)
Prof. Arn Elas Herrera Ponte

Pg. 7

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

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

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;
Prof. Arn Elas Herrera Ponte

Pg. 8

Algortmica II

Gua C de Laboratorio Arreglo de Objetos


indice = 0;
i = 0;
//Recorro el arreglo de productos
//Hacemos un 'if' para saber cual es mayor precio
//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();
Prof. Arn Elas Herrera Ponte

Pg. 9

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

}else{
String mensaje = "No existen Productos en el Almacen.";
int tipoDeIcono = JOptionPane.INFORMATION_MESSAGE;
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);
}
}
}

Prof. Arn Elas Herrera Ponte

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
Prof. Arn Elas Herrera Ponte

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

Prof. Arn Elas Herrera Ponte

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

Prof. Arn Elas Herrera Ponte

Pg. 13

Algortmica II

Gua C de Laboratorio Arreglo de Objetos

Se ingresa la opcin
9
Process completed.

Prof. Arn Elas Herrera Ponte

Pg. 14

Вам также может понравиться