Autor Tema: Java Concepto de polimorfismo Ejercicio CU00688B curso variables polimórficas  (Leído 3364 veces)

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Hola! Vengo a resolver (después de muuuuucho trabajo) el ejercicio de la entrega nro 88.

EJERCICIO

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 agua 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.



Clase Producto
Código: [Seleccionar]
package Productos;

public class Producto {
    private String fechaCaducidad;
    private int numeroLote;
    private String fechaEnvio;
    private String paisOrigen;
   
    public Producto () {
        fechaCaducidad = "";
        numeroLote = 0;
        fechaEnvio = "";
        paisOrigen = "";
    }
   
    public Producto (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvio, String valorPaisOrigen) {
        fechaCaducidad = valorFechaCaducidad;
        numeroLote = valorNumeroLote;
        fechaEnvio = valorFechaEnvio;
        paisOrigen = valorPaisOrigen;
    }
   
    public void setFechaCaducidad (String valorFechaCaducidad){
        fechaCaducidad = valorFechaCaducidad;
    }
   
    public void setNumeroLote (int valorNumeroLote) {
        numeroLote = valorNumeroLote;
    }
   
    public void setFechaEnvio (String valorFechaEnvio) {
        fechaEnvio = valorFechaEnvio;
    }
   
    public void setPaisOrigen (String valorPaisOrigen) {
        paisOrigen = valorPaisOrigen;
    }
   
    public String getFechaCaducidad () {
        return fechaCaducidad;
    }
   
    public int getNumeroLote () {
        return numeroLote;
    }
   
    public String getFechaEnvio () {
        return fechaEnvio;
    }
   
    public String getPaisOrigen () {
        return paisOrigen;
    }
   
    public void dameDatos () {
        System.out.println ("Fecha de caducidad: " + getFechaCaducidad() + "\nNúmero de lote: " + getNumeroLote() + "\nFecha de envío: " + getFechaEnvio() + "\nPaís de origen: " + getPaisOrigen ());
    }
}



Clase ProductoFresco
Código: [Seleccionar]
package Productos;
public class ProductoFresco extends Producto  {
   
    public ProductoFresco () {
        super ();
    }
   
    public ProductoFresco (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen) {
        super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen);
    }
   
    public void dameDatos() {
        super.dameDatos();
    }
}



Clase ProRefCon
Código: [Seleccionar]
package Productos;

public class ProRefCon extends Producto {
    private int tempMantRec;
   
    public ProRefCon () {
        super ();
        tempMantRec = 0;
    }
   
    public ProRefCon (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec) {
        super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen);
        tempMantRec = valorTempMantRec;
    }
   
    public void setTempMantRec (int valorTempMantRec) {
        tempMantRec = valorTempMantRec;
    }
   
    public int getTempMantRec () {
        return tempMantRec;
    }
   
    public void dameDatos() {
        super.dameDatos();
        System.out.println ("Temperatura de mantenimiento recomendada: " + getTempMantRec() + " grados");
    }
}



Clase ProductoRefrigerado
Código: [Seleccionar]
package Productos;

public class ProductoRefrigerado extends ProRefCon  {
    private String codigoSupervAlim;
   
    public ProductoRefrigerado () {
        super ();
        codigoSupervAlim = "";
    }
   
    public ProductoRefrigerado (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, String valorCodigoSupervAlim) {
        super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
        codigoSupervAlim = valorCodigoSupervAlim;
    }
       
    public void getCodigoSupervAlim (String valorCodigoSupervAlim) {
        codigoSupervAlim = valorCodigoSupervAlim;
    }
   
    public String getCodigoSupervAlim () {
        return codigoSupervAlim;
    }
   
    public void dameDatos() {
        super.dameDatos();
        System.out.println ("Código del organismo de supervición alimentaria: " + getCodigoSupervAlim());
    }
}



Clase ProductoCongelado
Código: [Seleccionar]
package Productos;

public class ProductoCongelado extends ProRefCon  {
   
    public ProductoCongelado () {
        super ();
    }
   
    public ProductoCongelado (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec) {
        super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
    }
   
    public void dameDatos() {
        super.dameDatos();
    }
}



Clase ProductoCongeladoAire
Código: [Seleccionar]
package Productos;

public class ProductoCongeladoAire extends ProductoCongelado {
    private double porcentajeNitrogeno;
    private double porcentajeOxigeno;
    private double porcentajeDioxidoDeCarbono;
    private double porcentajeVaporDeAgua;

    public ProductoCongeladoAire () {
        super ();
        porcentajeNitrogeno = 0;
        porcentajeOxigeno = 0;
        porcentajeDioxidoDeCarbono = 0;
        porcentajeVaporDeAgua = 0;
    }

    public ProductoCongeladoAire (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, double valorPorcentajeNitrogeno, double valorPorcentajeOxigeno, double valorPorcentajeDioxidoDeCarbono, double valorPorcentajeVaporDeAgua) {
        super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
        porcentajeNitrogeno = valorPorcentajeNitrogeno;
        porcentajeOxigeno = valorPorcentajeOxigeno;
        porcentajeDioxidoDeCarbono = valorPorcentajeDioxidoDeCarbono;
        porcentajeVaporDeAgua = valorPorcentajeVaporDeAgua;
    }
   
    public void setPorcentajeNitrogeno (double valorPorcentajeNitrogeno) {
        porcentajeNitrogeno = valorPorcentajeNitrogeno;
    }
   
    public void setPorcentajeOxigeno (double valorPorcentajeOxigeno) {
        porcentajeOxigeno = valorPorcentajeOxigeno;
    }
   
    public void setPorcentajeDioxidoDeCarbono (double valorPorcentajeDioxidoDeCarbono) {
        porcentajeDioxidoDeCarbono = valorPorcentajeDioxidoDeCarbono;
    }
   
    public void setPorcentajeVaporDeAgua (double valorPorcentajeVaporDeAgua) {
        porcentajeVaporDeAgua = valorPorcentajeVaporDeAgua;
    }
   
    public double getPorcentajeNitrogeno () {
        return porcentajeNitrogeno;
    }
   
    public double getPorcentajeOxigeno () {
        return porcentajeOxigeno;
    }
   
    public double getPorcentajeDioxidoDeCarbono () {
        return porcentajeDioxidoDeCarbono;
    }
   
    public double getPorcentajeVaporDeAgua () {
        return porcentajeVaporDeAgua;
    }
   
    public void dameDatos () {
        super.dameDatos ();
        System.out.println ("Composición del aire con que fue congelado:\nNitrógeno: " + getPorcentajeNitrogeno() + "%\nOxígeno: " + getPorcentajeOxigeno() + "%\nDióxido de carbono: " + getPorcentajeDioxidoDeCarbono() + "%\nVapor de agua: " + getPorcentajeVaporDeAgua() + "%");
    }
}



Clase ProductoCongeladoAgua
Código: [Seleccionar]
package Productos;

public class ProductoCongeladoAgua extends ProductoCongelado {
    private int salPorLitro;

    public ProductoCongeladoAgua () {
        super ();
        salPorLitro = 0;
    }

    public ProductoCongeladoAgua (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, int valorSalPorLitro) {
        super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
        salPorLitro = valorSalPorLitro;
    }
   
    public void setSalPorLitro (int valorSalPorLitro) {
        salPorLitro = valorSalPorLitro;
    }
   
    public int getSalPorLitro () {
        return salPorLitro;
    }
   
    public void dameDatos () {
        super.dameDatos ();
        System.out.println ("Salinidad: " + getSalPorLitro() + " grs. por litro de agua");
    }
}



Clase ProductoCongeladoNitrogeno
Código: [Seleccionar]
package Productos;

public class ProductoCongeladoNitrogeno extends ProductoCongelado {
    private String metodo;
    private int tiempoExposicion;

    public ProductoCongeladoNitrogeno () {
        super ();
        metodo = "";
        tiempoExposicion = 0;
    }

    public ProductoCongeladoNitrogeno (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, String valorMetodo, int valorTiempoExposicion) {
        super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
        metodo = valorMetodo;
        tiempoExposicion = valorTiempoExposicion;
    }
   
    public void setMetodo (String valorMetodo) {
        metodo = valorMetodo;
    }
   
    public void setTiempoExposicion (int valorTiempoExposicion) {
        tiempoExposicion = valorTiempoExposicion;
    }
   
    public String getMetodo () {
        return metodo;
    }
   
    public int getTiempoExposicion () {
        return tiempoExposicion;
    }
   
    public void dameDatos () {
        super.dameDatos ();
        System.out.println ("Método de congelación empleado: " + getMetodo() + "\nTiempo de exposición al nitrógeno: " + getTiempoExposicion() + " segundos");
    }
}



Clase EnvioDeProductos
Código: [Seleccionar]
package Productos;
import java.util.*;

public class EnvioDeProductos {
    ArrayList <Producto> listaDeEnvio;

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

    public void addProducto (Producto valorProducto) {
        listaDeEnvio.add (valorProducto);
    }

    public int getTamaño () {
        return listaDeEnvio.size();
    }

    public void dameDatos () {
        int i = 0;
        for (Producto tmp : listaDeEnvio) {
            i++;
            System.out.println ("PRODUCTO " + i);
            tmp.dameDatos();
            System.out.println ("");
        }
       
    }
}



Clase TestProducto
Código: [Seleccionar]
package Productos;
import java.util.*;

public class TestProducto {
    public static void main (String [] args) {
        ProductoFresco proFres1 = new ProductoFresco ("25/03/2017", 5542, "14/01/2013", "México");
        ProductoFresco proFres2 = new ProductoFresco ("17/11/2018", 445854, "14/01/2013", "Perú");
        ProductoRefrigerado proRef1 = new ProductoRefrigerado ("17/02/2020", 41544, "14/01/2013", "Francia", 14, "sd5d5f4d");
        ProductoRefrigerado proRef2 = new ProductoRefrigerado ("05/11/2027", 55442, "14/01/2013", "Argentina", 04, "5d54e5f5d");
        ProductoRefrigerado proRef3 = new ProductoRefrigerado ("03/07/2016", 774, "14/01/2013", "Argentina", -11, "dd4f5r5d");
        ProductoCongeladoAire proConAi1 = new ProductoCongeladoAire ("01/07/2017", 745552, "14/01/2013", "Holanda", 12, 25, 25, 25, 25);
        ProductoCongeladoAire proConAi2 = new ProductoCongeladoAire ("12/07/2017", 34197, "14/01/2013", "Perú", 10, 20, 10, 50, 20);
        ProductoCongeladoAgua proConAg1 = new ProductoCongeladoAgua ("11/06/2019", 2044500, "14/01/2013", "Brasil", 03, 320);
        ProductoCongeladoAgua proConAg2 = new ProductoCongeladoAgua ("1/12/2022", 20055, "14/01/2013", "Chile", 02, 110);
        ProductoCongeladoNitrogeno proConNit1 = new ProductoCongeladoNitrogeno ("25/11/2020", 75454, "14/01/2013", "Francia", 01, "Frío seco", 55);
        EnvioDeProductos listado1 = new EnvioDeProductos ();
        listado1.addProducto(proFres1); listado1.addProducto(proFres2); listado1.addProducto(proRef1);
        listado1.addProducto(proRef2); listado1.addProducto(proRef3); listado1.addProducto(proConAi1);
        listado1.addProducto(proConAi2); listado1.addProducto(proConAg1);
        listado1.addProducto(proConAg2); listado1.addProducto(proConNit1);
        System.out.println ("\f");
        System.out.println ("El envío consta de " + listado1.getTamaño() + " productos");
        System.out.println ("");
        listado1.dameDatos();
       
    }
}

Voy a estar muy agradecido de recibir una evaluación de lo que pude hacer. Este curso está genial!


« Última modificación: 30 de Abril 2015, 12:10 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Hola fedegaray :) Se nota ese muuuuucho trabajo y los avances como programador

Haces buen uso de super con lo cual reutilizas el código y te adaptas a los principios de la programación orientada a objetos con herencia

En la clase EnvioDeProductos trabajas con el tipo Producto y gracias al polimorfismo eso permite que la colección que es el envío almacene productos de los distintos tipos existentes (por ejemplo congelado, fresco, etc.)

Para sacarle partido al polimorfismo se recomienda declarar los tipos estáticos del tipo más amplio y luego instanciar los objetos en las clase concretas, por ejemplo

ProductoFresco proFres1 = new ProductoFresco ("25/03/2017", 5542, "14/01/2013", "México");

Se escribiría

Producto proFres1 = new ProductoFresco ("25/03/2017", 5542, "14/01/2013", "México");

De este modo a la izquierda está el tipo de la superclase y a la derecha el tipo específico.

En la clase Envio hay algo que ya se ha comentado en otros hilos, quizás no lo hayas leído:

Código: [Seleccionar]
    public void dameDatos () {
        int i = 0;
        for (Producto tmp : listaDeEnvio) {
            i++;
            System.out.println ("PRODUCTO " + i);
            tmp.dameDatos();
            System.out.println ("");
        }

Un contador como i no se suele usar cuando se usa un for extendido.

Para esto tenemos el bucle for tradicional que ya nos proporciona el contador, sería:

Código: [Seleccionar]
for (int i=0; i<listaDeEnvio.size(); i++){
            System.out.println ("PRODUCTO " + i);
            dameDatos().get(i);
            System.out.println ("");
}

El for extendido se suele usar cuando no necesitamos índice o desconocemos el número de elementos que hay que recorrer.

Enhorabuena por el trabajo!

Saludos

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Qué increible! Además de disponer de este completísimo curso también contamos con ayuda tan personalizada! Muchas gracias por ambos aportes. No me había dado cuenta de lo primero, me has ayudado a pensar mejor, y de lo segundo creo que debería haberlo podido ver! Error mío. Muchas gracias de nuevo y allá vamos a por la lección que sigue!

 

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".