Autor Tema: Curso JAVA ejercicio CU00688B. Concepto de polimorfismo y variables polimórficas  (Leído 4420 veces)

barriway

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Hola buenos días.

Os dejo aquí mi solución al ejercicio propuesto.

Utilizo este diagrama de clases.


Ahora la codificación.
Código: [Seleccionar]
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Producto
{
   
    private static Locale currentLocale = new Locale("es","ES");
    private String lote;
    private Calendar fechaEnvasado;
    private Calendar fechaCaducidad;
    private String paisOrigen;
 

    public Producto(){
        lote="";
        fechaCaducidad=null;
        fechaEnvasado=null;
        paisOrigen="";
    }

    public Producto(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen){
        this.lote=lote;
        this.fechaEnvasado=Calendar.getInstance(currentLocale);
        this.fechaEnvasado.setTime(fechaEnvasado.getTime());
        this.fechaCaducidad=Calendar.getInstance(currentLocale);
        this.fechaCaducidad.setTime(fechaCaducidad.getTime());
        this.paisOrigen=paisOrigen;
    }

    public void setLote(String lote){
        this.lote=lote;
    }

    public void setFechaEnvasado(Calendar fechaEnvasado){
        this.fechaEnvasado=fechaEnvasado;
    }
   
    public void setFechaCaducidad(Calendar fechaCaducidad){
        this.fechaCaducidad=fechaCaducidad;
    }

    public void setPaisOrigen(String paisOrigen){
        this.paisOrigen=paisOrigen;
    }
   
    public String getLote(){
        return lote;
    }

    public Calendar getFechaEnvasado(){
       return fechaEnvasado;
    }
   
    public Calendar getFechaCaducidad(){
        return fechaCaducidad;
    }

    public String getPaisOrigen(){
        return paisOrigen;
    }
   
    public void mostrarProducto(){
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MMM/yyyy",currentLocale);
        System.out.println("Lote : "+lote);
        System.out.println("Fecha de envasado : "+formatoFecha.format(fechaEnvasado.getTime()));
        System.out.println("Fecha de caducidad : "+formatoFecha.format(fechaCaducidad.getTime()));
        System.out.println("País de origen : "+paisOrigen);
    }
}
Código: [Seleccionar]
public class ProductoFresco extends Producto
{

    public ProductoFresco(){
        super();
    }

    public ProductoFresco(String numeroLote, Calendar fechaEnvasado, Calendar fechaCaducidad, String paisOrigen){
        super(numeroLote,fechaEnvasado,fechaCaducidad,paisOrigen);
    }

    public void mostrarProducto(){
        System.out.println("--- Producto Fresco ---");
        super.mostrarProducto();
        System.out.println("");
    }
}
Código: [Seleccionar]
import java.util.Calendar;

public class ProductoNoFresco extends Producto
{
    private double temperaturaMantenimientoRecomendada;

    public ProductoNoFresco(){
        super();
        temperaturaMantenimientoRecomendada=0;   
    }

    public ProductoNoFresco(String lote, Calendar fechaEnvasado, Calendar fechaCaducidad, String paisOrigen, double temperaturaMantenimientoRecomendada){
        super(lote,fechaEnvasado,fechaCaducidad,paisOrigen);
        this.temperaturaMantenimientoRecomendada=temperaturaMantenimientoRecomendada;
    }

    public void setTemperaturaMantenimientoRecomendada(double temperaturaMantenimientoRecomendada){
        this.temperaturaMantenimientoRecomendada=temperaturaMantenimientoRecomendada;
    }

    public double getTemperaturaMantenimientoRecomendada(){
        return temperaturaMantenimientoRecomendada;
    }
   
    public void mostrarProducto(){
        super.mostrarProducto();
        System.out.println("La temperatura de mantenimiento recomendada es de : "+temperaturaMantenimientoRecomendada+"ºC");
    }
}
Código: [Seleccionar]
import java.util.Calendar;

public class ProductoRefrigerado extends ProductoNoFresco
{
    private String codigoOrgSupAlim;

    public ProductoRefrigerado(){
        super();
        codigoOrgSupAlim="";   
    }

    public ProductoRefrigerado(String lote, Calendar fechaEnvasado, Calendar fechaCaducidad, String paisOrigen, double temperaturaMantenimientoRecomendada, String codigoOrgSupAlim){
        super(lote,fechaEnvasado,fechaCaducidad,paisOrigen,temperaturaMantenimientoRecomendada);
        this.codigoOrgSupAlim=codigoOrgSupAlim;
    }

    public void setCodigoOrgSupAlim(String codigoOrgSupAlim){
        this.codigoOrgSupAlim=codigoOrgSupAlim;
    }
   
    public String getCodigoOrgSupAlim(){
        return codigoOrgSupAlim;
    }

    public void mostrarProducto(){
        System.out.println("--- Producto Refrigerado ---");
        super.mostrarProducto();
        System.out.println("Codigo del Organismo de Supervisión Alimentaria : "+codigoOrgSupAlim+"\n");
    }
}
Código: [Seleccionar]
import java.util.Calendar;

public class ProductoCongeladoAire extends ProductoNoFresco
{
    private double nitrogeno;
    private double oxigeno;
    private double dioxidoCarbono;
    private double vaporAgua;

    public ProductoCongeladoAire()
    {
        super();
        nitrogeno=0;
        oxigeno=0;
        dioxidoCarbono=0;
        vaporAgua=0;
    }

    public ProductoCongeladoAire(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen,
    double temperaturaMantenimientoRecomendada,double nitrogeno,double oxigeno,double dioxidoCarbono,double vaporAgua){
        super(lote,fechaEnvasado,fechaCaducidad,paisOrigen,temperaturaMantenimientoRecomendada);
        this.nitrogeno=nitrogeno;
        this.oxigeno=oxigeno;
        this.dioxidoCarbono=dioxidoCarbono;
        this.vaporAgua=vaporAgua;
    }

    public void setNitrogeno(double nitrogeno){
        this.nitrogeno =nitrogeno;
    }

     public void setOxigeno(double oxigeno){
        this.oxigeno =oxigeno;
    }
   
     public void setDioxidoCarbono(double dioxidoCarbono){
        this.dioxidoCarbono =dioxidoCarbono;
    }
   
     public void setVaporAgua(double vaporAgua){
        this.vaporAgua =vaporAgua;
    }
   
   
   
    public double getNitrogeno(){
        return nitrogeno;
    }

    public double getOxigeno(){
        return oxigeno;
    }
   
    public double getDioxidoCarbono(){
        return dioxidoCarbono;
    }
   
    public double geVaporAgua(){
        return vaporAgua;
    }
   
    public void mostrarProducto(){
        System.out.println("--- Producto Congelado por Aire---");
        super.mostrarProducto();
        System.out.println("Porcentaje de Nitrogeno : "+nitrogeno+"%");
        System.out.println("Porcentaje de Oxigeno : "+oxigeno+"%");
        System.out.println("Porcentaje de Dioxiodo de Carbono : "+dioxidoCarbono+"%");
        System.out.println("Porcentaje de Vapor de Agua : "+vaporAgua+"%\n");
    }
}
Código: [Seleccionar]
import java.util.Calendar;

public class ProductoCongeladoAgua extends ProductoNoFresco{

    private double salinidadAgua;

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

    public ProductoCongeladoAgua(String lote, Calendar fechaEnvasado, Calendar fechaCaducidad, String paisOrigen,
    double temperaturaMantenimientoRecomendada,double salinidadAgua){
        super(lote,fechaEnvasado,fechaCaducidad,paisOrigen,temperaturaMantenimientoRecomendada);
        this.salinidadAgua=salinidadAgua;
    }

    public void setSalinidadAgua(double salinidadAgua){
        this.salinidadAgua=salinidadAgua;
    }

    public double getSalinidadAgua(){
        return salinidadAgua;
    }

    public void mostrarProducto(){
        System.out.println("--- Producto Congelado por Agua ---");
        super.mostrarProducto();
        System.out.println("Salinidad del agua : "+salinidadAgua+"grNa/l\n");
    }
}
Código: [Seleccionar]
import java.util.Calendar;

public class ProductoCongeladoNitrogeno extends ProductoNoFresco
{
    private String metodoCongelacion;
    private int tiempoExposicion;

    public ProductoCongeladoNitrogeno(){
        super();
        metodoCongelacion="";
        tiempoExposicion=0;

    }

    public ProductoCongeladoNitrogeno(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen,
    double temperaturaMantenimientoRecomendada,String metodoCongelacion,int tiempoExposicion){
        super(lote,fechaEnvasado,fechaCaducidad,paisOrigen,temperaturaMantenimientoRecomendada);
        this.metodoCongelacion=metodoCongelacion;
        this.tiempoExposicion=tiempoExposicion;
    }
   
    public void setMetodoCongelacion(String metodoCongelacion){
        this.metodoCongelacion=metodoCongelacion;
    }
   
    public void setTiempoExposicion(int tiempoExposicion){
        this.tiempoExposicion=tiempoExposicion;
    }
   
    public String getMetodoCongelacion(){
        return metodoCongelacion;
    }
   
    public int getTiempoExposicion(){
        return tiempoExposicion;
    }
   
    public void mostrarProducto(){
        System.out.println("--- Producto Congelado por Nitrógeno ---");
        super.mostrarProducto();
        System.out.println("Método de congelación utilizado : "+metodoCongelacion);
        System.out.println("Tiempo de exposición : "+tiempoExposicion+"s\n");
    }
}
Código: [Seleccionar]
import java.util.Calendar;
import java.util.ArrayList;
import java.util.Iterator;
import java.text.SimpleDateFormat;

public class EnvioDeProductos
{
    Calendar fechaEnvio;
    String clienteEnvio;
    String direccionEnvio;
    ArrayList<Producto> listaProductosEnvio;

    public EnvioDeProductos(){
        fechaEnvio=Calendar.getInstance();
        clienteEnvio="";
        direccionEnvio="";
        listaProductosEnvio=new ArrayList<Producto>();
    }

    public void setFechaEnvio(Calendar fechaEnvio){
        this.fechaEnvio=fechaEnvio;
    }

    public void setClienteEnvio(String clienteEnvio){
        this.clienteEnvio=clienteEnvio;
    }

    public void setDireccionEnvio(String direccionEnvio){
        this.direccionEnvio=direccionEnvio;
    }

    public void setListaProductosEnvio(ArrayList<Producto> listaProductosEnvio){
        this.listaProductosEnvio=listaProductosEnvio;
    }

    public Calendar getFechaEnvio(){
        return fechaEnvio;
    }

    public String getClienteEnvio(){
        return clienteEnvio;
    }

    public String direccionEnvio(){
        return direccionEnvio;
    }

    public ArrayList<Producto> getListaProductosEnvio(){
        return listaProductosEnvio;
    }

    public void mostrarEnvio(){
        if(!listaProductosEnvio.isEmpty()){// Si el pedido tiene productos

            SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MMM/yyyy");

            System.out.println("Datos del pedido\n");
            System.out.println("Fecha : "+formatoFecha.format(fechaEnvio.getTime()));
            System.out.println("Cliente : "+clienteEnvio);
            System.out.println("Dirección : "+direccionEnvio+"\n");
           
            System.out.println("Lista de productos\n");
            Iterator<Producto> producto=listaProductosEnvio.iterator();
            while(producto.hasNext()){
                producto.next().mostrarProducto();
            }
            System.out.println("Fin de la lista");
        }else{
            System.out.println("Pedido sin productos");
        }
    }
}
Código: [Seleccionar]
import java.util.Calendar;
import java.util.Date;

public class TestHerencia3
{
    public static void main(String Arg[]){

        EnvioDeProductos envioProducto = new EnvioDeProductos();
        Calendar fechaEnvio = Calendar.getInstance();
        Calendar fechaEnvasado = Calendar.getInstance();
        Calendar fechaCaducidad = Calendar.getInstance();
       
        Date fechaActual=new Date();
        fechaActual.getTime();
        fechaEnvio.setTime(fechaActual);
        envioProducto.setFechaEnvio(fechaEnvio);
       
        envioProducto.setClienteEnvio("Frutas Marisa");
        envioProducto.setDireccionEnvio("Cursal Kalea,2 Barakaldo");
       
        // Dos productos frescos
        fechaEnvasado.set(2001,0,1);fechaCaducidad.set(2011,0,1);
        envioProducto.getListaProductosEnvio().add(new ProductoFresco("01-1",fechaEnvasado,fechaCaducidad,"Argentina"));
        fechaEnvasado.set(2002,0,1);fechaCaducidad.set(2012,0,1);
        envioProducto.getListaProductosEnvio().add(new ProductoFresco("01-2",fechaEnvasado,fechaCaducidad,"Rumanía"));

        // Tres productos refrigerados
        fechaEnvasado.set(2001,1,2);fechaCaducidad.set(2021,1,2);
        envioProducto.getListaProductosEnvio().add(new ProductoRefrigerado("02-1",fechaEnvasado,fechaCaducidad,"Holanda",3.00,"CODIGO-002"));
        fechaEnvasado.set(2002,1,2);fechaCaducidad.set(2022,1,2);
        envioProducto.getListaProductosEnvio().add(new ProductoRefrigerado("02-2",fechaEnvasado,fechaCaducidad,"Suiza",2.00,"CODIGO-022"));
        fechaEnvasado.set(2003,1,2);fechaCaducidad.set(2023,1,2);
        envioProducto.getListaProductosEnvio().add(new ProductoRefrigerado("02-3",fechaEnvasado,fechaCaducidad,"Holanda",4.00,"CODIGO-222"));

        // Dos productos congelados por aire
        fechaEnvasado.set(2003,2,3);fechaCaducidad.set(2033,2,3);
        envioProducto.getListaProductosEnvio().add(new ProductoCongeladoAire("03",fechaEnvasado,fechaCaducidad,"España",-3.50,8,2,3,87));
        fechaEnvasado.set(2004,2,3);fechaCaducidad.set(2034,2,3);
        envioProducto.getListaProductosEnvio().add(new ProductoCongeladoAire("03",fechaEnvasado,fechaCaducidad,"Cuba",-6.50,10,3,4,83));

        //Dos productos congelados por agua
        fechaEnvasado.set(2004,3,4);fechaCaducidad.set(2044,3,4);
        envioProducto.getListaProductosEnvio().add(new ProductoCongeladoAgua("04",fechaEnvasado,fechaCaducidad,"Francia",-9,16));
        fechaEnvasado.set(2005,3,4);fechaCaducidad.set(2045,3,4);
        envioProducto.getListaProductosEnvio().add(new ProductoCongeladoAgua("04",fechaEnvasado,fechaCaducidad,"Venezuela",-11,20));

        // Un producto congelados por nitrógeno
        fechaEnvasado.set(2005,4,5);fechaCaducidad.set(2055,4,5);
        envioProducto.getListaProductosEnvio().add(new ProductoCongeladoNitrogeno("05",fechaEnvasado,fechaCaducidad,"España",-18.50,
                "Congelado pero que mu frío",4));
               
        envioProducto.mostrarEnvio();
        }
    }

Un saludo.
« Última modificación: 24 de Julio 2015, 00:25 por César Krall »

barriway

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Buenos días.
Lo siento he cometido un error al subir la imagen del diagrama de clase. Realmente el que utilizo es el que pongo a continuación.



Un saludo
« Última modificación: 24 de Julio 2015, 00:25 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola aprovecho para hacerte algunas propuestas de mejora sobre la clase EnvioDeProductos

En el constructor tienes fechaEnvio=Calendar.getInstance(); pero esto puede resultar confuso, no siempre, pero supongamos que la fecha del envío deba ser establecida con un set y que no se sabe en el momento de crear el objeto. En ese caso sería preferible escribir  fechaEnvio=null; de ese modo podremos detectar con exactitud que la fecha de envío no ha sido establecida.

La otra cosa a comentar a lo mejor la has visto ya en otros hilos del foro, es el método public void mostrarEnvio(){

En ese método usas System.out.println para mostrar datos por pantalla. Pero sería interesante en lugar de hacer eso hacer que el método devuelva un String, sería

public String obtenerDatosEnvio() { }

Básicamente haría lo mismo pero en vez de encargarse de mostrar por pantalla lo que haría sería devolver un String con la información. Desde el método main (o desde otro sitio) usaríamos el System.out.println para mostrar el String. Esto tiene una ventaja: ese String se puede usar para muchas cosas (por ejemplo para mostrar por pantalla, o para enviar un correo electrónico con los datos, o para guardar los datos en una base de datos, etc.). Cambiar el planteamiento de ese código sería un buen ejercicio para acomodarnos a las buenas prácticas. Esto enlazaría luego con la entrega CU00694B donde se explica el método toString() que también está relacionado con esto.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

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