Documente Academic
Documente Profesional
Documente Cultură
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
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
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
}
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
Pg. 4
Algortmica II
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
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)
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
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
}
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
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
}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
}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);
}
}
}
Pg. 10
Algortmica II
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
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
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
Se ingresa la opcin
9
Process completed.
Pg. 14