El ejercicio pedía lo siguiente:
EJERCICIO
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 agua 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.
y estas son las clases que creé para conseguir la resolución del ejercicio.
Clase Producto
public class Producto {
private String fechaCaducidad;
private int numLote;
public Producto(){
fechaCaducidad = "";
numLote=0;
}
public Producto(String fechaCaducidad, int numLote){
this.fechaCaducidad = fechaCaducidad;
this.numLote = numLote;
}
public void setFechaCaducidad(String fechaCaducidad){ this.fechaCaducidad = fechaCaducidad;}
public void setNumLote(int numLote){ this.numLote = numLote; }
public String getFechaCaducidad() { return fechaCaducidad; }
public int getNumLote() { return numLote; }
public void muestraDatosProducto(){
System.out.println("Número de lote " + getNumLote());
System.out.println("Fecha de caducidad: " + getFechaCaducidad());
}
}
Clase ProductoRefrigerado
public class ProductoRefrigerado extends Producto{
private int codigoOSA; // código Organismo de Supervisión Alimentaria
public ProductoRefrigerado() {
super();
codigoOSA = 0;
}
public ProductoRefrigerado (String fechaCaducidad, int numLote, int codigoOSA) {
super(fechaCaducidad, numLote);
this.codigoOSA = codigoOSA;
}
public void setCodigoOSA(int codigoOSA) { this.codigoOSA = codigoOSA; }
public int getCodigoOSA() { return codigoOSA; }
public void muestraDatosProducto(){
System.out.println("Producto Refrigerado");
super.muestraDatosProducto();
System.out.println("Código de supervisión alimentaria: " + getCodigoOSA());
}
}
Clase ProductoFresco
public class ProductoFresco extends Producto {
private String fechaEnvasado;
private String paisOrigen;
public ProductoFresco() {
super();
fechaEnvasado = "";
paisOrigen = "";
}
public ProductoFresco (String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen) {
super(fechaCaducidad, numLote);
this.fechaEnvasado = fechaEnvasado;
this.paisOrigen = paisOrigen;
}
public void setFechaEnvasado(String fechaEnvasado) { this.fechaEnvasado = fechaEnvasado; }
public void setPaisOrigen(String paisOrigen) { this.paisOrigen =paisOrigen; }
public String getFechaEnvasado() { return fechaEnvasado; }
public String getPaisOrigen() { return paisOrigen; }
public void muestraDatosProducto() {
System.out.println("Producto Fresco");
super.muestraDatosProducto();
System.out.println("Fecha de envasado: " + getFechaEnvasado());
System.out.println("Pais de origen: " + getPaisOrigen());
}
}
Clase ProductoCongelado
public class ProductoCongelado extends Producto{
private double tempCongelacionRecomendada; // Temperatura Congelacion Recomendada.
public ProductoCongelado(){
super();
tempCongelacionRecomendada = 0;
}
public ProductoCongelado(String fechaCaducidad, int numLote, double tempCongelacionRecomendada){
super(fechaCaducidad, numLote);
this.tempCongelacionRecomendada = tempCongelacionRecomendada;
}
public void setTempCongReco(double tempCongelacionRecomendada){ this.tempCongelacionRecomendada = tempCongelacionRecomendada; }
public double getTempCongReco(){ return tempCongelacionRecomendada; }
public void muestraDatosProducto(){
super.muestraDatosProducto();
System.out.println("Temperatura de congelación recomendada: " + getTempCongReco() + " ºC ");
}
}
Clase CongeladoPorAgua
public class CongeladoPorAgua extends ProductoCongelado{
private double salinidadAgua;
public CongeladoPorAgua(){
super();
salinidadAgua = 0;
}
public CongeladoPorAgua(String fechaCaducidad, int numLote, double tempCongelacionRecomendada, double salinidadAgua){
super(fechaCaducidad, numLote, tempCongelacionRecomendada);
this.salinidadAgua = salinidadAgua;
}
public void setSalinidadAgua(double salinidadAgua){ this.salinidadAgua = salinidadAgua; }
public double getSalinidadAgua(){ return salinidadAgua; }
public void muestraDatosProducto(){
System.out.println("Producto Congelado por Agua");
super.muestraDatosProducto();
System.out.println("Salinidad: " + getSalinidadAgua() + " gramos de sal por litro de agua.");
}
}
Clase CongeladoPorAire
public class CongeladoPorAire extends ProductoCongelado{
private double porcentajeNitrogeno;
private double porcentajeOxigeno;
private double porcentajeDioxidoCarbono;
private double porcentajeVaporAgua;
public CongeladoPorAire(){
super();
porcentajeNitrogeno = 0;
porcentajeOxigeno = 0;
porcentajeDioxidoCarbono = 0;
porcentajeVaporAgua = 0;
}
public CongeladoPorAire(String fechaCaducidad, int numLote, double tempCongelacionRecomendada, double porcentajeNitrogeno, double porcentajeOxigeno, double porcentajeDioxidoCarbono, double porcentajeVaporAgua){
super(fechaCaducidad, numLote, tempCongelacionRecomendada);
this.porcentajeNitrogeno = porcentajeNitrogeno;
this.porcentajeOxigeno = porcentajeOxigeno;
this.porcentajeDioxidoCarbono = porcentajeDioxidoCarbono;
this.porcentajeVaporAgua = porcentajeVaporAgua;
}
public void setPorcentajeNitrogeno(double porcentajeNitrogeno){ this.porcentajeNitrogeno = porcentajeNitrogeno; }
public void setPorcentajeOxigeno(double porcentajeOxigeno){ this.porcentajeOxigeno = porcentajeOxigeno; }
public void setPorcentajeDioxidoCarbono(double porcentajeDioxidoCarbono){ this.porcentajeDioxidoCarbono = porcentajeDioxidoCarbono; }
public void setPorcentajeVaporAgua(double porcentajeVaporAgua){ this.porcentajeVaporAgua = porcentajeVaporAgua; }
public double getPorcentajeNitrogeno(){ return porcentajeNitrogeno; }
public double getPorcentajeOxigeno(){ return porcentajeOxigeno; }
public double getPorcentajeDioxidoCarbono(){ return porcentajeDioxidoCarbono; }
public double getPorcentajeVaporAgua(){ return porcentajeVaporAgua; }
public void muestraDatosProducto(){
System.out.println("Producto Congelado por Aire");
super.muestraDatosProducto();
System.out.print("Composición del aire del: " );
System.out.print(getPorcentajeNitrogeno() + "% de nitrogeno, " + getPorcentajeOxigeno() + "% de Oxigeno, ");
System.out.println(getPorcentajeDioxidoCarbono() + "% de Dioxido de Carbono, " + getPorcentajeVaporAgua() + "% de vapor de agua.");
}
}
Clase CongeladoPorNitrogeno
public class CongeladoPorNitrogeno extends ProductoCongelado{
private String medotoCongelacion;
private int tiempoExposicionAlNitrogeno;
public CongeladoPorNitrogeno(){
super();
medotoCongelacion = "Unknown";
tiempoExposicionAlNitrogeno = 0;
}
public CongeladoPorNitrogeno(String fechaCaducidad, int numLote, double tempCongelacionRecomendada, String metodoCongelacion, int tiempoExposicionAlNitrogeno){
super(fechaCaducidad, numLote, tempCongelacionRecomendada);
this.medotoCongelacion = medotoCongelacion;
this.tiempoExposicionAlNitrogeno = tiempoExposicionAlNitrogeno;
}
public void setMedotoCongelacion(String medotoCongelacion){ this.medotoCongelacion = medotoCongelacion; }
public void setTiempoExposicionAlNitrogeno(int tiempoExposicionAlNitrogeno){ this.tiempoExposicionAlNitrogeno = tiempoExposicionAlNitrogeno; }
public String getMetodoCongelacion(){ return medotoCongelacion; }
public int getTiempoExposicionAlNitrogeno(){ return tiempoExposicionAlNitrogeno; }
public void muestraDatosProducto(){
System.out.println("Producto Congelado con nitrogeno");
super.muestraDatosProducto();
System.out.println("Método de congelación: " + getMetodoCongelacion());
System.out.println("Exposición al nitrogeno de: " + getTiempoExposicionAlNitrogeno() + " segundos.");
}
}
Clase EnvioDeProductos
import java.util.ArrayList;
import java.util.Iterator;
public class EnvioDeProductos {
ArrayList <Producto> listaDeEnvioDeProductos;
public EnvioDeProductos () {
listaDeEnvioDeProductos = new ArrayList <Producto> ();
}
public void addProducto (Producto valorProducto) {
listaDeEnvioDeProductos.add (valorProducto);
}
public int getNumeroDeProductosEnEnvio () {
return listaDeEnvioDeProductos.size();
}
public void muestraDatosEnvioProductos() {
Iterator <Producto> it = listaDeEnvioDeProductos.iterator();
while(it.hasNext()){
Producto dato = it.next();
dato.muestraDatosProducto();
System.out.println ("------------------------");
}
}
}
Clase TestHerencia4
public class TestHerencia4 {
public static void main (String [] args){
Producto productoFresco1 = new ProductoFresco("20/12/2020", 456789, "21/08/2015", "España");
Producto productoFresco2 = new ProductoFresco("2/11/2018", 79354, "17/08/2015", "Francia");
Producto productoRefrigerado1 = new ProductoRefrigerado("15/04/2017", 48688, 14423557);
Producto productoRefrigerado2 = new ProductoRefrigerado("11/04/2018", 77889, 44887792);
Producto productoRefrigerado3 = new ProductoRefrigerado("1/01/2021", 45679, 9787546);
Producto productoCongeladoPorAire1 = new CongeladoPorAire("07/08/2033", 486578, -18.3, 25, 25, 25, 25);
Producto productoCongeladoPorAire2 = new CongeladoPorAire("17/11/2023", 485878, -19.0, 35, 15, 20, 30);
Producto productoCongeladoPorAgua1 = new CongeladoPorAgua("30/12/2018", 68759, -17.7, 33.87);
Producto productoCongeladoPorAgua2 = new CongeladoPorAgua("15/02/2016", 78956, -17.5, 44.87);
Producto productoCongeladoPorNitrogeno1 = new CongeladoPorNitrogeno("2/11/2018", 793548, -16.8, "XR-9", 7895);
EnvioDeProductos lista1 = new EnvioDeProductos();
lista1.addProducto(productoFresco1);
lista1.addProducto(productoFresco2);
lista1.addProducto(productoRefrigerado1);
lista1.addProducto(productoRefrigerado2);
lista1.addProducto(productoRefrigerado3);
lista1.addProducto(productoCongeladoPorAire1);
lista1.addProducto(productoCongeladoPorAire2);
lista1.addProducto(productoCongeladoPorAgua1);
lista1.addProducto(productoCongeladoPorAgua2);
lista1.addProducto(productoCongeladoPorNitrogeno1);
System.out.println("El pedido esta formado por " + lista1.getNumeroDeProductosEnEnvio() + " productos.\n");
lista1.muestraDatosEnvioProductos();
}
}