Autor Tema: ejercicio resuelto herencia extends super java tutorial agroalimentaria CU00687B  (Leído 3309 veces)

@mayakoski

  • Sin experiencia
  • *
  • Mensajes: 43
    • Ver Perfil
Saludos. A quien le interese compartir opiniones expongo el planteamiento de mi solución para el ejercicio CU00687B del tutorial de programador Java. Espero comentarios

Código: [Seleccionar]
package agroalimentaria;
import java.util.Calendar;
import java.util.Formatter;
import java.util.GregorianCalendar;

import com.aprenderaprogramar.GestionarEntrada;

public class Productos {
private Calendar fechaDeCaducidad = new GregorianCalendar();
private int numeroDeLote;
private Calendar fechaDeEnvazado = Calendar.getInstance();
private String paisDeOrigen;
private GestionarEntrada anio, mes, dia, textoIngresado;
private Formatter fmt;
private String descripcionProducto;

public Productos() {
setDescripcionProducto();
setFechaDeCaducidad();
setNumeroDeLote();
setFechaDeEnvazado();
setPaisDeOrigen();

}

public String getDescripcionProducto() {
return descripcionProducto;
}

public void setDescripcionProducto() {
System.out.print("Ingrese el nombre del producto: ");
textoIngresado = new GestionarEntrada();
System.out.println();
this.descripcionProducto = textoIngresado.getEntrada();
}

public int getNumeroDeLote() {
return numeroDeLote;
}

public void setNumeroDeLote() {
System.out.print("Ingrese el numero de lote: ");
textoIngresado = new GestionarEntrada();
System.out.println();
this.numeroDeLote = Integer.valueOf(textoIngresado.getEntrada());
}

public String getFechaDeCaducidad() {
//return fechaDeCaducidad.get(Calendar.YEAR)+"-"+fechaDeCaducidad.get(Calendar.MONTH)+"-"+fechaDeCaducidad.get(Calendar.DAY_OF_MONTH);
fmt = new Formatter();
return fechaDeCaducidad.get(Calendar.DAY_OF_MONTH) + "-" + fmt.format("%tB", fechaDeCaducidad) +"-"+ fechaDeCaducidad.get(Calendar.YEAR);
}

public void setFechaDeCaducidad() {
System.out.println("Ingresando datos de la fecha de caducidad: ");
SolicitaFecha();
this.fechaDeCaducidad.set(Integer.valueOf(anio.getEntrada()), Integer.valueOf(mes.getEntrada())-1, Integer.valueOf(dia.getEntrada()));
//this.fechaDeCaducidad.set(fechaDeCaducidad.get(Calendar.YEAR), fechaDeCaducidad.get(Calendar.MONTH), fechaDeCaducidad.get(Calendar.DAY_OF_MONTH));
}

public String getFechaDeEnvazado() {
fmt = new Formatter();
//return this.fechaDeEnvazado.getTime();
return fechaDeEnvazado.get(Calendar.DAY_OF_MONTH) + "-" + fmt.format("%tB", fechaDeEnvazado) +"-"+ fechaDeEnvazado.get(Calendar.YEAR);
}

public void setFechaDeEnvazado() {
System.out.println("Ingresando datos de la fecha de envazado: ");
SolicitaFecha();
this.fechaDeEnvazado.set(Integer.valueOf(anio.getEntrada()), Integer.valueOf(mes.getEntrada())-1, Integer.valueOf(dia.getEntrada()));
}

public String getPaisDeOrigen() {
return paisDeOrigen;
}

public void setPaisDeOrigen() {
System.out.print("Ingrese el país de Origen: ");
textoIngresado = new GestionarEntrada();
System.out.println();
this.paisDeOrigen = textoIngresado.getEntrada();
}

public void SolicitaFecha() {
System.out.print("Ingrese el año: ");
anio = new GestionarEntrada();
System.out.print("Ingrese el mes: ");
mes = new GestionarEntrada();
System.out.print("Ingrese el día: ");
dia = new GestionarEntrada();
System.out.println();
}

public void mostrarInformacionComun() {
System.out.println("El item: " + getDescripcionProducto()  + " es de origen: " + paisDeOrigen + ", fue envazado el: " + getFechaDeEnvazado() + ", en el lote #: " + numeroDeLote + ", Caduca el: " + getFechaDeCaducidad());
}
}

Código: [Seleccionar]
package com.aprenderaprogramar;

import java.util.Scanner;

public class GestionarEntrada {
private String entrada;

public GestionarEntrada() {
pedirEntrada();
}

public void pedirEntrada() {
Scanner entradaTeclado1 = new Scanner(System.in);
setEntrada(entradaTeclado1.nextLine());
}

public String getEntrada() {
return entrada;
}

public void setEntrada(String entrada) {
this.entrada = entrada;
}
}

Código: [Seleccionar]
package agroalimentaria;

public class ProductosFrescos extends Productos {

public ProductosFrescos() {
super();
}
}

Código: [Seleccionar]
package agroalimentaria;

import com.aprenderaprogramar.GestionarEntrada;

public class ProductosPreservados extends Productos{

private double temperaturaDeMantenimiento;

public ProductosPreservados() {
super();
setTemperaturaDeMantenimiento();
}

public double getTemperaturaDeMantenimiento() {
return temperaturaDeMantenimiento;
}

public void setTemperaturaDeMantenimiento() {
GestionarEntrada entradaTeclado;
System.out.println("Ingrese la temperatura de mantenimiento");
entradaTeclado = new GestionarEntrada();
this.temperaturaDeMantenimiento = Double.valueOf(entradaTeclado.getEntrada());
}
}


Código: [Seleccionar]
package agroalimentaria;
import com.aprenderaprogramar.GestionarEntrada;

public class ProductosRefrigerados extends ProductosPreservados{
private GestionarEntrada entradaTeclado;
private String codigoSupervisión;

public ProductosRefrigerados() {
super();
setCodigoSupervision();
}

public String getCodigoSupervision() {
return codigoSupervisión;
}

public void setCodigoSupervision() {
System.out.println("Ingrese el codigo de supervición");
entradaTeclado = new GestionarEntrada();
this.codigoSupervisión = entradaTeclado.getEntrada();
}

public void mostrarInfoProductosRefrigerados() {
super.mostrarInformacionComun();
System.out.println("Tiene el codigo de supervisión: " + this.getCodigoSupervision() + " Una temperatura de mantenimiento: " + super.getTemperaturaDeMantenimiento());
}
}


Código: [Seleccionar]
package agroalimentaria;

public class ProductosCongelados extends ProductosPreservados {

public ProductosCongelados() {
super();
}
}

Código: [Seleccionar]
package agroalimentaria;
import java.util.ArrayList;
import java.util.List;

import com.aprenderaprogramar.GestionarEntrada;

public class CongeladosPorAire extends ProductosCongelados{
List <Double> composicionDelAire = new ArrayList<Double>();

public CongeladosPorAire() {
super();
setComposicionDelAire();
}

public void setComposicionDelAire() {
GestionarEntrada entradaTeclado;
System.out.println("Ingrese el % de nitrógeno: ");
entradaTeclado = new GestionarEntrada();
composicionDelAire.add(Double.valueOf(entradaTeclado.getEntrada()));
System.out.println("Ingrese el % de oxígeno: ");
entradaTeclado = new GestionarEntrada();
composicionDelAire.add(Double.valueOf(entradaTeclado.getEntrada()));
System.out.println("Ingrese el % de dióxido de carbono: ");
entradaTeclado = new GestionarEntrada();
composicionDelAire.add(Double.valueOf(entradaTeclado.getEntrada()));
System.out.println("Ingrese el % de vapor de agua: ");
entradaTeclado = new GestionarEntrada();
composicionDelAire.add(Double.valueOf(entradaTeclado.getEntrada()));
}

public void getComposicionDelAire() {
System.out.println("La composición del aire consta de: " + composicionDelAire.get(0) + " % de nitrógeno");
System.out.println("La composición del aire consta de: " + composicionDelAire.get(1) + " % de oxígeno");
System.out.println("La composición del aire consta de: " + composicionDelAire.get(2) + " % de dióxido de carbono");
System.out.println("La composición del aire consta de: " + composicionDelAire.get(3) + " % de vapor de agua");
}

public void mostrarInfoCongeladosAire() {
super.mostrarInformacionComun();
getComposicionDelAire();
System.out.println("Una temperatura de mantenimento de: " + super.getTemperaturaDeMantenimiento() );
}
}

Código: [Seleccionar]
package agroalimentaria;

import com.aprenderaprogramar.GestionarEntrada;

public class CongeladoPorAgua extends ProductosCongelados{
private int salinidadDelAgua;
GestionarEntrada entradaTeclado;

public CongeladoPorAgua() {
super();
setSalinidadDelAgua();
}

public int getSalinidadDelAgua() {
return salinidadDelAgua;
}

public void setSalinidadDelAgua() {
System.out.println("Ingrese el valor de salinidad en gramos de sal por litro de agua (g/l). ");
entradaTeclado = new GestionarEntrada();
this.salinidadDelAgua = Integer.parseInt(entradaTeclado.getEntrada());
}

public void mostrarInfoCongeladosPorAgua() {
super.mostrarInformacionComun();
System.out.println("Tiene el una salinidad de : " + this.getSalinidadDelAgua() + "g/l  y una temperatura de mantenimento de: " + super.getTemperaturaDeMantenimiento() );
}
}

Código: [Seleccionar]
package agroalimentaria;

import com.aprenderaprogramar.GestionarEntrada;

public class CongeladoPorNitrogeno extends ProductosCongelados{
private String metodoDeCongelacion;
private int tiempoDeExposicion;
GestionarEntrada entradaTeclado;

public CongeladoPorNitrogeno() {
super();
setMetodoDeCongelacion();
setTiempoDeExposicion();

}

public String getMetodoDeCongelacion() {
return metodoDeCongelacion;
}

public void setMetodoDeCongelacion() {
System.out.println("Ingrese el metodo de congelación: ");
entradaTeclado = new GestionarEntrada();
this.metodoDeCongelacion = entradaTeclado.getEntrada();
}

public int getTiempoDeExposicion() {
return tiempoDeExposicion;
}

public void setTiempoDeExposicion() {
System.out.println("Ingrese el tiempo de exposición: ");
entradaTeclado = new GestionarEntrada();
this.tiempoDeExposicion = Integer.parseInt(entradaTeclado.getEntrada());
}

public void mostrarInfoCngeladosPorNitrogeno() {
super.mostrarInformacionComun();
System.out.println("Usa el metodo de congelación: " + this.getMetodoDeCongelacion() + " y un tiempo de exposición de: " + this.getTiempoDeExposicion() + " segundos" );
}
}


Código: [Seleccionar]
package agroalimentaria;

public class TestHerencia3 {
public static void main(String[] args) {

  System.out.println("Creación de producto fresco: "); ProductosFrescos
  productoFresco1 = new ProductosFrescos();
  productoFresco1.mostrarInformacionComun();
 
  System.out.println("Creación de producto fresco: "); ProductosFrescos
  productoFresco2 = new ProductosFrescos();
  productoFresco2.mostrarInformacionComun();

  System.out.println("Creación de producto Refrigerado: ");
  ProductosRefrigerados productoRefrigerado1 = new ProductosRefrigerados();
  productoRefrigerado1.mostrarInfoProductosRefrigerados();
 
  System.out.println("Creación de producto Refrigerado: ");
  ProductosRefrigerados productoRefrigerado2 = new ProductosRefrigerados();
  productoRefrigerado2.mostrarInfoProductosRefrigerados();
 
  System.out.println("Creación de producto Refrigerado: ");
  ProductosRefrigerados productoRefrigerado3 = new ProductosRefrigerados();
  productoRefrigerado3.mostrarInfoProductosRefrigerados();

  System.out.println("Creación de producto congelado x Agua: ");
  CongeladoPorAgua congeladoPorAgua1 = new CongeladoPorAgua();
  congeladoPorAgua1.mostrarInfoCongeladosPorAgua();
 
  System.out.println("Creación de producto congelado x Agua: ");
  CongeladoPorAgua congeladoPorAgua2 = new CongeladoPorAgua();
  congeladoPorAgua2.mostrarInfoCongeladosPorAgua();

  System.out.println("Creación de producto congelado x Aire: ");
  CongeladosPorAire congeladoPorAire1 = new CongeladosPorAire();
  congeladoPorAire1.mostrarInfoCongeladosAire();
 
  System.out.println("Creación de producto congelado x Aire: ");
  CongeladosPorAire congeladoPorAire2 = new CongeladosPorAire();
  congeladoPorAire2.mostrarInfoCongeladosAire();
 
  System.out.println("Creación de producto congelado x Nitrogeno: ");
  CongeladoPorNitrogeno congeladoPorNitrogeno = new CongeladoPorNitrogeno();
  congeladoPorNitrogeno.mostrarInfoCngeladosPorNitrogeno();
}
}

« Última modificación: 24 de Octubre 2020, 20:48 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, el ejercicio está bien orientado pero con numerosas cuestiones que habría que comentar:

1) Las clases deben nombrarse en singular. Producto en lugar de Productos, porque vamos a crear objetos de tipo Producto, no de tipo Productos.

2) Hay que mantener coherencia a la hora de nombrar clases en el mismo nivel. Se indica por un lado CongeladosPorAire y por otro CongeladoPorAgua. Aquí el usar plural en un sitio y singular en otro parece que no tiene importancia, pero sí puede tenerla.

En este hilo se dan consejos sobre cómo nombrar clases y métodos en Java: https://aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

3) Hay cuestiones de diseño que no parecen del todo correctas. Por ejemplo en la clase Productos aparece como atributo private GestionarEntrada anio, mes, dia, textoIngresado;
El nombre GestionarEntrada tampoco es del todo correcto. Si es un objeto para gestionar entradas sería preferible GestorDeEntradas en lugar de GestionarEntrada. Este nombre es más propio de un método que de una clase.
El hecho de que la clase Productos tenga como atributos objetos de tipo GestionarEntrada no es un diseño del todo correcto. Cada clase define un tipo que permite crear objetos, y cada objeto debe tener unas responsabilidades bien delimitadas. En este ejercicio no parece tener lógica que dentro de la clase Productos existan atributos GestionarEntrada porque no se ve razón para que esto sea así.

4) Más cuestiones de diseño: en la clase Productos aparecen peticiones de datos por consola al usuario. Esto tampoco es muy razonable: un producto contiene información y permite su modificación, pero no pide nada al usuario. Pedir algo al usuario tendrá que ser responsabilidad de otros objetos de tipo Gestor, o bien del main, pero no de un producto.

5) Más cosas de diseño: en la clase ProductosFrescos no se define nada, cuando podría haberse aprovechado para definir aspectos o métodos comunes a las subclases, favoreciendo la reutilización de código. Lo mismo ocurre con ProductosCongelados. Ver por ejemplo esta solución: https://aprenderaprogramar.com/foros/index.php?topic=5590.0

6) Se nombra una clase como ProductosPreservados. Este nombre no aparece en el enunciado del ejercicio.

Puede verse una solución correcta para este ejercicio en https://aprenderaprogramar.com/foros/index.php?topic=2342.0

Saludos

 

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