Hola. Dejo el código del siguente ejercicio CU00688B del tutorial de aprendizaje de programación orientada a objetos con Java:
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:
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:
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:
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:
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:
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:
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:
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:
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:
//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:
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.