Autor Tema: Java el buen diseño de herencia no debe ser contrario al mundo real CU00687B  (Leído 2901 veces)

ArielDVB

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Hola. Esta es mi solucion al ejercicio CU00687Bd del tutorial de programación Java desde cero.

Nota: En donde dice crear dos productos congelados por agua y otros dos por agua, asumí que se refería a dos por agua y dos por aire.

Clase ProductoFresco
Código: [Seleccionar]
import java.util.Date;

public class ProductoFresco{
    private Date fecha_envasado;
    private String país_orígen;
    private Date fecha_caducidad;
    private int numero_lote;

    public ProductoFresco(Date fecha_e, Date fecha_c, String orígen, int lote){
        fecha_caducidad = fecha_c;
        fecha_envasado = fecha_e;
        país_orígen = orígen;
        numero_lote = lote;
    }

    public void setFechaCaducidad(Date fecha){ fecha_caducidad = fecha; }

    public void setNúmeroLote(int lote){ numero_lote = lote; }
   
    public void setFechaEnvasado(Date fecha){ fecha_envasado = fecha; }
   
    public void setPaísOrígen(String país){ país_orígen = país; }
   
    public String getPaísOrígen(){ return país_orígen; }
   
    public Date getFechaEnvasado(){ return fecha_envasado; }

    public Date getFechaCaducidad(){ return fecha_caducidad; }

    public int getNúmeroLote(){ return numero_lote; }
   
    public void showInfo(){
        System.out.println("Número de lote: " + getNúmeroLote() + "\nFecha de caducidad: " + fecha_caducidad.toString() + "\nPáis de orígen: " + getPaísOrígen() + "\nFecha de envasado: " + fecha_envasado.toString());
    }
}

Clase ProductoCongelado
Código: [Seleccionar]
import java.util.Date;

public class ProductoCongelado extends ProductoFresco{
    private double temp_recomendada;
   
    public ProductoCongelado(Date fecha_e, Date fecha_c, String orígen, int lote, double temperatura){
        super(fecha_e, fecha_c, orígen, lote);
        temp_recomendada = temperatura;
    }
   
    public void setTemperaturaRecomendada(double temp){ temp_recomendada = temp; }
   
    public double getTemperaturaRecomendada(){ return temp_recomendada; }
   
    public void showInfo(){
        super.showInfo();
        System.out.println("Temperatura de mantenimiento recomendada: " + getTemperaturaRecomendada() + "ºC");
    }
}

Clase ProductoRefrigerado
Código: [Seleccionar]
import java.util.Date;

public class ProductoRefrigerado extends ProductoCongelado{
    private int código_sv;
   
    public ProductoRefrigerado(Date fecha_e, Date fecha_c, String orígen,int lote, double temp, int código_sv){
        super(fecha_e, fecha_c, orígen, lote, temp);
        this.código_sv = código_sv;
    }

    public void setCódigoSV(int código){ código_sv = código; }
   
    public int getCódigoSV(){ return código_sv; }
   
    public void showInfo(){
        super.showInfo();
        System.out.println("Código del organismo de supervisión alimentaria: " + getCódigoSV());
    }
}

Clase CPAgua //"Congelado por agua"
Código: [Seleccionar]
import java.util.Date;

public class CPAgua extends ProductoCongelado{
    private double salinidad;
   
    public CPAgua(Date fecha_e, Date fecha_c, String orígen, int lote, double temp, double sali){
        super(fecha_e, fecha_c, orígen, lote, temp);
        salinidad = sali;
    }
   
    public void setSalinidad(double sali){ salinidad = sali; }
   
    public double getSalinidad(){ return salinidad; }
   
    public void showInfo(){
        super.showInfo();
        System.out.println("Salinidad: " + getSalinidad() + "gNaCl/L");
    }
}

Clase CPAire
Código: [Seleccionar]
import java.util.Date;

public class CPAire extends ProductoCongelado{
    private double N2;
    private double O2;
    private double CO2;
    private double H2O;
   
    public CPAire(Date fecha_e, Date fecha_c, String orígen, int lote, double temperatura, double N2, double O2, double CO2, double H2O){
        super(fecha_e, fecha_c, orígen, lote, temperatura);
        if(N2+O2+CO2+H2O <= 100){
            this.N2 = N2; this.O2 = O2; this.CO2 = CO2; this.H2O = H2O;
        }
        else{
            System.out.println("Los valores de concentración de gas son inválidos, se creará un objeto con valores por defecto.");
            this.N2 = 78; this.O2 = 21; this.CO2 = 0.5; this.H2O = 0.5;
        }
    }
   
    public void setConcentraciónGaseosa(double N2, double O2, double CO2, double H2O){
        if(N2+O2+CO2+H2O <= 100){
            this.N2 = N2; this.O2 = O2; this.CO2 = CO2; this.H2O = H2O;
        }
        else{
            System.out.println("Los valores de concentración de gas indroducidos son inválidos, por lo tanto no fueron establecidos.");
        }
    }
   
    public double getC_N2(){ return N2; }
    public double getC_O2(){ return O2; }
    public double getC_CO2(){ return CO2; }
    public double getC_H2O(){ return H2O; }
   
    public void showInfo(){
        super.showInfo();
        System.out.println("Concentración de gas nitrógeno: " + N2 + "%\nConcentración de gas oxígeno: " + O2 + "%\nConcentración de dióxido de carbono: " + CO2 + "%\nConcentración de vapor de agua: " + H2O + "%");
    }
}

Clase CPN2 //"Congelado por nitrógeno"
Código: [Seleccionar]
import java.util.Date;

public class CPN2 extends ProductoCongelado{
    private String infoMétodo;
    private int tiempoExposición;
   
    public CPN2(Date fecha_e, Date fecha_c, String orígen, int lote, double temp, String info, int expo){
        super(fecha_e, fecha_c, orígen, lote, temp);
        infoMétodo = info;
        tiempoExposición = expo;
    }
   
    public void setInfoMétodo(String info){ infoMétodo = info; }
   
    public void setTiempoExposición(int segundos){ tiempoExposición = segundos; }
   
    public String getInfoMétodo(){ return infoMétodo; }
   
    public int getTiempoExposición(){ return tiempoExposición; }
   
    public void showInfo(){
        super.showInfo();
        System.out.println("Método de congelación empleado: " + infoMétodo + "\nTiempo de exposición al nitrógeno: " + tiempoExposición + "s");
    }
}

Clase test
Código: [Seleccionar]
import java.util.Calendar;
import java.util.ArrayList;
import java.util.Iterator;

public class TestHerencia{
    public static void main(String [] args){
        ArrayList<ProductoFresco> ListaProductos = new ArrayList<ProductoFresco>();
        Calendar fecha1 = Calendar.getInstance();
        Calendar fecha2 = Calendar.getInstance();
        fecha2.set(2017, 5, 22);
        ListaProductos.add(new ProductoFresco(fecha1.getTime(), fecha2.getTime(), "Arg", 1));
        fecha2.set(2017, 6, 30);
        ListaProductos.add(new ProductoFresco(fecha1.getTime(), fecha2.getTime(), "Arg", 2));
        fecha2.set(2017, 9, 15);
        ListaProductos.add(new ProductoRefrigerado(fecha1.getTime(), fecha2.getTime(), "Bra", 3, 0.0, 666));
        fecha2.set(2018,3,26);
        ListaProductos.add(new ProductoRefrigerado(fecha1.getTime(),fecha2.getTime(),"Bra", 4, -0.5,667));
        fecha2.set(2018,2,21);
        ListaProductos.add(new ProductoRefrigerado(fecha1.getTime(),fecha2.getTime(),"Bra", 5, -1,668));
        fecha2.set(2017,11,30);
        ListaProductos.add(new CPAire(fecha1.getTime(),fecha2.getTime(),"México", 6,-5,67.5,23.5,5,4));
        fecha2.set(2018,5,24);
        ListaProductos.add(new CPAire(fecha1.getTime(),fecha2.getTime(),"México", 7,-4,68,12.5,15.5,4));
        fecha2.set(2018,6,12);
        ListaProductos.add(new CPAgua(fecha1.getTime(),fecha2.getTime(),"Chile", 8,-1,4));
        fecha2.set(2018,3,15);
        ListaProductos.add(new CPAgua(fecha1.getTime(),fecha2.getTime(),"Chile", 9,-1,5));
        fecha2.set(2019,4,17);
        ListaProductos.add(new CPN2(fecha1.getTime(),fecha2.getTime(),"NorCorea", 10,-15,"Inmersión", 15));
        Iterator<ProductoFresco> it = ListaProductos.iterator();
        ProductoFresco tmp;
        while(it.hasNext()){
            tmp = it.next(); tmp.showInfo(); System.out.println("");
        }
    }
}

Cabe destacar que es obvio que un producto congelado no es un producto fresco, pero los organizé de esa manera por los atributos que llevaban y teniendo en cuenta que en el curso repiten que las clases no tienen que corresponderse con el mundo real necesariamente.

Saludos y gracias por leerme.
« Última modificación: 24 de Abril 2016, 13:20 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola Ariel

Citar
En donde dice crear dos productos congelados por agua y otros dos por agua, asumí que se refería a dos por agua y dos por aire.

Tienes razón ahí, se trata de una pequeña errata.

Tu código tiene un problema de fondo que es el diseño de la herencia, que deberías corregir.

Es recomendable que leas este hilo: https://www.aprenderaprogramar.com/foros/index.php?topic=2969.0

También puedes buscar el código CU00687B en el buscador del foro para ver cómo mejorar tu ejercicio.

Según tu diseño un ProductoCongelado es un tipo de ProductoFresco. Esto no tiene sentido pues contraviene el modelo del mundo real. Es cierto que no tiene que haber una adaptación perfecta entre mundo real y código, por ejemplo se pueden introducir en el código algunas clases intermedias que no existan en el mundo real para facilitarnos el trabajo. Pero un diseño debe ser coherente y explicar el mundo real, hacerlo de otra manera sería no hacer lo que se hace por parte de todas las empresas de programación y programadores del mundo, sería como decir que todos están equivocados menos tú, cuando más bien será al revés. En resumen, un diseño debe explicar el mundo real (y quizás ampliarlo un poco para nuestra comodidad) pero no ser contrario al mundo real ni introducir incoherencias.

Te recomiendo que leas en el foro las distintas soluciones, comentarios, etc. y teniendo todo ello en cuenta, vuelvas a crear el código para tu ejercicio. Esto te servirá para asentar ideas y conocimientos.

Saludos

 

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