Autor Tema: Ejercicio resuelto herencia simple, extends y super en Java CU00687B Código  (Leído 3163 veces)

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Hola otra vez. Veamos como me salió este ejercicio. Son un montón de clases, ya que además de las que pide el ejercicio, decidí crear una clase ProductoRefCon, que agrupa atributos de las clases ProductoRefrigerado y ProductoCongelado, y de esa manera evitar la repetición de código.
En este ejemplo no he inicializado las variables con valores por defecto, sino con valores específicos, para ver si la clase Test muestra correctamente los datos del producto.
Aquí vamos:

Clase Producto
Código: [Seleccionar]
public class Producto {
    private String fechaCaducidad;
    private int numeroLote;
    private String fechaEnvio;
    private String paisOrigen;
   
    public Producto () {
        fechaCaducidad = "14/02/2018";
        numeroLote = 52525542;
        fechaEnvio = "25/01/2015";
        paisOrigen = "Perú";
    }
   
    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());
        System.out.println ("Número de lote: " + getNumeroLote());
        System.out.println ("Fecha de envío: " + getFechaEnvio());
        System.out.println ("País de origen: " + getPaisOrigen ());
    }
}


Clase ProductoFresco
Código: [Seleccionar]
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]
public class ProRefCon extends Producto {
    private int tempMantRec;
   
    public ProRefCon () {
        super ();
        tempMantRec = 11;
    }
   
    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]
public class ProductoRefrigerado extends ProRefCon  {
    private String codigoSupervAlim;
   
    public ProductoRefrigerado () {
        super ();
        codigoSupervAlim = "75jhyn";
    }
   
    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]
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]
public class ProductoCongeladoAire extends ProductoCongelado {
    private double porcentajeNitrogeno;
    private double porcentajeOxigeno;
    private double porcentajeDioxidoDeCarbono;
    private double porcentajeVaporDeAgua;

    public ProductoCongeladoAire () {
        super ();
        porcentajeNitrogeno = 25.5;
        porcentajeOxigeno = 10.4;
        porcentajeDioxidoDeCarbono = 55;
        porcentajeVaporDeAgua = 10;
    }

    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:");
        System.out.println ("Nitrógeno: " + getPorcentajeNitrogeno() + "%");
        System.out.println ("Oxígeno: " + getPorcentajeOxigeno() + "%");
        System.out.println ("Dióxido de carbono: " + getPorcentajeDioxidoDeCarbono() + "%");
        System.out.println ("Vapor de agua: " + getPorcentajeVaporDeAgua() + "%");
    }
}


Clase ProductoCongeladoAgua
Código: [Seleccionar]
public class ProductoCongeladoAgua extends ProductoCongelado {
    private int salPorLitro;

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

    public ProductoCongeladoAgua (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, double valorPorcentajeNitrogeno, double valorPorcentajeOxigeno, double valorPorcentajeDioxidoDeCarbono, double valorPorcentajeVaporDeAgua, 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]
public class ProductoCongeladoNitrogeno extends ProductoCongelado {
    private String metodo;
    private int tiempoExposicion;

    public ProductoCongeladoNitrogeno () {
        super ();
        metodo = "Frio seco";
        tiempoExposicion = 775;
    }

    public ProductoCongeladoNitrogeno (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, double valorPorcentajeNitrogeno, double valorPorcentajeOxigeno, double valorPorcentajeDioxidoDeCarbono, double valorPorcentajeVaporDeAgua, 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());
        System.out.println ("Tiempo de exposición al nitrógeno: " + getTiempoExposicion() + " segundos");
    }
}


Clase TestProducto
Código: [Seleccionar]
public class TestProducto {
    public static void main (String [] args) {
        ProductoFresco proFres1 = new ProductoFresco ();
        ProductoFresco profres2 = new ProductoFresco ();
        ProductoRefrigerado proRef1 = new ProductoRefrigerado ();
        ProductoRefrigerado proRef2 = new ProductoRefrigerado ();
        ProductoRefrigerado proRef3 = new ProductoRefrigerado ();
        ProductoCongeladoAire proConAi1 = new ProductoCongeladoAire ();
        ProductoCongeladoAire proConAi2 = new ProductoCongeladoAire ();
        ProductoCongeladoAgua proConAg1 = new ProductoCongeladoAgua ();
        ProductoCongeladoAgua proConAg2 = new ProductoCongeladoAgua ();
        ProductoCongeladoNitrogeno proConNit1 = new ProductoCongeladoNitrogeno ();
        System.out.println ("\f");
        System.out.println ("PRODUCTO FRESCO 1");
        proFres1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO FRESCO 2");
        profres2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO REFRIGERADO 1");
        proRef1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO REFRIGERADO 2");
        proRef2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO REFRIGERADO 3");
        proRef3.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AIRE 1");
        proConAi1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AIRE 2");
        proConAi2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AGUA 1");
        proConAg1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AGUA 2");
        proConAg2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON NITRÓGENO 1");
        proConNit1.dameDatos();
    }
}

Cuánto código! Esto se está poniendo divertido!!!
« Última modificación: 28 de Abril 2015, 09:29 por Alex Rodríguez »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Ejercicio CU00687B - herencia simple, extends y super en Java.
« Respuesta #1 en: 27 de Abril 2015, 15:37 »
Hola crear clases como ProductoRefCon es adecuado cuando vemos que ciertas clases comparten algunas cosas en común. Creando una superclase lo que hacemos es agrupar esas cosas para evitar la repetición de código (algo que debemos buscar). ProductoRefCon puede que no coincida con algo del mundo real, es lo que llamamos una abstracción en programación, que en este caso la usamos para evitar repetición de código.

Esto no debes hacerlo:

    public Producto () {
        fechaCaducidad = "14/02/2018";
        numeroLote = 52525542;
        fechaEnvio = "25/01/2015";
        paisOrigen = "Perú";
    }

Eso va contra la filosofía general que se trabaja en el curso (y en general contra la programación orientada a objetos).

Por el contrario, lo que se debe hacer para las pruebas es usar el constructor y pasarle esos parámetros

ProductoFresco proFres1 = new ProductoFresco ("14/02/2018", 52525542, "25/01/2015", "Perú");

De esta manera creas una instancia con esos datos concretos, de la otra manera todas las instancias llevarían esos datos, no sería lógico que todos los productos tuvieran la misma fecha de caducidad.

Ese es el único error grave que has cometido en este ejercicio.

Por otro lado sería recomendable que en vez de hacer esto:

Código: [Seleccionar]
        System.out.println ("\f");
        System.out.println ("PRODUCTO FRESCO 1");
        proFres1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO FRESCO 2");
        profres2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO REFRIGERADO 1");
        proRef1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO REFRIGERADO 2");
        proRef2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO REFRIGERADO 3");
        proRef3.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AIRE 1");
        proConAi1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AIRE 2");
        proConAi2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AGUA 1");
        proConAg1.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON AGUA 2");
        proConAg2.dameDatos();
        System.out.println ("");
        System.out.println ("PRODUCTO CONGELADO CON NITRÓGENO 1");
        proConNit1.dameDatos();

En vez de eso crea una colección, añade los productos y luego recorre la colección con un bucle invocando el método dameDatos(). La idea es obtener el mismo resultado pero de una forma más elegante o correcta.

Saludos!

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Re:Ejercicio CU00687B - herencia simple, extends y super en Java.
« Respuesta #2 en: 27 de Abril 2015, 16:02 »
Muchas gracias. Aguardaba ansioso una devolución de este ejercicio. No quería terminar el siguiente (que está muy relacionado a este) sin antes recibir alguna observación. Me ha servido mucho tu aporte. Gracias de nuevo!

 

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