Autor Tema: Concepto de polimorfismo variables polimórficas en Java herencia clase CU00688B  (Leído 1180 veces)

Toshirou

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Buenas, qué tal? Aquí les dejo la resolución del ejercicio propuesto (CU00688B) del tutorial pdf de programación Java de aprenderaprogramar.

Se me complicó un poco el colocar un título a cada producto que se imprime (producto fresco, congelado, etc). Se me ocurren varias formas, pero creo que existe un método más rápido que quizás no se me ocurre en este momento y espero puedan decirme la forma.

O sea, yo quería que al imprimir, hiciera esto:

Citar
####### Productos Frescos #######
todos los productos frescos...

y así con los demás.

En fin, aquí les dejo la resolución del ejercicio, gracias.

Clase Producto
Código: [Seleccionar]
public class Producto {

private String fecha_envasado;
private String fecha_caducidad;
private String pais;
private int num_lote;

Producto(String envasado, String caducidad, String pais, int num_lote){
this.fecha_envasado = envasado;
this.fecha_caducidad = caducidad;
this.pais = pais;
this.num_lote = num_lote;
}

public String getEnvasado() { return fecha_envasado; }
public void setEnvasado(String envasado) { this.fecha_envasado = envasado; }

public String getCaducidad() { return fecha_caducidad; }
public void setCaducidad(String caducidad) { this.fecha_caducidad = caducidad; }

public String getPais() { return pais; }
public void setPais(String pais) { this.pais = pais; }

public int getNum_lote() { return num_lote; }
public void setNum_lote(int num_lote) { this.num_lote = num_lote; }

public void mostrarInformacion() {
System.out.println("Fecha de envasado: " + this.getEnvasado() + "; Fecha de caducidad: " + this.getCaducidad());
System.out.println("Pais de origen: " + this.getPais() + "; Nro. Lote: " + this.getNum_lote());
}
}

Clase ProductosFrescos
Código: [Seleccionar]
public class ProductosFrescos extends Producto {

ProductosFrescos(String envasado, String caducidad, String pais,  int num_lote){
super(envasado, caducidad, pais, num_lote);
}

public void mostrarInformacion() {
super.mostrarInformacion();
}
}

Clase ProductosRefrigYCongel (abstracción)
Código: [Seleccionar]
public class ProductosRefriYCongel extends Producto{

private double tempRecomend;

public ProductosRefriYCongel(String envasado, String caducidad, String pais, int num_lote, double tempRecomend) {
super(envasado, caducidad, pais, num_lote);
this.tempRecomend = tempRecomend;
}

public double getTempRecomend() { return tempRecomend; }
public void setTempRecomend(double tempRecomend) { this.tempRecomend = tempRecomend; }

public void mostrarInformacion() {
super.mostrarInformacion();
System.out.println("Temperatura recomendada: " + this.getTempRecomend() + "%");
}
}

Clase ProductosRefrigerados
Código: [Seleccionar]
public class ProductosRefrigerados extends ProductosRefriYCongel {

private String codigo_organismo;

public ProductosRefrigerados(String envasado, String caducidad, String pais, int num_lote, double tempRecomend, String codigoOrganis) {
super(envasado, caducidad, pais, num_lote, tempRecomend);
this.codigo_organismo = codigoOrganis;
}

public String getCodigo_organismo() { return codigo_organismo; }
public void setCodigo_organismo(String codigo_organismo) { this.codigo_organismo = codigo_organismo; }

public void mostrarInformacion() {
super.mostrarInformacion();
System.out.println("Código de organismo: " + this.getCodigo_organismo());
}
}

Clase ProductosCongelados
Código: [Seleccionar]
public class ProductosCongelados extends ProductosRefriYCongel {

public ProductosCongelados(String envasado, String caducidad, String pais, int num_lote, double tempRecomend) {
super(envasado, caducidad, pais, num_lote, tempRecomend);
}

public void mostrarInformacion() {
super.mostrarInformacion();
}
}

Clase CongeladoPorAgua
Código: [Seleccionar]
public class PorAgua extends ProductosCongelados {

private double salinidadAgua;

public PorAgua(String envasado, String caducidad, String pais, int num_lote, double tempRecomend, double salinidad) {
super(envasado, caducidad, pais, num_lote, tempRecomend);
this.salinidadAgua = salinidad;
}

public double getSalinidadAgua() { return salinidadAgua; }
public void setSalinidadAgua(double salinidadAgua) { this.salinidadAgua = salinidadAgua; }

public void mostrarInformacion() {
super.mostrarInformacion();
System.out.println("Salinidad de agua: " + this.getSalinidadAgua());
}
}

Clase CongeladoPorAire
Código: [Seleccionar]
public class PorAire extends ProductosCongelados{

private double nitrogeno;
private double oxigeno;
private double dioxCarb;
private double vaporAgua;

public PorAire(String envas, String caduc, String pais, int numLot, double tempRecomend, double nitrog,
double oxig, double dioxCarb, double vaporAgua) {
super(envas, caduc, pais, numLot, tempRecomend);
this.nitrogeno = nitrog;
this.oxigeno = oxig;
this.dioxCarb = dioxCarb;
this.vaporAgua = vaporAgua;
}

public double getNitrogeno() { return nitrogeno; }
public void setNitrogeno(double nitrogeno) { this.nitrogeno = nitrogeno; }

public double getOxigeno() { return oxigeno; }
public void setOxigeno(double oxigeno) { this.oxigeno = oxigeno; }

public double getDioxCarb() { return dioxCarb; }
public void setDioxCarb(double dioxCarb) { this.dioxCarb = dioxCarb; }

public double getVaporAgua() { return vaporAgua; }
public void setVaporAgua(double vaporAgua) { this.vaporAgua = vaporAgua; }

public void mostrarInformacion() {
super.mostrarInformacion();
System.out.println("Nitrogeno: " + this.getNitrogeno() + "%; Oxigeno: " + this.getOxigeno() + "%");
System.out.println("Dioxido de carbono: " + this.getDioxCarb() + "%; Vapor de agua: " + this.getVaporAgua() + "%");
}
}

Clase CongeladoPorNitrogeno
Código: [Seleccionar]
public class PorNitrogeno extends ProductosCongelados {

private String metodCongelacion;
private int tiempExposicNitrogeno;

public PorNitrogeno(String envas, String caduc, String pais, int numLot, double tempRecomend,
String metodCongelac, int tiempExposicNitrogeno) {
super(envas, caduc, pais, numLot, tempRecomend);
this.metodCongelacion = metodCongelac;
this.tiempExposicNitrogeno = tiempExposicNitrogeno;
}

public String getMetodCongelacion() { return metodCongelacion; }
public void setMetodCongelacion(String metodCongelacion) { this.metodCongelacion = metodCongelacion; }

public int getTiempExposicNitrogeno() { return tiempExposicNitrogeno; }
public void setTiempExposicNitrogeno(int tiempExposicNitrogeno) { this.tiempExposicNitrogeno = tiempExposicNitrogeno; }

public void mostrarInformacion() {
super.mostrarInformacion();
System.out.println("Metodo de congelación: " + this.getMetodCongelacion() + "\nTiempo de exposición por Nitrogeno: "
+ this.getTiempExposicNitrogeno());
}
}

Clase EnvioDeProductos
Código: [Seleccionar]
public class EnvioDeProductos {

private ArrayList<Producto> productos;

public EnvioDeProductos() {
this.productos = new ArrayList<>();
}

public ArrayList<Producto> getProductos() { return productos; }
public void setProductos(ArrayList<Producto> productos) { this.productos = productos; }

public void agregarProducto(Producto producto) {
this.productos.add(producto);
}

public void mostrarProductos() {
Iterator<Producto> it = this.productos.iterator();
int contador = 0;
while( it.hasNext() ) {
it.next().mostrarInformacion();
contador++;
}

System.out.println("Total de productos enviados: " + contador);
}
}

Método main
Código: [Seleccionar]
public static void main(String[] args) {
EnvioDeProductos envio = new EnvioDeProductos();

envio.agregarProducto(new ProductosFrescos("12-04-18", "12-05-19", "Perú", 2422333));
envio.agregarProducto(new ProductosFrescos("12-04-18", "12-05-19", "España", 1293291));

envio.agregarProducto(new ProductosRefrigerados("12-03-17", "12-04-18", "Suecia", 23210, 5.0, "XZEP211"));
envio.agregarProducto(new ProductosRefrigerados("12-03-17", "12-04-18", "Bélgica", 19302, 7.0, "PDMS231"));
envio.agregarProducto(new ProductosRefrigerados("12-03-17", "12-04-18", "Australia", 98421, 4.0, "EWK21ME"));

envio.agregarProducto(new PorAgua("12-03-14", "12-04-15", "Perú", 32423, -5.2, 24.5));
envio.agregarProducto(new PorAgua("23-04-13", "23-03-14", "Siria", 45122, -2.0, 24.5));

envio.agregarProducto(new PorAire("12-03-14", "12-04-15", "Bélgica", 14342, -7.2, 12.0, 10.4, 5.3, 10.0));
envio.agregarProducto(new PorAire("23-04-11", "14-02-13", "España", 14342, -2.3, 12.0, 10.4, 5.3, 10.0));

envio.agregarProducto(new PorNitrogeno("13-02-15", "25-02-18", "México", 23211, -10.2, "Criogénico", 23223));

envio.mostrarProductos();
}

Gracias y si me tienen que corregir, háganlo por favor, es la única forma de aprender. Ah, y por favor, revisen mi otra publicación  :P
« Última modificación: 08 de Julio 2018, 13:54 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2053
    • Ver Perfil
Hola Toshirou se comprueba un código bien trabajado por tu parte. Te hago algunas indicaciones de mejora.

Hay nombres de clases que no están correctamente puestos según los convenios que siguen los programadores Java. Por ejemplo en lugar de ProductosFrescos el nombre de la clase debería ser ProductoFresco. Puedes ver una explicación de cómo nombrar las clases en https://aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

Por otro lado, has creado una clase ProductosFrescos que lo único que hace es invocar a la superclase. Si no hace nada nuevo, ¿para qué quieres esta clase?

La clase ProductosRefrigYCongel la veo bien planteada para agrupar cosas comunes a los productos refrigerados y congelados.

Aunque el ejercicio no lo pide, si al imprimir el contenido del envío quieres imprimir primero los frescos, luego los refrigerados, etc. podrías hacerlo de la siguiente manera: primero recorres el envío y usando un if con instanceof vas añadiendo los objetos de cada tipo a una nueva lista. Una vez tienes todos los objetos en sus listas, recorres cada lista y los muestras. Hay ejemplo de uso de instanceof en https://aprenderaprogramar.com/index.php?option=com_content&view=article&id=666:sobreescribir-metodos-tostring-y-equals-en-java-ejemplos-y-ejercicios-resueltos-comparar-objetos-cu00694b&catid=68&Itemid=188, no obstante esto no es algo que se pidiera para esto ejercicio.

Puedes fijarte en esta otra solución del foro y compararla con la tuya: https://aprenderaprogramar.com/foros/index.php?topic=2959.0

Saludos desde España

 

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