Autor Tema: Java cómo realizar un diseño de clases con herencia principales errores CU00688B  (Leído 3737 veces)

rubens23

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Concepto de polimorfismo y variables polimórficas en Java. Jerarquía de tipos. Ejemplos. Ejercicio.

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.

Bueno, no se si está bien o no, pero es que tampoco he entendido lo que pide el ejercicio y tampoco lo entiendo mirando por el foro. Aún así, os dejo lo que he hecho. Un saludo.

CLASE PRODUCTOS

Código: [Seleccionar]
package aprender;

public class Productos {
private String fechaCaducidad;
private int numLote;
private String fechaEnvasado;
private String paisOrigen;
private int trec;
public Productos(){}
public Productos(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen){
this.fechaCaducidad=fechaCaducidad;
this.numLote=numLote;
this.fechaEnvasado=fechaEnvasado;
this.paisOrigen=paisOrigen;
}
public Productos(String fechaCaducidad, int numLote, String fechaEnvasado, String paisOrigen,int trec){
this.fechaCaducidad=fechaCaducidad;
this.numLote=numLote;
this.fechaEnvasado=fechaEnvasado;
this.paisOrigen=paisOrigen;
this.trec=trec;
}
public String getFechaCaducidad(){
return fechaCaducidad;
}
public int getNumLote(){
return numLote;
}
public String getFechaEnvasado(){
return fechaEnvasado;
}
public String getPaisOrigen(){
return paisOrigen;
}
public int getTemperaturaRecomendada(){
return trec;
}
public void mostrarProductos(){
System.out.println("Productos con: \nNumero de lote: "+getNumLote()+"\nFecha de caducidad: "+getFechaCaducidad()+"\nFecha de Envasado: "+getFechaEnvasado()+"\nPais de origen: "+getPaisOrigen()+"\nTemperatura de mantenimiento recomendada: "+getTemperaturaRecomendada()+"\n");
}

}

CLASE PRODUCTOS REFRIGERADOS, CONGELADOS Y FRESCOS (enlazo a otro ejercicio en el que ya lo subí)
https://www.aprenderaprogramar.com/foros/index.php?topic=3035.0

CLASE ENVIO DE PRODUCTOS

Código: [Seleccionar]
package aprender;

import java.util.ArrayList;
import aprender.Productos;
import java.util.Iterator;

public class EnvioDeProductos {
ArrayList<Productos> producto;
Productos prod = new Productos("24/11/15", 12,"05/08/2015","España");
public EnvioDeProductos(){
}
public void envioDeProductos(Productos prod){
this.prod=prod;
producto = new ArrayList<Productos>();
//if (producto.isEmpty() == false){
producto.add(prod);
Iterator <Productos> produc = producto.iterator();
while(produc.hasNext()){
produc.next().mostrarProductos();
}

}
}


CLASE TEST HERENCIA

Código: [Seleccionar]
package aprender;

public class TestHerencia {
public static void main (String [] args){
ProductosFrescos pf = new ProductosFrescos("24/11/15", 12,"05/08/2015","España");
ProductosFrescos pf1 = new ProductosFrescos("27/11/15", 11,"05/08/2015","Italia");
ProductoRefrigerado pr = new ProductoRefrigerado("12/04/16",14,"05/08/2015","España",12);
ProductoRefrigerado pr1 = new ProductoRefrigerado("12/04/16",14,"05/08/2015","España",12);
ProductoRefrigerado pr2 = new ProductoRefrigerado("12/04/16",14,"05/08/2015","España",12);
CongeladosPorAire cpa = new CongeladosPorAire("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorAire cpa1 = new CongeladosPorAire("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorAgua cpag= new CongeladosPorAgua("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorAgua cpag1= new CongeladosPorAgua("23/11/15", 15, "05/08/2015","España",5);
CongeladosPorNitrogeno cpn= new CongeladosPorNitrogeno("23/11/15", 15, "05/08/2015","España",5);
EnvioDeProductos envio = new EnvioDeProductos();
pr.setCodigoAlim("pr23433");pr1.setCodigoAlim("pr23433");pr2.setCodigoAlim("pr23433");
cpa.setComposicionAire(12, 10, 54, 24);cpa1.setComposicionAire(12, 10, 54, 24);
cpag.setSalinidadAgua(23);cpag1.setSalinidadAgua(21);
cpn.setMetodoCongelacion("hielo");cpn.setTiempoExposicion(53);
/*pf.mostrar1();pf1.mostrar1();
pr.mostrar2();pr1.mostrar2();pr2.mostrar2();
cpa.mostrar3();cpa.mostrar5();cpa1.mostrar3();cpa1.mostrar5();
cpag.mostrar6();cpag1.mostrar6();
cpn.mostrar4();*/
envio.envioDeProductos(pf1);
envio.envioDeProductos(pf);
envio.envioDeProductos(pr);
envio.envioDeProductos(pr1);
envio.envioDeProductos(pr2);
envio.envioDeProductos(cpa);
envio.envioDeProductos(cpa1);
envio.envioDeProductos(cpag);
envio.envioDeProductos(cpag1);
envio.envioDeProductos(cpn);



}

}

« Última modificación: 09 de Agosto 2015, 18:54 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Hola veo que no has corregido los fallos que tenías en el CU00687B por lo que los sigues teniendo en este ejercicio.

Tienes un error grave con los nombres, por ejemplo ArrayList<Productos> producto;

Estás declarando una colección de productos con el nombre "producto". Esto no tiene ninguna lógica, al tratarse de una colección de productos debería llamarse listaDeProductos, coleccionDeProductos, envioDeProductos, o cualquier nombre que refleje que se trata de varios productos. Al nombrarlo como "producto" parece referirse a un único producto, y además es un nombre que se confunde con el de otra clase  ???

Otro fallo es declarar public void envioDeProductos , no debes tener un método con el mismo nombre que la clase (para eso ya están los constructores). El nombre del método debe indicar lo que hace o para qué sirve el método.

Salu2

rubens23

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 30
    • Ver Perfil
Vale, lo tendré en cuenta. El resto de cosas están bien? He cumplido con lo que pedía el ejercicio?

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Hola, no está bien. La clase EnvioDeProductos se supone que representa un envío que por ejemplo va en un camión. ¿Qué significado tiene que en esta clase se tenga un atributo como

Productos prod = new Productos("24/11/15", 12,"05/08/2015","España");

?

Tampoco se entiende por qué está ese atributo inicializado en la declaración.

En la clase Productos tienes un atributo private int trec; Eso no es un diseño conforme a lo que pedía el ejercicio

Tienes métodos mostrar1, mostrar2, mostrar3 etc. que tampoco son un buen diseño.

Puedes consultar este ejercicio como guía sin que eso quiera decir que esté perfecto https://www.aprenderaprogramar.com/foros/index.php?topic=2942

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