Autor Tema: Java planteamiento de esquemas herencia BlueJ Concepto de polimorfismo. CU00688B  (Leído 2247 veces)

Luis Fdo Carvajal

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 37
    • Ver Perfil
Respuesta al ejercicio CU00688B del tutorial práctico de programación Java con entorno BlueJ

Citar
Amplía el código del programa Java que planteamos como ejercicio en la entrega CU00687 de este curso, relativo a la gestión de una empresa agroalimentaria, teniendo en cuenta que la empresa gestiona envíos a través de diferentes medios, y un envío puede contener cierto número de productos frescos, refrigerados o congelados.

Añade al código:

a) Una clase EnvioDeProductos que represente un envío de productos como colección de objetos que admite el polimorfismo.

b) Crear una clase testHerencia4 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por aire y 1 por nitrógeno). Crear un envío que represente la agrupación de los anteriores productos. Mostrar por pantalla la información del número de productos que componen el envío y recorrer los productos del envío usando iterator para mostrar la información (valor de los atributos) de cada uno de ellos.

Bueno, he observado el desarrollo de algunos compañeros del foro, pero me inclino más a utilizar la clase calendar para no crear listas con string de fechas. Creo que esta solución lo realiza sin embargo no he podido implementar el iterator que pide el ejercicio.
Código: [Seleccionar]
package empresagroalimentaria3;
import java.util.Calendar;




public class TestHerencia3{

    public static void main(String [] Args) {
       
        System.out.println ("Empezamos el programa");
       
        EnvioDeProductos envioProductos = new EnvioDeProductos();
        Calendar fechaCaducidad = Calendar.getInstance();
        Calendar fechaEnvasado = Calendar.getInstance();
        fechaCaducidad.set(2025,2,10);
        fechaEnvasado.set(2010,11,9);
        envioProductos.crearEnvio(new CongeladoAgua(fechaCaducidad, 2000, 20, fechaEnvasado, "China", -30));
        CongeladoAgua CongeladoAgua = new CongeladoAgua (fechaCaducidad, 2000, 20, fechaEnvasado, "China", -30);
        fechaCaducidad.set(2025,2,10);
        fechaEnvasado.set(2010,11,9);
        envioProductos.crearEnvio(new CongeladoAgua(fechaCaducidad, 2001, 20, fechaEnvasado, "Japón", -30));
        CongeladoAgua CongeladoAgua1 = new CongeladoAgua (fechaCaducidad, 2001, 20, fechaEnvasado, "Japón", -30);
        fechaCaducidad.set(2022,8,10);
        fechaEnvasado.set(2011,3,4);
        envioProductos.crearEnvio(new CongeladoAire(fechaCaducidad, 3000, 20, fechaEnvasado, "Japón", 10,05,01,03,01));
        CongeladoAire CongeladoAire = new CongeladoAire (fechaCaducidad, 3000, 20, fechaEnvasado, "Japón", 10,05,01,03,01);
        fechaCaducidad.set(2019,1,1);
        fechaEnvasado.set(2016,12,12);
        envioProductos.crearEnvio(new CongeladoAire(fechaCaducidad, 3001, 20, fechaEnvasado, "Japón", 10,5,2,4,1));
        CongeladoAire CongeladoAire1 = new CongeladoAire (fechaCaducidad, 3001, 20, fechaEnvasado, "Japón", 10,5,2,4,1);
        fechaCaducidad.set(2022,8,10);
        fechaEnvasado.set(2011,3,4);
        envioProductos.crearEnvio(new CongeladoNitrogeno(fechaCaducidad, 4000, 20, fechaEnvasado, "Japon", 30));
        CongeladoNitrogeno CongeladoNitrogeno = new CongeladoNitrogeno (fechaCaducidad, 4000, 20, fechaEnvasado, "Japon", 30);       
        fechaCaducidad.set(2020,1,3);
        fechaEnvasado.set(2016,12,12);
        envioProductos.crearEnvio(new ProductosFresco(fechaCaducidad, 5000, fechaEnvasado,"Paraguay"));
        ProductosFresco productosFresco = new ProductosFresco (fechaCaducidad, 5000, fechaEnvasado,"Paraguay");       
        fechaCaducidad.set(2025,2,10);
        fechaEnvasado.set(2010,11,9);
        envioProductos.crearEnvio(new ProductosFresco(fechaCaducidad, 5001, fechaEnvasado,"Brazil"));
        ProductosFresco productosFresco1 = new ProductosFresco (fechaCaducidad, 5001, fechaEnvasado,"Brazil");
        fechaCaducidad.set(2019,1,1);
        fechaEnvasado.set(2016,12,12);
        envioProductos.crearEnvio(new ProductoRefrigerado(fechaCaducidad,6000,"INV500",fechaEnvasado ,26,"Rusia"));
        ProductoRefrigerado productoRefrigerado = new ProductoRefrigerado (fechaCaducidad,6000,"INV500",fechaEnvasado ,26,"Rusia");   
        fechaCaducidad.set(2020,1,3);
        fechaEnvasado.set(2016,12,12);
        envioProductos.crearEnvio(new ProductoRefrigerado(fechaCaducidad,6001,"INV5001",fechaEnvasado ,26,"España"));
        ProductoRefrigerado productoRefrigerado1 = new ProductoRefrigerado (fechaCaducidad,6001,"INV5001",fechaEnvasado ,26,"España");     
        fechaCaducidad.set(2020,1,3);
        fechaEnvasado.set(2016,12,12);
        envioProductos.crearEnvio(new ProductoRefrigerado(fechaCaducidad,6002,"INV5002",fechaEnvasado ,26,"Bulgaria"));
        ProductoRefrigerado productoRefrigerado2 = new ProductoRefrigerado (fechaCaducidad,6002,"INV5002",fechaEnvasado ,26,"Bulgaria");

       
         //Muestro por pantalla la información del número de productos que componen el envio
System.out.println("El número de productos que componen el envio es: "+envioProductos.getListaProductos().size());
       
        //Llamada a los métodos de muestreo productos
        CongeladoAgua.muestraInfoCongeladoAgua();//Llamada a los métodos de muestreo productos
        CongeladoAgua1.muestraInfoCongeladoAgua();//Llamada a los métodos de muestreo productos
        CongeladoAire.muestraInfoCongeladoAire();//Llamada a los métodos de muestreo productos
        CongeladoAire1.muestraInfoCongeladoAire();//Llamada a los métodos de muestreo productos
        CongeladoNitrogeno.muestraInfoCongeladoNitrogeno();//Llamada a los métodos de muestreo productos
        productosFresco.muestraInfoProdFresco();//Llamada a los métodos de muestreo productos
        productosFresco1.muestraInfoProdFresco();//Llamada a los métodos de muestreo productos
        productoRefrigerado.muestraInfoProdRefrigerado();//Llamada a los métodos de muestreo productos
        productoRefrigerado1.muestraInfoProdRefrigerado();
        productoRefrigerado2.muestraInfoProdRefrigerado();
       
       
        System.out.println ("Gracias");
       
       
    }
}
Código: [Seleccionar]
package empresagroalimentaria3;
import java.util.Calendar;

/**
 *
 * @author itco1724
 */
public class ProductosFresco extends Producto
{
    Calendar fechaEnvasado;
    private String paisDeOrigen;


    public ProductosFresco(Calendar fechaCaducidad, int numeroLote, Calendar fechaEnvasado, String paisDeOrigen)
    {
        super (fechaCaducidad, numeroLote, fechaEnvasado, paisDeOrigen);
        this.fechaEnvasado = fechaEnvasado;
        this.paisDeOrigen = paisDeOrigen;
    }

    //Métodos para recibir fecha de envasado y país de origen
    public Calendar getFechaEnvasado() { return fechaEnvasado; }
    public String getPaisDeOrigen() { return paisDeOrigen;}
   
    //Métodos para fijar fecha de envasado y país de origen
    public void setFechaEnvasado (Calendar fechaEnvasado) {
        this.fechaEnvasado = fechaEnvasado;}
    public void setPaisDeOrigen (String paisDeOrigen) {
        this.paisDeOrigen = paisDeOrigen; }
   
    public void muestraInfoProdFresco() {
        System.out.println("PRODUCTO FRESCO");
        System.out.println("La fecha de envasado es: " + fechaEnvasado.getTime().toString()+" país de origen "
        + getPaisDeOrigen() + "La fecha de Caducidad es: " +  fechaCaducidad.getTime().toString()  ); }
}

Código: [Seleccionar]
package empresagroalimentaria3;

import java.util.Calendar;

/**
 *
 * @author itco1724
 */
public class ProductoRefrigerado extends ProductosFresco
{
    private String codigoOrgSupAlim;
    private double temperaturaCong;
   
    /**
     * Constructor for objects of class ProductoRefrigerado
     * @param fechaCaducidad
     * @param numeroLote
     * @param codigoOrgSupAlim
     * @param fechaEnvasado
     * @param temperaturaCong
     * @param paisDeOrigen
     */
    public ProductoRefrigerado(Calendar fechaCaducidad, int numeroLote, String codigoOrgSupAlim, Calendar fechaEnvasado, double temperaturaCong, String paisDeOrigen)
    {
       super(fechaCaducidad, numeroLote,fechaEnvasado,paisDeOrigen );
       
        this.codigoOrgSupAlim = codigoOrgSupAlim;
        this.temperaturaCong = temperaturaCong;
       
    }
    //Métodos para recibir Código sanitario y fijar código sanitario
    public String getCodigoOrgSupAlim() {return codigoOrgSupAlim;}
    public void setCodigoOrgSupAlim( String codigoOrgSupAlim) {
        this.codigoOrgSupAlim = codigoOrgSupAlim; }
   
     public double getTemperaturaCong() {return temperaturaCong;}
    public void setTemperaturaCont (double temperaturaCong) {
        this.temperaturaCong = temperaturaCong; }
   
    //método para muestrar Producto regrigerado
    public void muestraInfoProdRefrigerado() {
        System.out.println("PRODUCTO REFRIGERADO");
        System.out.println("Código del organismo de supervisión alimentaria: "+getCodigoOrgSupAlim() + " y Nº de Lote " + getProductoNumeroLote() +  "\n"
                + " La fecha de envasado es:"+ fechaEnvasado.getTime().toString()+ "La temperatura es: "+getTemperaturaCong() +  "\n" +
                        " º y su pais de origen es:" + getPaisDeOrigen()+ "La fecha de Caducidad es: " +  fechaCaducidad.getTime().toString()); }

}

Código: [Seleccionar]
package empresagroalimentaria3;

import java.util.Calendar;

/**
 *
 * @author itco1724
 */
public class ProductoCongelado extends Producto
{
    private double temperaturaCong;
   

    /**
     * Constructor for objects of class ProductoCongelado
     */
    public ProductoCongelado(Calendar fechaCaducidad, int numeroLote, double temperaturaCong, Calendar fechaEnvasado, String paisDeOrigen)
    {
        super (fechaCaducidad, numeroLote,fechaEnvasado,paisDeOrigen);
        this.temperaturaCong = temperaturaCong;
    }
    public ProductoCongelado() {
        super();
        temperaturaCong = 0;}

    public double getTemperaturaCong() {return temperaturaCong;}
   
    public void setTemperaturaCont (double temperaturaCong) {
        this.temperaturaCong = temperaturaCong; }
   
    public void muestraInfoProductoCongelado() {
        System.out.println("PRODUCTO CONGELADO");
        System.out.println("La temperatura es: "+getTemperaturaCong()+" ºC " + " y su numero de Lote " + getProductoNumeroLote()+  "\n" +
                  "La fecha de envasado es: " +fechaEnvasado.getTime().toString()+  "\n" + "La fecha de Caducidad es: " +  fechaCaducidad.getTime().toString()); }

}

Código: [Seleccionar]
package empresagroalimentaria3;

/**
 *
 * @author itco1724
 */
import java.util.Calendar;


public class Producto
{
    Calendar fechaEnvasado;
    Calendar fechaCaducidad;
    private int numeroLote;
    private String paisOrigen;

    /**
     * Constructor for objects of class Producto
     */
    public Producto(Calendar fechaCaducidad, int numeroLote, Calendar fechaEnvasado, String paisOrigen)
    {
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
        this.fechaEnvasado = fechaEnvasado;
        this.paisOrigen = paisOrigen;
    }
    public Producto() {
        paisOrigen ="";
        numeroLote =0;
        Calendar fechaCaducidad = Calendar.getInstance();
        Calendar fechaEnvasado = Calendar.getInstance();
    }

    public Calendar getProductoFechaCaducidad() {return fechaCaducidad;}
    public int getProductoNumeroLote() {return numeroLote;}
    public void setProductoFechaCaducidad(Calendar fechaCaducidad) {
        this.fechaCaducidad = fechaCaducidad;   
    }
    public Calendar getProductoFechaEnvasado() {return fechaEnvasado;}
    public String getProductoPaisOrigen() {return paisOrigen;}
   
    public void setProductoNumeroLote( int numeroLote) { this.numeroLote = numeroLote;}
    public void mostrarDatosProducto(){
      System.out.println("PRODUCTO"); 
      System.out.println("Producto Nº Lote: " + getProductoNumeroLote() + " Fecha de Caducidad: " + fechaCaducidad.getTime().toString() +
      " País de Origen: " + getProductoPaisOrigen() + " Fecha de Envasado: " + fechaEnvasado.getTime().toString());}
}


Código: [Seleccionar]
package empresagroalimentaria3;
import java.util.Calendar;

/**
 *
 * @author itco1724
 */
public class CongeladoNitrogeno extends ProductoCongelado{

private double tiempoexposicion;
//Constructor
public CongeladoNitrogeno(Calendar fechaCaducidad, int numeroLote, double temperaturaCong,Calendar fechaEnvasado, String paisDeOrigen,double tiempoexposicion){

            super(fechaCaducidad,numeroLote,temperaturaCong,fechaEnvasado,paisDeOrigen);
this.tiempoexposicion = tiempoexposicion;             
}
        public CongeladoNitrogeno()
    {
        super();
        tiempoexposicion = 0;
    }

public void settiempoexposicion(double tiempoexposicion) {this.tiempoexposicion = tiempoexposicion;}
        public double gettiempoexposicion() {return tiempoexposicion;}

        public void muestraInfoCongeladoNitrogeno() {
        System.out.println("PRODUCTO CONGELADO-NITRÓGENO");
        System.out.println(  " Tiempo de exposición al nitrógeno: " +
        gettiempoexposicion() + " en segundos");}
}

Código: [Seleccionar]
package empresagroalimentaria3;
import java.util.Calendar;

/**
 *
 * @author itco1724
 */
public class CongeladoAire extends ProductoCongelado{

private int composicióndelaire;
        private float porcNitrogeno;
        private float porcOxigeno;
        private float porcCO2;
        private float porcVaporAgua;

//Constructor sobrecargado
public CongeladoAire(Calendar fechaCaducidad, int numeroLote, double temperaturaCong,Calendar fechaEnvasado, String paisDeOrigen,
                int composicióndelaire,float porcNitrogeno, float porcOxigeno, float porcCO2, float porcVaporAgua){

            super(fechaCaducidad,numeroLote,temperaturaCong,fechaEnvasado,paisDeOrigen);
this.composicióndelaire = composicióndelaire;
                this.porcNitrogeno = porcNitrogeno;
                this.porcOxigeno = porcOxigeno;
                this.porcCO2 = porcCO2;
                this.porcVaporAgua = porcVaporAgua;
}
         public CongeladoAire()
    {
        super();
        porcNitrogeno = 0;
        porcOxigeno = 0;
        porcCO2 = 0;
        porcVaporAgua = 0;
    }

//Getters and Setters
public int getcomposicióndelaire() {return composicióndelaire;}
        public float getPorcNitrogeno() {return porcNitrogeno ;}
        public float getPorcOxigeno() {return porcOxigeno ;}
        public float getPorcCO2() {return porcCO2 ;}
        public float getPorcVaporAgua() {return porcVaporAgua ;}
   
        public void setPorcNitrogeno(float porcNitrogeno) {
            this.porcNitrogeno = porcNitrogeno;}
        public void setPorcOxigeno (float porcOxigeno) {
            this.porcOxigeno = porcOxigeno; }
        public void setPorcCO2 (float porcCO2) {
            this.porcCO2 = porcCO2;}
        public void setPorcVaporAgua (float porcVaporAgua) {
                this.porcVaporAgua = porcVaporAgua;}
public void setcomposicióndelaire(int composicióndelaire) {this.composicióndelaire = composicióndelaire;}
        public void muestraInfoCongeladoAire() {
        System.out.println("PRODUCTO CONGELADO-AIRE");
        System.out.println("La composición del aire es: Nitrogeno: "+ (porcNitrogeno*100)+" % Oxigeno: "+
         (porcOxigeno*100)+ "% Dioxido de Carbono: " + (porcCO2*100) + "% Vapor Agua: " + (porcVaporAgua * 100) +"%");}
}

Código: [Seleccionar]
package empresagroalimentaria3;
import java.util.Calendar;

/**
 *
 * @author itco1724
 */

public class CongeladoAgua extends ProductoCongelado{

private int salinidadAgua;

//Constructor sobrecargado
public CongeladoAgua(Calendar fechaCaducidad, int numeroLote, double temperaturaCong,Calendar fechaEnvasado, String paisDeOrigen,int salinidadAgua){

            super(fechaCaducidad,numeroLote,temperaturaCong,fechaEnvasado,paisDeOrigen);
this.salinidadAgua = salinidadAgua;
}

//Getters and Setters
public int getsalinidadAgua() {return salinidadAgua;}

public void setsalinidadAgua(int salinidadAgua) {this.salinidadAgua = salinidadAgua;}

        public void muestraInfoCongeladoAgua() {
        System.out.println("PRODUCTO CONGELADO-AGUA");
        System.out.println("Salinidad del agua: " + getsalinidadAgua()+ " gramos de sal por litro de agua" +  "\n"  + " La fecha de envasado es:" + fechaEnvasado.getTime().toString()+
                "La fecha de Caducidad es: " +  fechaCaducidad.getTime().toString()); }
}


Código: [Seleccionar]
import java.util.ArrayList;
import java.util.List;

/**
 * Clase EnvioDeProductos que contiene la lista de productos
 * @author David
 *
 */
public class EnvioDeProductos {

private List<Producto> listaProductos;

public EnvioDeProductos(){
listaProductos = new ArrayList<Producto>();
}

//Getters and Setters
public List<Producto> getListaProductos() {
return listaProductos;
}

public void setListaProductos(List<Producto> listaProductos) {
this.listaProductos = listaProductos;
}

//Método encargado de añadir los productos a la lista para su posterior envio
public ArrayList<Producto> crearEnvio(Producto producto){
listaProductos.add(producto);
return (ArrayList<Producto>) listaProductos;
}
}


Como podría usar el iterator?

Gracias
« Última modificación: 18 de Junio 2017, 12:32 por Alex Rodríguez »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:EJERCICIO (CU00688B)
« Respuesta #1 en: 03 de Mayo 2017, 22:40 »
Hola Luis.

Como dice el enunciado del ejercicio CU00687B tiene que haber tres tipos de productos diferenciados, frescos, refrigerados y congelados, en tu caso los separas en dos y un producto refrigerado no tiene por que ser un producto fresco.

En este enlace puedes ver una buena solución al ejercicio CU00687B: https://www.aprenderaprogramar.com/foros/index.php?topic=2342.0

A partir de esto, en la clase EnvioDeProductos tienes un método crearEnvio, y lo idóneo es que este método tuviese un nombre que hiciese referencia a añadir productos a la lista de envío, como podría ser addProducto() o similar, y en su contenido solo contuviese la primera de las líneas que pusiste, es decir, que solo añada y no tenga ningún cometido más.
Código: [Seleccionar]
public ArrayList<Producto> addProdructo(Producto producto){
    listaProductos.add(producto);
}

En cuanto al uso de Iterator, puedes probar con esto:

Código: [Seleccionar]
public void mostrarDatosEnvio(){
    Iterator <Producto> it = listaProductos.iterator();
    while(it.hasNext()){
        Producto dato = it.next();
        dato.mostrarDatosProducto();
        System.out.println ("\n------------------------\n");
    }
}

Saludos.  ;D
« Última modificación: 18 de Junio 2017, 12:31 por Alex Rodríguez »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".