Autor Tema: Concepto de polimorfismo y variables polimórficas Java código ejemplo CU00688B  (Leído 2153 veces)

luisdn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola. Dejo el código del siguente ejercicio CU00688B del tutorial de aprendizaje de programación orientada a objetos con Java:

Citar
Amplía el código del programa Java que planteamos como ejercicio en la entrega CU00687 de este curso, relativo a la gestión de una empresa agroalimentaria, teniendo en cuenta que la empresa gestiona envíos a través de diferentes medios, y un envío puede contener cierto número de productos frescos, refrigerados o congelados. Añade al código:

a) Una clase EnvioDeProductos que represente un envío de productos como colección de objetos que admite el polimorfismo.

b) Crear una clase testHerencia4 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por aire y 1 por nitrógeno). Crear un envío que represente la agrupación de los anteriores productos. Mostrar por pantalla la información del número de productos que componen el envío y recorrer los productos del envío usando iterator para mostrar la información (valor de los atributos) de cada uno de ellos.


Clase Productos:

Código: [Seleccionar]
public class Productos{
    private String fechaCaducidad;
    private String numeroLote;
    private String fechaEnvasado;
    private String paisOrigen;
    //Constructor vacío
    public Productos(){
        fechaCaducidad = "";
        numeroLote = "";
        fechaEnvasado = "";
        paisOrigen = "";
    }
    //Constructor con parámetros
    public Productos(String fechaCaducidad, String numeroLote, String fechaEnvasado, String paisOrigen){
        this.fechaCaducidad = fechaCaducidad;
        this.numeroLote = numeroLote;
        this.fechaEnvasado = fechaEnvasado;
        this.paisOrigen = paisOrigen;
    }
    //Constructor a partir de un objeto
    public Productos(Productos p){
        fechaCaducidad = p.fechaCaducidad;
        numeroLote = p.numeroLote;
        fechaEnvasado = p.fechaEnvasado;
        paisOrigen = p.paisOrigen;
    }
    //Métodos set
    public void setFechaCaducidad(String fechaCa){fechaCaducidad = fechaCa;}
    public void setLote(String lote){numeroLote = lote;}
    public void setFechaEnvasado(String fechaEn){fechaEnvasado = fechaEn;}
    public void setPais(String pais){paisOrigen = pais;}
    //Metodos get
    public String getFechaCaducidad(){return fechaCaducidad;}
    public String getLote(){return numeroLote;}
    public String getFechaEnvasado(){return fechaEnvasado;}
    public String getPais(){return paisOrigen;}
   
    public void mostrar(){
        System.out.println("Fecha de caducidad: "+getFechaCaducidad()+". Numero de lote: "+getLote()+". Fecha de envasado: "+getFechaEnvasado()+". Pais de origen: "+getPais());
    }
   
}


Clase ProductosFrescos:

Código: [Seleccionar]
public class ProductosFrescos extends Productos{
   
    //Constructor vacío
    public ProductosFrescos(){
        super();
    }
    //Constructor con parámetros
    public ProductosFrescos(String fechaCaducidad, String numeroLote, String fechaEnvasado, String paisOrigen){
        super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen);
    }
   
    public void mostrar(){
        System.out.println("\nProducto fresco.");
        super.mostrar();
    }
       
}


Clase CongeladosOrefrigerados:

Código: [Seleccionar]
public class CongeladosORefrigerados extends Productos{
    private double temperatura;
   
    public CongeladosORefrigerados(){
        super();
        temperatura = 0.0;
    }
    public CongeladosORefrigerados(String fechaCaducidad, String numeroLote, String fechaEnvasado, String paisOrigen, double temperatura){
        super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen);
        this.temperatura = temperatura;
    }
    public CongeladosORefrigerados(CongeladosORefrigerados c){
        super(c);
        temperatura = c.temperatura;
    }
   
    public void setTemperatura(double temp){temperatura = temp;}
   
    public double getTemperatura(){return temperatura;}
   
    public void mostrar(){
        super.mostrar();
        System.out.print("Temperatura de mantenimiento: "+getTemperatura());
    }
}


Clase ProductosRefrigerados:

Código: [Seleccionar]
public class ProductosRefrigerados extends CongeladosORefrigerados{
    private String codigoSupervision;
    //Constructor vacío
    public ProductosRefrigerados(){
        super();
        codigoSupervision = "";
    }
    //Constructor con parámetros
    public ProductosRefrigerados(String fechaCaducidad, String numeroLote, String fechaEnvasado,
    String paisOrigen, double temperatura, String codigoSupervision ){
        super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperatura);
        this.codigoSupervision = codigoSupervision;
    }
    //Constructor a partir de un objeto
    public ProductosRefrigerados(ProductosRefrigerados pr){
        super(pr);
        codigoSupervision = pr.codigoSupervision;
    }
    //Métodos set
    public void setCodigo(String codigo){codigoSupervision = codigo;}
    //Metodos get
    public String getCodigo(){return codigoSupervision;}

    public void mostrar(){
        System.out.println("\nProducto refrigerado.");
        super.mostrar();
        System.out.println("\nCódigo de supervision: "+getCodigo());
    }
}


Clase ProductosCongelados:

Código: [Seleccionar]
public class ProductosCongelados extends CongeladosORefrigerados{
        //Constructor vacío
    public ProductosCongelados(){
        super();
    }
    //Constructor con parámetros
    public ProductosCongelados(String fechaCaducidad, String numeroLote, String fechaEnvasado,
                                String paisOrigen, double temperatura ){
        super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperatura);
    }
   
    public void mostrar(){
        System.out.println("\nProducto congelado  ");
        super.mostrar();
    }
}


Clase ProdCongAgua:

Código: [Seleccionar]
public class ProdCongAgua extends ProductosCongelados{
    private double salinidad;
   
    public ProdCongAgua(){
        super();
        salinidad = 0.0;
    }
    public ProdCongAgua(String fechaCaducidad, String numeroLote, String fechaEnvasado,
                                String paisOrigen, double temperatura, double salinidad){
                                    super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperatura);
                                    this.salinidad = salinidad;
    }
    public void setSalinidad(double sal){salinidad = sal;}
    public double getSalinidad(){return salinidad;}
    public void mostrar(){
        super.mostrar();
        System.out.println("\nCongelación por agua:\n\t-Salinidad: "+getSalinidad()+" gr de sal por litro.");
    }
}


Clase ProdCongAire:

Código: [Seleccionar]
public class ProdCongAire extends ProductosCongelados{
    private double nitro, oxi, dioxi, vapor;

    public ProdCongAire(){
        super();
        nitro = 0.0;
        oxi = 0.0;
        dioxi = 0.0;
        vapor = 0.0;

    }

    public ProdCongAire(String fechaCaducidad, String numeroLote, String fechaEnvasado,String paisOrigen,
                            double temperatura, double nitro, double oxi, double dioxi, double vapor){
                                    super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperatura);
                                    this.nitro = nitro;
                                    this.oxi = oxi;
                                    this.dioxi = dioxi;
                                    this.vapor = vapor;
    }
   
    public void setNitro(double n){nitro = n;}
    public void setOxi(double o){oxi = o;}
    public void setDioxi(double d){dioxi = d;}
    public void setVapor(double v){vapor = v;}
    public double getNitro(){return nitro;}
    public double getOxi(){return oxi;}
    public double getDioxi(){return dioxi;}
    public double getVapor(){return vapor;}

    public void mostrar(){
        super.mostrar();
        //System.out.print("\nProducto congelado por aire.");
        System.out.println("\nCongelado por aire, composición:\n\t-Nitrogeno: "+getNitro()+"%\n\t-Oxigeno: "+getOxi()+
            "%\n\t-Dioxido de carbono: "+getDioxi()+"%\n\t-Vapor de agua: "+getVapor()+"%");
    }
}


Clase ProdCongNitro:

Código: [Seleccionar]
public class ProdCongNitro extends ProductosCongelados{
    private String metodoCongelacion;
    private int segundosExp;
   
    public ProdCongNitro(){
        super();
        metodoCongelacion = "";
        segundosExp = 0;
    }
    public ProdCongNitro(String fechaCaducidad, String numeroLote, String fechaEnvasado,
                                String paisOrigen, double temperatura, String metCong, int secExp){
                                    super(fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperatura);
                                    metodoCongelacion = metCong;
                                    segundosExp = secExp;
    }
    public void setMetodo(String metodo){metodoCongelacion = metodo;}
    public void setSegundos(int seg){segundosExp = seg;}
    public String getMetodo(){return metodoCongelacion;}
    public int getSegundos(){return segundosExp;}
    public void mostrar(){
        super.mostrar();
        System.out.println("\nCongelación por nitrógeno.");
        System.out.println("\tMétodo congelación: "+getMetodo());
        System.out.println("\tTiempo exposición: "+getSegundos()+" segundos.");
    }
}


Clase EnvioDeProductos:

Código: [Seleccionar]
//Clase para crear una lista de productos para enviar.
//Trabajo con polimorfismo.
import java.util.*;

public class EnvioDeProductos{
    /*
     * Se usa el polimorfismo creando una lista de objetos de la superclase que admite
     * objetos de las subclases
     */
    ArrayList<Productos> listaEnvio;
    //Constructor vacío.
    public EnvioDeProductos(){//
        listaEnvio = null;
    }
    //Constructor con parámetros
    public EnvioDeProductos(ArrayList<Productos> en){
        listaEnvio = en;
    }

    public void setEnvio(ArrayList<Productos> en){listaEnvio = en;}

    public ArrayList<Productos> getEnvio(){return listaEnvio;};

    /*
     * Método que devuelve los objetos de la lista.
     * Utiliza el método mostrar() que es un método reemplazado, hay una versión de él en la clase principal
     * y en cada una de las subclases
     */
    public void mostrarEnvio(){
        System.out.println("El próximo envío estará compuesto por "+listaEnvio.size()+" productos: \n");
        Iterator<Productos> it = listaEnvio.iterator();
        while(it.hasNext()){
            it.next().mostrar();
            System.out.println();

        }
    }

}


Clase TestHerencia4:

Código: [Seleccionar]
import java.util.ArrayList;

public class TestHerencia4{
    public static void main(String[] Args){
        ProductosFrescos tomates = new ProductosFrescos("12/03/17","A-11","01/02/17","España");
        ProductosFrescos zanahorias = new ProductosFrescos("12/03/2017","A-10","02/02/2017","Francia");
        ProductosRefrigerados yogures = new ProductosRefrigerados("20/07/17","B-02","06/01/17","Italia",07,"007C25");
        ProductosRefrigerados salchichas = new ProductosRefrigerados("19/05/2021","B-45","20/12/16","Portugal",05,"012C45");
        ProductosRefrigerados natillas = new ProductosRefrigerados("05/03/17","B-09","0065E98","España",10,"28/01/17");
        ProdCongAgua bacalao = new ProdCongAgua("06/12/22","C-05","30/02/16","Escocia",-19,25.35);       
        ProdCongAgua gambas = new ProdCongAgua("25/08/20","C-07","31/12/15","Malta",-23,35.71);
        ProdCongAire calamares = new ProdCongAire("10/10/22","C-13","25/08/16","Maruecos",-20, 15.25,24.75,42.80,17.20);
        ProdCongAire croquetas = new ProdCongAire("25/08/2028","C-19","10/10/16","Suecia",-18,30.80,45.60,08.30,15.30);
        ProdCongNitro lasaña = new ProdCongNitro("11/06/20","C-25","20/04/16","España",-15,"exposición",12);
       
        EnvioDeProductos envio = new EnvioDeProductos();
        ArrayList<Productos> lista = new ArrayList<Productos>();
        lista.add(tomates);lista.add(zanahorias);lista.add(natillas);lista.add(yogures);lista.add(salchichas);
        lista.add(bacalao);lista.add(gambas);lista.add(calamares);lista.add(croquetas);lista.add(lasaña);
        envio.setEnvio(lista);
        envio.mostrarEnvio();
    }
}
       

Muchas gracias.
Un saludo.
« Última modificación: 08 de Abril 2017, 12:20 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas luisdn en general veo el ejercicio bien resuelto. La única observación (importante) es que los nombres de clases no deben ser en plural. Ver este hilo donde se explica cómo nombrar las clases en Java: https://www.aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

Salu2

 

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