Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Campillo en 07 de Septiembre 2015, 19:54

Título: Ejemplo de polimorfismo junto a herencia código Java del ejercicio CU00688B
Publicado por: Campillo en 07 de Septiembre 2015, 19:54
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();
    }
}
Título: Re:Aprender a programar java desde cero/Polimorfismo CU00688B
Publicado por: César Krall 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!