Autor Tema: Java es mejor crear objetos y luego establecer datos con set o directo CU00687B  (Leído 2681 veces)

Bettu

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
Hola,  Envío el ejercicio de herencia CU00687B del tutorial de programación orientada a objetos resuelto.  Cree una nueva clase testHerencia3B, debido a que en la primera que había generado, primero cargaba todos los datos y al final mostraba todos los productos juntos, y aparecían bien todos los datos menos la fecha que siempre me mostraba la misma.  En esta nueva clase la testHerencia3B cargo los datos y los voy mostrando al mismo tiempo, así la visualización es correcta, pero a mí me gustaba más la otra forma de primero ingresar los datos y luego mostrarlos. 
Otra duda que tuve, y realicé diferentes pruebas y luego dejé todas las cargas de la misma manera es que no sabía que es mejor si generar el objeto vacío y luego agregar los datos con SET o cargarlos directamente como lo hice.
Desde ya agradezco a todos por vuestra colaboración.
Saludos

Clase Producto

Código: [Seleccionar]
/**
 * class Producto
 * 19/10/2016
 * Ej. CU00687B
 */
import java.util.Calendar;

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

    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 Calendar getProductoFechaEnvasado() {return fechaEnvasado;}
   public String getProductoPaisOrigen() {return paisOrigen;}
   
   public void setProductoFechaCaducidad(Calendar fechaCaducidad) {
        this.fechaCaducidad = fechaCaducidad;  }
   public void setProductoNumeroLote( int numeroLote) { this.numeroLote = numeroLote;}
   public void setProductoFechaEnvasado(Calendar fechaEnvasado) { this.fechaEnvasado = fechaEnvasado;}
   public void setProductoPaisOrigen(String paisOrigen) { this.paisOrigen = paisOrigen;}
   
   public void mostrarDatosProducto(){
      System.out.println("Producto Nº Lote: " + getProductoNumeroLote() + " Fecha de Caducidad: " + fechaCaducidad.getTime().toString() +
      " País de Origen: " + getProductoPaisOrigen() + " Fecha de Envasado: " + fechaEnvasado.getTime().toString());}
}


Clase de Productos Frescos

Código: [Seleccionar]
/**
 * Write a description of class ProductoFresco here.
 * Ej. CU00687B
 * @19/10/2016
 */

import java.util.Calendar;
public class ProductoFresco extends Producto
{
   
    public ProductoFresco(Calendar fechaCaducidad, int numeroLote, Calendar fechaEnvasado, String paisDeOrigen)
    {
        super (fechaCaducidad, numeroLote, fechaEnvasado, paisDeOrigen);
    }
    public ProductoFresco() {super(); }
     
    public void muestraInfoProdFresco() {
        mostrarDatosProducto(); }
}


Clase de Productos Congelados

Código: [Seleccionar]
/**
 * Write a description of class ProductoCongelado here.
 * Modificado para el ejercicio CU00687B
 * @Bettu
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoCongelado extends Producto
{
    private double temperaturaMant;

    public ProductoCongelado(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant)
    {
        super (fechaCaducidad,numeroLote, fechaEnvasado, paisOrigen);
        this.temperaturaMant = temperaturaMant;
    }
    public ProductoCongelado() {
        super();
        temperaturaMant = 0;}
       
    public double getTemperaturaMant() {return temperaturaMant;}
       
    public void setTemperaturaCont (double temperaturaMant) {
        this.temperaturaMant = temperaturaMant; }
           
    public void muestraInfoProdCongelado() {
        System.out.println("Su temperatura es: "+getTemperaturaMant()+" º");
    }
}


Clase Productos Refrigerados

Código: [Seleccionar]
/**
 * Write a description of class ProductoRefrigerado here.
 * Ej. CU00687B
 * @Bettu
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoRefrigerado extends Producto
{
    private String codigoOrgSupAlim;
    private double temperaturaRecomendada;
   
    public ProductoRefrigerado(Calendar fechaCaducidad, int numeroLote, Calendar fechaEnvasado, String paisOrigen, String codigoOrgSupAlim, double temperaturaRecomendada)
    {
       super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen);
        this.codigoOrgSupAlim = codigoOrgSupAlim;
        this.temperaturaRecomendada = temperaturaRecomendada;   
       
    }

    public String getCodigoOrgSupAlim() {return codigoOrgSupAlim;}
    public double getTemperaturaRecomendada() {return temperaturaRecomendada;}
   
    public void setCodigoOrgSupAlim( String codigoOrgSupAlim) {
        this.codigoOrgSupAlim = codigoOrgSupAlim; }
    public void setTemperaturaRecomendada (double temperaturaRecomendada) {
        this.temperaturaRecomendada = temperaturaRecomendada; }
       
    public void muestraInfoProdRefrigerado() {
        System.out.println("Código del organismo de supervisión alimentaria: "+getCodigoOrgSupAlim() + " Temperatura Recomendada: "+ getTemperaturaRecomendada()+"°"); }

}


Clase Productos Congelados por aire

Código: [Seleccionar]
/**
 * Write a description of class ProductoCongeladoAire here.
 * Ej. CU00687B
 * @Bettu
 * @19/10/2/16
 */
import java.util.Calendar;
public class ProductoCongeladoAire extends ProductoCongelado
{
    private float porcNitrogeno;
    private float porcOxigeno;
    private float porcCO2;
    private float porcVaporAgua;

    /**
     * Constructor for objects of class ProductoCongeladoAire
     */
    public ProductoCongeladoAire()
    {
        super();
        porcNitrogeno = 0;
        porcOxigeno = 0;
        porcCO2 = 0;
        porcVaporAgua = 0;
    }
    public ProductoCongeladoAire(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant,
               float porcNitrogeno, float porcOxigeno, float porcCO2, float porcVaporAgua)
    {
        super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperaturaMant);
        this.porcNitrogeno = porcNitrogeno;
        this.porcOxigeno = porcOxigeno;
        this.porcCO2 = porcCO2;
        this.porcVaporAgua = porcVaporAgua;
    }
    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 muestraComposicionAire() {
        System.out.println("La composición del aire es: Nitrogeno: "+ (porcNitrogeno*100)+" % Oxigeno: "+
         (porcOxigeno*100)+ "% Dioxido de Carbono: " + (porcCO2*100) + "% Vapor Agua: " + (porcVaporAgua * 100) +"%");}



Clase Productos Congelados por  Agua

Código: [Seleccionar]
/**
 * Write a description of class ProductoCongeladoAgua here.
 * Ej. CU00687B
 * @Bettu
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoCongeladoAgua extends ProductoCongelado
{
    // instance variables - replace the example below with your own
    private float salinidadAgua;

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

    public ProductoCongeladoAgua(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant, float salinidadAgua)
    {
        super (fechaCaducidad,numeroLote, fechaEnvasado, paisOrigen, temperaturaMant);
        this.salinidadAgua = salinidadAgua;
    }
   
    public float getSalinidadAgua(){return salinidadAgua;}
    public void setSalinidadAgua(float salinidadAgua) {
        this.salinidadAgua = salinidadAgua; }
    public void mostrarProductoCongeladoAgua() {
        System.out.println("Salinidad del agua: " + getSalinidadAgua()+" gramos de sal por litro de agua");
    }
   
}


Clase Productos Congelados por Nitrógeno

Código: [Seleccionar]
/**
 * Write a description of class ProductoCongeladoNitrogeno here.
 * Ej. CU00687B
 * @Bettu
 * @19/10/2016
 */
import java.util.Calendar;
public class ProductoCongeladoNitrogeno extends ProductoCongelado
{
    private String metodoCongelacion;
    private double tiempoExposicion;

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

    public ProductoCongeladoNitrogeno(Calendar fechaCaducidad, int numeroLote,Calendar fechaEnvasado, String paisOrigen, double temperaturaMant, String metodoCongelacion,double tiempoExposicion )
    {
        super(fechaCaducidad,numeroLote, fechaEnvasado, paisOrigen, temperaturaMant);
        this.metodoCongelacion = metodoCongelacion;
        this.tiempoExposicion = tiempoExposicion;
    }
   
   
    public String getMetodoCongelacion(){return metodoCongelacion;}
    public void setMetodoCongelacion( String metodoCongelacion) { this.metodoCongelacion = metodoCongelacion;}
   
    public double getTiempoExposicion() {return tiempoExposicion;}
    public void setTiempoExposicion(double tiempoExposicion) {this.tiempoExposicion = tiempoExposicion;}
   
    public void mostrarProductoCongeladoNitrogeno() {
        System.out.println("Método de Congelación: " + getMetodoCongelacion() + " Tiempo de exposición al nitrógeno: " +
        getTiempoExposicion() + " en segundos");
    }
}


Clase Principal

Código: [Seleccionar]
/**
 * testHerencia3B Uso de superclases intermedias
 * Fue realizada esta segunda prueba, debido a que si muestro al final como en el primer ejemplo que he realizado
 * en testHerencia3, no me aparecen las fechas correctas
 * Ejercicio CU00687B
 * @19/10/2016
 */
import java.util.Calendar;
public class testHerencia3B


{
    public static void main(String [] Args) {

        System.out.println("** LISTADO DE PRODUCTOS **");
        System.out.println("PRODUCTOS FRESCOS");
        Calendar fechaCad = Calendar.getInstance();
        fechaCad.set(2020,9,3);
        Calendar fechaEnv = Calendar.getInstance();
        fechaEnv.set(2016,3,24);
        ProductoFresco productoFresco1 = new ProductoFresco (fechaCad,101 , fechaEnv,"Chile");
        productoFresco1.muestraInfoProdFresco();
        fechaCad.set(2022,0,1);
        fechaEnv.set(2015,7,6);
        ProductoFresco productoFresco2 = new ProductoFresco (fechaCad, 102, fechaEnv,"Bolivia");
        productoFresco2.muestraInfoProdFresco();

        System.out.println("\n");
        System.out.println("PRODUCTOS REFRIGERADOS");
        fechaCad.set(2020,9,3);
        fechaEnv.set(2014,0,1);
        ProductoRefrigerado productoRefrigerado1 = new ProductoRefrigerado (fechaCad,201 , fechaEnv,"Argentina","CO21-21",21);productoRefrigerado1.mostrarDatosProducto();
        productoRefrigerado1.muestraInfoProdRefrigerado();
        fechaCad.set(2021,9,3);
        fechaEnv.set(2015,0,2);
        ProductoRefrigerado productoRefrigerado2 = new ProductoRefrigerado (fechaCad,202 , fechaEnv,"Uruguay","CO22-22",22);
        productoRefrigerado2.mostrarDatosProducto();
        productoRefrigerado2.muestraInfoProdRefrigerado();
        fechaCad.set(2022,9,3);
        fechaEnv.set(2016,0,3);
        ProductoRefrigerado productoRefrigerado3 = new ProductoRefrigerado (fechaCad,203 , fechaEnv,"Paraguay","CO23-23",23);
        productoRefrigerado3.mostrarDatosProducto();
        productoRefrigerado3.muestraInfoProdRefrigerado();
       
        System.out.println("\n");
        System.out.println("PRODUCTOS CONGELADOS");
        System.out.println("== AGUA ==");
        fechaCad.set(2023,9,21);
        fechaEnv.set(2011,0,11);
        ProductoCongeladoAgua productoCongeladoAgua1 = new ProductoCongeladoAgua (fechaCad,301 , fechaEnv,"Mexico",17,15);
        productoCongeladoAgua1.mostrarDatosProducto();
        productoCongeladoAgua1.muestraInfoProdCongelado();
        productoCongeladoAgua1.mostrarProductoCongeladoAgua();
        fechaCad.set(2024,10,3);
        fechaEnv.set(2012,0,12);
        ProductoCongeladoAgua productoCongeladoAgua2 = new ProductoCongeladoAgua (fechaCad,301 , fechaEnv,"Colombia",17,15);
        productoCongeladoAgua2.mostrarDatosProducto();
        productoCongeladoAgua2.muestraInfoProdCongelado();
        productoCongeladoAgua2.mostrarProductoCongeladoAgua();
        System.out.println("== AIRE ==");
        fechaCad.set(2025,1,25);
        fechaEnv.set(2007,0,7);
        ProductoCongeladoAire productoCongeladoAire1 = new ProductoCongeladoAire (fechaCad, 401, fechaEnv,"Venezuela",11,0.78F,0.21F,0.0003F,0.0097F);
        productoCongeladoAire1.mostrarDatosProducto();
        productoCongeladoAire1.muestraInfoProdCongelado();
        productoCongeladoAire1.muestraComposicionAire();
        fechaCad.set(2026,2,26);
        fechaEnv.set(2010,0,10);
        ProductoCongeladoAire productoCongeladoAire2 = new ProductoCongeladoAire (fechaCad, 402, fechaEnv,"Perú",12,0.77F,0.22F,0.0003F,0.0097F);
        productoCongeladoAire2.mostrarDatosProducto();
        productoCongeladoAire2.muestraInfoProdCongelado();
        productoCongeladoAire2.muestraComposicionAire();
        System.out.println("== NITROGENO ==");
        fechaCad.set(2030,10,9);
        fechaEnv.set(2006,0,6);
        ProductoCongeladoNitrogeno productoCongeladoNitrogeno1 = new ProductoCongeladoNitrogeno (fechaCad,501 , fechaEnv,"México",15,"Nitrogeno Líquido",10);
        productoCongeladoNitrogeno1.mostrarDatosProducto();
        productoCongeladoNitrogeno1.muestraInfoProdCongelado();
        productoCongeladoNitrogeno1.mostrarProductoCongeladoNitrogeno();
        System.out.println("** FIN LISTADO DE PRODUCTOS **");
   }
}
« Última modificación: 29 de Octubre 2016, 13:49 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Buenos días Bettu, felicitarte por el trabajo desarrollado. Es correcto tanto generar un objeto vacío y luego establecer sus propiedades con set, como generar el objeto directamente con sus datos utilizando un constructor. En realidad, puede ser preferible esta última forma ya que haces en un solo paso lo que de la otra forma haces en dos pasos.

Una mejora que podrías hacer a tu ejercicio es introducir una clase intermedia para agrupar características comunes: una "abstracción".

Esto puedes verlo en distintos ejercicios del foro, por ejemplo en https://www.aprenderaprogramar.com/foros/index.php?topic=2342.0 la clase ProductoRefCong es una abstracción.

Otra cosa que debes mejorar es esta:

        productoCongeladoAgua1.mostrarDatosProducto();
        productoCongeladoAgua1.muestraInfoProdCongelado();


La herencia te permite reutilizar el código de forma que no tengas que duplicar llamadas. Fíjate en cómo se plantea en el ejercicio que te he indicado antes:

   public void imprimirCongeladoPorNitrogeno(){
      imprimirProductoC();
      System.out.println("Metodo de congelacion: " + getMetodoCongelacion() + "\nTiempo de exposicion al nitrogeno: " + getTiempoExposicion());
   }

De este modo no es necesario hacer una llamada a mostrar los datos de producto y luego mostrar info de producto congelado. En la propia clase puedes reutilizar el código de sus superclases. Esto es importante comprenderlo en programación orientada a objetos.

Busca el código CU00687B en el buscador del foro y fíjate en las distintas formas de planteamiento que han ofrecido distintos compañeros y compáralo con tus planteamientos, esto te puede ayudar a mejorar.

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