Hola, Esta es mi solución para este ejercicio.
He utilizado todo el codigo del ejercicio anterior, sin modificarlo, añadiendo las clases que pide el ejercicio.
En el main, se puede añadir un array para guardar los distintos envios que se creen pero no lo he implementado asi ya que tampoco lo veo necesario....me he atenido a lo que pide el ejercicio.
Estas son las clases nuevas:
EnvioDeProductos:
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
public class EnvioDeProductos
{
private static int nEnvio=0;
private Integer nProductos;
private List<Producto> envio;
public EnvioDeProductos(){
envio=new ArrayList<Producto>();
nEnvio++;
nProductos=0;
}
public void addProductoAlEnvio(Producto p){
envio.add(p);
nProductos++;
}
public Integer getCantidadproductos(){
return nProductos;
}
public void contenidoEnvio(){
Iterator <Producto> it=envio.iterator();
Producto p;
while(it.hasNext()){
p=it.next();
System.out.println(p);
}
}
}
TestHerencia4:
import java.util.ArrayList;
public class TestHerencia4
{
public static void main(String[] args){
//se crea una lista para contener todos los productos
ArrayList<Producto> listaProductos=new ArrayList<Producto>();
//se crean los productos
//parametros del fresco
//String fechaCaducidad, int numeroLote,String paisOrigen, String fechaEnvasado
//Crear 2
Fresco productoFresco1 = new Fresco("12/2/16", 565, "España", "1/1/16");
listaProductos.add(productoFresco1);
Fresco productoFresco2 = new Fresco("12/5/18", 456, "España", "1/5/15");
listaProductos.add(productoFresco2);
//parametros del refrigerado:
//String fechaCaducidad, int numeroLote,String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String codigo
//crear 3
Refrigerado productoRefrigerado1 = new Refrigerado("12/8/18", 2300,"España", "13/5/14", 4, "B35-267");
listaProductos.add(productoRefrigerado1);
Refrigerado productoRefrigerado2 = new Refrigerado("12/8/17", 2385,"España", "7/3/15", 5, "Z85-29");
listaProductos.add(productoRefrigerado2);
Refrigerado productoRefrigerado3 = new Refrigerado("1/3/16", 123,"España", "4/1/15", -1, "T3-45");
listaProductos.add(productoRefrigerado3);
//parametros del congelado por aire
//String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String composiciónAire
//composición del aire: %nitrogeno,%oxigeno,%dioxido de carbono,%vapor de agua
//crear 2
Congelado congeladoAire1 = new CongeladoAire("12/8/18", 2300,"España", "13/5/14", -25.0,"Nitrogeno:78%%,Oxigeno:21%%,Dioxido de carbono:0,03%%,Vapor de agua:variable");
listaProductos.add(congeladoAire1);
Congelado congeladoAire2 = new CongeladoAire("12/8/16", 4524,"España", "10/11/14", -25.0,"Nitrogeno:78%%,Oxigeno:21%%,Dioxido de carbono:0,03%%,Vapor de agua:variable");
listaProductos.add(congeladoAire2);
//parametros congelado por agua
//String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String salinidadAgua
//salinidad del agua: gr/litro
//crear 2
Congelado congeladoAgua1 = new CongeladoAgua("1/3/15", 56,"España", "1/3/16", -20.0,"<0,5g/l");
listaProductos.add(congeladoAgua1);
Congelado congeladoAgua2 = new CongeladoAgua("12/2/15", 89,"España", "12/2/16", -20.0,"<0,5g/l");
listaProductos.add(congeladoAgua2);
//parametros congelado por nitrogeno
//String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String metodoCongelacion,int tiempoExposicion
//crear 1
Congelado congeladoNitrogeno = new CongeladoNitrogeno("1/3/15", 32,"España", "1/3/16", -30.0,"Tunel de refrigeración",300);
listaProductos.add(congeladoNitrogeno);
//se crea un envio y se añaden los productos al envio
EnvioDeProductos envio = new EnvioDeProductos();
for(Producto p : listaProductos){
envio.addProductoAlEnvio(p);
}
//Se imprime la información del envio
System.out.println("Número de productos en el envio: " + envio.getCantidadproductos());
System.out.println("Información de los productos contenidos en el envio: ");
envio.contenidoEnvio();
}
}
Y el resto de clases reutilizadas:
clase Producto:
public class Producto
{
private String fechaCaducidad;
private int numeroLote;
private String paisOrigen;
private String fechaEnvasado;
public Producto(String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado){
this.fechaCaducidad=fechaCaducidad;
this.numeroLote=numeroLote;
this.paisOrigen=paisOrigen;
this.fechaEnvasado=fechaEnvasado;
}
public String getFechaCaducidad(){
return fechaCaducidad;
}
public int getNumeroLote(){
return numeroLote;
}
public void setFechaCducidad(String fecha){
fechaCaducidad=fecha;
}
public void setNumeroLote(int numero){
numeroLote=numero;
}
public String getPaisOrigen(){
return paisOrigen;
}
public String getFechaEnvasado(){
return fechaEnvasado;
}
public void setPaisOrigen(String paisOrigen){
this.paisOrigen=paisOrigen;
}
public void setFechaEnvasado(String fechaEnvasado){
this.fechaEnvasado=fechaEnvasado;
}
@Override
public String toString(){
return String.format("Fecha de Caducidad: " + fechaCaducidad + "\n" +
"Número de lote: " + numeroLote + "\n" +
"Pais de origen: " + this.paisOrigen +"\n" +
"Fecha de envasado: " + this.fechaEnvasado +"\n");
}
}
Clase Fresco
public class Fresco extends Producto
{
//esta clase no tiene atributos propios, los tiene la superclase
public Fresco(String fechaCaducidad, int numeroLote,String paisOrigen, String fechaEnvasado){
super(fechaCaducidad,numeroLote,paisOrigen,fechaEnvasado);
}
@Override
public String toString(){
return String.format("Información del producto fresco: \n" + super. toString());
}
}
Clase congelado:
public class Congelado extends Producto
{
//información generica
private double temperaturaMantenimiento;
public Congelado(String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento){
super(fechaCaducidad,numeroLote,paisOrigen,fechaEnvasado);
this.temperaturaMantenimiento=temperaturaMantenimiento;
}
public double getTemperaturaMantenimiento(){
return temperaturaMantenimiento;
}
public void setTemperaturaMantenimiento(double temperaturaMantenimiento){
this.temperaturaMantenimiento=temperaturaMantenimiento;
}
@Override
public String toString(){
return String.format(super. toString() +
"Temperatura de mantenimiento: " + this.temperaturaMantenimiento + "ºC" + "\n");
}
}
clase refrigerado:
public class Refrigerado extends Congelado
{
//información especifica
private String codigo;
public Refrigerado(String fechaCaducidad, int numeroLote,String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String codigo){
super(fechaCaducidad,numeroLote,paisOrigen,fechaEnvasado,temperaturaMantenimiento);
this.codigo=codigo;
}
public String getCodigo(){
return codigo;
}
public void setCodigo(String codigo){
this.codigo=codigo;
}
@Override
public String toString(){
return String.format("Información del producto refrigerado: \n" +
super. toString() +
"Codigo OSA: " + this.codigo +"\n" );
}
}
Clase congelado por aire:
public class CongeladoAire extends Congelado
{
private String composiciónAire;
public CongeladoAire(String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String composiciónAire){
super(fechaCaducidad, numeroLote, paisOrigen, fechaEnvasado,temperaturaMantenimiento);
this.composiciónAire=composiciónAire;
}
public void setComposiciónAire(String composiciónAire){
this.composiciónAire=composiciónAire;
}
public String getComposiciónAire(){
return this.composiciónAire;
}
@Override
public String toString(){
return String.format("Información del producto congelado por aire: \n"+
super.toString() +
"Composición de aire: " + this.composiciónAire + "\n");
}
}
clase congelado por agua:
public class CongeladoAgua extends Congelado
{
private String salinidadAgua;
public CongeladoAgua(String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String salinidadAgua){
super(fechaCaducidad, numeroLote, paisOrigen, fechaEnvasado,temperaturaMantenimiento);
this.salinidadAgua=salinidadAgua;
}
public void setSalinidadAgua(String salinidadAgua){
this.salinidadAgua=salinidadAgua;
}
public String getSalinidadAgua(){
return this.salinidadAgua;
}
@Override
public String toString(){
return String.format("Información del producto congelado por agua: \n"+
super. toString() +
"Salinidad del agua: " + this.salinidadAgua + "\n");
}
}
clase congelado por nitrogeno:
public class CongeladoNitrogeno extends Congelado
{
private String metodoCongelacion;
private int tiempoExposicion;
public CongeladoNitrogeno(String fechaCaducidad, int numeroLote, String paisOrigen, String fechaEnvasado, double temperaturaMantenimiento, String metodoCongelacion,int tiempoExposicion){
super(fechaCaducidad, numeroLote, paisOrigen, fechaEnvasado,temperaturaMantenimiento);
this.metodoCongelacion=metodoCongelacion;
this.tiempoExposicion=tiempoExposicion;
}
@Override
public String toString(){
return String.format("Información del producto congelado por nitrogeno: \n"+
super. toString() +
"Metodo de congelación: " + this.metodoCongelacion + "\n" +
"Tiempo de exposición al nitrogeno: " + this.tiempoExposicion + " segundos");
}
}
Un saludo y gracias.