Autor Tema: Ejemplo de polimorfismo junto a herencia código Java del ejercicio CU00688B  (Leído 2758 veces)

Campillo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Clase Producto
Código: [Seleccionar]
package Numero88;

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/MM/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);
    }
}
Clase ProductosFrescos
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
import java.text.SimpleDateFormat;
/**
 * Write a description of class ProductosFrescos here.
 *
 * @author Campillo
 * @version 22/08/2015
 */
public class ProductosFrescos extends Producto
{
   
    /**
     * Constructor for objects of class ProductosFrescos
     */
    public ProductosFrescos()
    {
        super();
    }

    public ProductosFrescos(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen)
    {
        super (lote, fechaEnvasado, fechaCaducidad, paisOrigen);
    }
   
    public void infoProductosFrescos(){
        super.mostrarProducto();
    }
}
Clase ProductosNoFrescos
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class ProductosNoFrescos here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class ProductosNoFrescos extends Producto
{
    private int temperaturaRecomendada;
   
    /**
     * Constructor for objects of class ProductosNoFrescos
     */
    public ProductosNoFrescos()
    {
        super();
        temperaturaRecomendada = 0;
    }
   
    public ProductosNoFrescos(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen);
        this.temperaturaRecomendada = temperaturaRecomendada;
    }

    public void setTemperaturaRecomendada(int temperaturaRecomendada){
        this.temperaturaRecomendada = temperaturaRecomendada;
    }
   
    public int getTemperaturaRecomendada(){ return temperaturaRecomendada; }
   
    public void infoProductosNoFrescos(){
        super.mostrarProducto();
        System.out.println("La temperatura recomendada: " + getTemperaturaRecomendada() + "º");
    }
}
Clase ProductosRefrigerados
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class ProductosRefrigerados here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ProductosRefrigerados extends ProductosNoFrescos
{
    private String codigoSupervisionAlimentaria;

    /**
     * Constructor for objects of class ProductosRefrigerados
     */
    public ProductosRefrigerados()
    {
        super();
        codigoSupervisionAlimentaria = "";
    }
   
    public ProductosRefrigerados(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, String codigoSupervisionAlimentaria){
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        this.codigoSupervisionAlimentaria = codigoSupervisionAlimentaria;
    }

    public void setCodigoSupervisionAlimentaria(String codigoSupervisionAlimentaria){
        this.codigoSupervisionAlimentaria = codigoSupervisionAlimentaria;
    }
   
    public String getCodigoSupervisionAlimentaria(){ return codigoSupervisionAlimentaria; }
   
    public void infoProductosRefrigerados(){
        super.infoProductosNoFrescos();
        System.out.println("Codigo del organismo de supervision alimentaria: " + getCodigoSupervisionAlimentaria());
    }
}
Clase ProductosCongelados
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class ProductosCongelados here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class ProductosCongelados extends ProductosNoFrescos
{
   

    /**
     * Constructor for objects of class ProductosCongelados
     */
    public ProductosCongelados()
    {
        super();
    }

    public ProductosCongelados(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
    }
}
Clase PCongeladosAire
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class PCongeladosAire here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class PCongeladosAire extends ProductosCongelados
{
    private int dioxidoDeCarbono;
    private int nitrogeno;
    private int oxigeno;
    private int vaporDeAgua;

    /**
     * Constructor for objects of class PCongeladosAire
     */
    public PCongeladosAire(){
        super();
        dioxidoDeCarbono = 0;
        nitrogeno = 0;
        oxigeno = 0;
        vaporDeAgua = 0;
    }
   
    public PCongeladosAire(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, int dioxidodeCarbono, int nitrogeno, int oxigeno, int vaporDeAgua)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        this.dioxidoDeCarbono = dioxidoDeCarbono;
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.vaporDeAgua = vaporDeAgua;
    }

    public void setComposicionDelAire(int dioxidoDeCarbono, int nitrogeno, int oxigeno, int vaporDeAgua){
        this.dioxidoDeCarbono = dioxidoDeCarbono;
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.vaporDeAgua = vaporDeAgua;
    }
   
    public int getDioxidoDeCarbono(){ return dioxidoDeCarbono; }
   
    public int getNitrogeno(){ return nitrogeno; }
   
    public int getOxigeno(){ return oxigeno; }
   
    public int getVaporDeAgua(){ return vaporDeAgua; }
   
    public void infoProductosCongeladosPorAire(){
        super.infoProductosNoFrescos();
        System.out.println("La composicion del aire es: " + getDioxidoDeCarbono() + "% de dioxido de carbono, " + getNitrogeno() + "% de nitrogeno " + getVaporDeAgua() + "% de vapor de agua");
    }
}
PCongeladosAgua
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class PCongeladosAgua here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class PCongeladosAgua extends ProductosCongelados
{
    private int salinidad;

    /**
     * Constructor for objects of class PCongeladosAgua
     */
    public PCongeladosAgua()
    {
        super();
        salinidad = 0;
    }
   
    public PCongeladosAgua(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, int salinidad)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        this.salinidad = salinidad;
    }

    public void setSalinidad(int salinidad){
        this.salinidad = salinidad;
    }
   
    public int getSalinidad(){ return salinidad; }
   
    public void infoProductosCongeladosPorAgua(){
        super.infoProductosNoFrescos();
        System.out.println("La salinidad del agua es: " + getSalinidad() + "g/l");
    }
}
PCongeladosNitrogeno
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class PCOngeladosNitrogeno here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class PCongeladosNitrogeno extends ProductosCongelados
{
    private String metodoCongelacion;
    private int tiempoExposicion;

    /**
     * Constructor for objects of class PCOngeladosNitrogeno
     */
    public PCongeladosNitrogeno()
    {
        super();
        metodoCongelacion = "";
        tiempoExposicion = 0;
    }
   
    public PCongeladosNitrogeno(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, String metodoCongelacion, int tiempoExposicion)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        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 infoProductosCongeladosPorNitrogeno(){
        super.infoProductosNoFrescos();
        System.out.println("El método de congelacion fue: " + getMetodoCongelacion());
        System.out.println("El tiempo de exposicion fue: " + getTiempoExposicion() + "s");
    }
}
Clase EnvioProductos
Código: [Seleccionar]
package Numero88;

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Write a description of class EnvioProductos here.
 *
 * @author Campillo
 * @version 04/09/2015
 */
public class EnvioProductos
{
    private List<Producto> lista1;
   
    public EnvioProductos(){
        lista1 = new ArrayList<Producto>();
    }
   
    public void setLista(Producto valor_producto){
        lista1.add(lista1.size(), valor_producto);
    }
   
    public int numeroElementos(){
        return lista1.size();
    }
   
    public void obtenerProducto(int posicion){
        System.out.println(lista1.get(posicion));
    }
   
    public void datosEnvioProductos() {
        Iterator <Producto> it = lista1.iterator();
        while(it.hasNext()){
            it.next().mostrarProducto();
            System.out.println("");
        }
    }
}
Clase TestHerencia4
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
import java.util.Iterator;
/**
 * Write a description of class TestHerencia4 here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class TestHerencia4
{
    public static void main(String [] Args){
        Calendar fechaEnvasado = Calendar.getInstance();
        Calendar fechaCaducidad = Calendar.getInstance();
        fechaEnvasado.set(2012,2,12);
        fechaCaducidad.set(2014,8,5);
        ProductosFrescos productoFresco1 = new ProductosFrescos("74KLG", fechaEnvasado, fechaCaducidad,"Alemania");
        fechaEnvasado.set(2013,4,30);
        fechaCaducidad.set(2015,11,20);
        ProductosFrescos productoFresco2 = new ProductosFrescos("26RLV", fechaEnvasado, fechaCaducidad,"Francia");

        fechaEnvasado.set(2014,5,23);
        fechaCaducidad.set(2015,10,2);
        ProductosRefrigerados productoRefrigerado1 = new ProductosRefrigerados("15DFS", fechaEnvasado, fechaCaducidad, "Japon", 0, "1245DDGT");
        fechaEnvasado.set(2014,5,29);
        fechaCaducidad.set(2015,5,8);
        ProductosRefrigerados productoRefrigerado2 = new ProductosRefrigerados("35GDR",fechaEnvasado, fechaCaducidad, "China", 5, "5482GEDG");
        fechaEnvasado.set(2013,4,25);
        fechaCaducidad.set(2014,6,12);
        ProductosRefrigerados productoRefrigerado3 = new ProductosRefrigerados("35DGB", fechaEnvasado, fechaCaducidad, "EE.UU.", 12, "4596FREN");

        fechaEnvasado.set(2012,5,30);
        fechaCaducidad.set(2017,4,27);
        PCongeladosAire congeladosAire1 = new PCongeladosAire("65FGR", fechaEnvasado, fechaCaducidad, "Argentina", -5, 2, 60, 18, 23);
        fechaEnvasado.set(2013,9,16);
        fechaCaducidad.set(2016,8,5);
        PCongeladosAire congeladosAire2 = new PCongeladosAire("24SFE", fechaEnvasado, fechaCaducidad, "Brasil", -2, 5, 50, 20, 15);

        fechaEnvasado.set(2000,1,1);
        fechaCaducidad.set(2010,1,1);
        PCongeladosAgua congeladosAgua1 = new PCongeladosAgua("37FST", fechaEnvasado, fechaCaducidad, "Mexico", -7, 12);
        fechaEnvasado.set(2001,11,5);
        fechaCaducidad.set(2011,10,23);
        PCongeladosAgua congeladosAgua2 = new PCongeladosAgua("37SDK", fechaEnvasado, fechaCaducidad, "Italia", -7, 12);

        fechaEnvasado.set(2004,2,5);
        fechaCaducidad.set(2014,5,3);
        PCongeladosNitrogeno congeladosNitrogeno = new PCongeladosNitrogeno("36HRF", fechaEnvasado, fechaCaducidad, "España", -5, "Inmesion", 12);

        EnvioProductos envioProductos = new EnvioProductos();
        Producto [] lista1 = {productoFresco1, productoFresco2, productoRefrigerado1, productoRefrigerado2, productoRefrigerado3, congeladosAire1, congeladosAire2, congeladosAgua1, congeladosAgua2, congeladosNitrogeno};
        envioProductos.numeroElementos();
        for(Producto tmp:lista1){
            envioProductos.setLista(tmp);
        }
        System.out.println("Esta lista la componen " + envioProductos.numeroElementos() + " productos");
        envioProductos.datosEnvioProductos();
    }
}
« Última modificación: 10 de Septiembre 2015, 12:49 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
Re:Aprender a programar java desde cero/Polimorfismo CU00688B
« Respuesta #1 en: 10 de Septiembre 2015, 12:49 »
Hola!

Lo veo todo bien.

Una duda, ¿para qué usas  lista1.add(lista1.size(), valor_producto); en vez de  lista1.add( valor_producto); en la clase EnvioProductos?

Otra cosa, para implementar el polimorfismo es mejor usar Producto productoFresco1 = new ProductosFrescos

en vez de ProductosFrescos productoFresco1 = new ProductosFrescos, y esto con cada uno de los productos que incluyas en un envío, el tipo estático el más global (Producto) y el tipo dinámico el más específico.

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