Mi versión del Ejercicio propuesto en la Entrega Nº86. Ejercicio CU00686B.
El código corre y hace lo que se pretende. Sin embargo -además de las observaciones que me harán- tengo una duda respecto a lo siguiente:
Dentro de la clase TestHerencia2 está el método main, y otros dos métodos. La incorporación de estos dos métodos es lo que "me hace ruido" en cuanto a la filosofía de la POO, ya que la clase GestionTipoProducto modifica campos del método main a través de esos dos métodos.
Hubiera preferido no tener que incluirlos pero me es inevitable a la hora de: no repetir código, y no declarar los campos (tmpString y tmpInt) como públicos.
Clase Producto
/**
* Clase Producto.
*
* @author (RaGa)
* @version (20150407)
*/
public class Producto
{
// Declaración de campos de instancia.
private String fechaDeCaducidad;
private int nroLote;
/**
* Constructor de la clase Producto.
*
* Se iniciliza con dos parámetros:
* fechaDeCaducidad (tipo String) que es la fecha de caducidad del producto.
* nroLote (tipo int) que es el número de lote al que corresponde el producto.
*/
public Producto(String fechaDeCaducidad, int nroLote){
this.fechaDeCaducidad = fechaDeCaducidad;
this.nroLote = nroLote;
} // fin del constructor
//SETTERS//
/**
* Método setFechaDeCaducidad
* Establece la fecha de caducidad del producto.
*
* @param fechaDeCaducidad representa la fecha de caducidad del producto.
*/
public void setFechaDeCaducidad(String fechaDeCaducidad){this.fechaDeCaducidad = fechaDeCaducidad;}
/**
* Método setNroLote
* Establece el número de lote del producto.
*
* @param nroLote representa el número de lote del producto.
*/
public void setNroLote(int nroLote){this.nroLote = nroLote;}
//GETTERS//
/**
* Método getFechaDeCaducidad
* El método devuelve la fecha de caducidad del producto.
*
* @return retorna la fecha de caducidad del producto.
*/
public String getFechaDeCaducidad(){return fechaDeCaducidad;}
/**
* Método getNroLote
* El método devuelve el número de lote del producto.
*
* @return retorna el número de lote del producto.
*/
public int getNroLote(){return nroLote;}
// MÉTODOS VARIOS //
/**
* Método mostrarFechaDeCaducidad
*
* El método muestra la fecha de caducidad del producto.
*/
public void mostrarFechaDeCaducidad(){System.out.print(fechaDeCaducidad+"\n");}
/**
* Método mostrarNroLote
*
* El método muestra el numero de lote del producto.
*/
public void mostrarNroLote(){System.out.print(nroLote+"\n");}
} // find e la clase
Clase ProductoFresco
/**
* Clase ProductoFresco
*
* @author (RaGa)
* @version (20150407)
*/
public class ProductoFresco extends Producto
{
// Declaración de campos de instancia.
private String fechaEnvasado;
private String paisDeOrigen;
/**
* Constructor de la clase ProductoFresco
*
* Se debe pasar como parámetro los campos de la superclase Producto.
* Los campos específicos de esta clase son:
* fechaEnvasado que representa la fecha de envasado del producto fresco (tipo String) y se inicializa como "desconocida".
* paisDeOrigen que representa el país de origen del producto fresco (tipo String) y se inicializa como "desconocido".
*/
public ProductoFresco(String fechaDeCaducidad, int nroLote){
super (fechaDeCaducidad,nroLote);
fechaEnvasado = "desconocida";
paisDeOrigen = "desconocido";
} // fin del constructor
//SETTERS//
/**
* Método setFechaEnvasado
* Establece la fecha de envasado del producto fresco.
*
* @param representa la fecha de envasado del producto fresco.
*/
public void setFechaEnvasado(String fechaEnvasado){this.fechaEnvasado = fechaEnvasado;}
/**
* Método setPaisDeOrigen
* Establece el pais de origen del producto fresco.
*
* @param representa el pais de origen del producto fresco.
*/
public void setPaisDeOrigen(String paisDeOrigen){this.paisDeOrigen = paisDeOrigen;}
//GETTERS//
/**
* Método getFechaEnvasado
* El método devuelve la fecha de envase del producto fresco.
*
* @return retorna la fecha de envase del producto fresco.
*/
public String getFechaEnvasado(){return fechaEnvasado;}
/**
* Método getPaisDeOrigen
* El método devuelve el pais de origen del producto fresco.
*
* @return retorna el pais de origen del producto fresco.
*/
public String getPaisDeOrigen(){return paisDeOrigen;}
// MÉTODOS VARIOS //
/**
* Método mostrarFechaEnvasado
*
* El método muestra la fecha de envasado del producto fresco.
*/
public void mostrarFechaEnvasado(){System.out.print(fechaEnvasado+"\n");}
/**
* Método mostrarPaisDeOrigen
*
* El método muestra el pais de origen del producto fresco.
*/
public void mostrarPaisDeOrigen(){System.out.print(paisDeOrigen+"\n");}
} // fin de la clase
Clase ProductoRefrigerado
/**
* Clase ProductoRefrigerado
*
* @author (RaGa)
* @version (20150407)
*/
public class ProductoRefrigerado extends Producto
{
// Declaración de campos de instancia.
private String codigoOSA;
/**
* Constructor de la clase ProductoRefrigerado
*
* Se debe pasar como parámetro los campos de la superclase Producto.
* El campos específico de esta clase es:
* codigoOSA que representa el código del organismo de supervisión alimentaria del producto refrigerado (tipo String) y se inicializa como "desconocido".
*/
public ProductoRefrigerado(String fechaDeCaducidad, int nroLote){
super (fechaDeCaducidad,nroLote);
codigoOSA = "desconocido";
} // fin del constructor
//SETTERS//
/**
* Método setCodigoOSA
* Establece el código del organismo de supervisión alimentaria.
*
* @param representa el código del organismo de supervisión alimentaria.
*/
public void setCodigoOSA(String codigoOSA){this.codigoOSA = codigoOSA;}
//GETTERS//
/**
* Método getCodigoOSA
* El método devuelve el código del organismo de supervisión alimentaria.
*
* @return retorna el código del organismo de supervisión alimentaria.
*/
public String getCodigoOSA(){return codigoOSA;}
// MÉTODOS VARIOS //
/**
* Método mostrarCodigoOSA
*
* El método muestra el código del organismo de supervisión alimentaria.
*/
public void mostrarCodigoOSA(){System.out.print(codigoOSA+"\n");}
} // fin de la clase
Clase ProductoCongelado
/**
* Clase ProductoCongelado
*
* @author (RaGa)
* @version (20150408)
*/
public class ProductoCongelado extends Producto
{
// Declaración de campos de instancia.
private int tempCongelacionRecomendada;
/**
* Constructor de la clase ProductoCongelado
*
* Se debe pasar como parámetro los campos de la superclase Producto.
* El campo específico de esta clase es:
* tempCongelacionRecomendada que representa la temperatura de congelación recomendada (tipo int) y se inicializa como -500.
*/
public ProductoCongelado(String fechaDeCaducidad, int nroLote){
super (fechaDeCaducidad,nroLote);
tempCongelacionRecomendada = -500;
} // fin del constructor
//SETTERS//
/**
* Método setFechaEnvasado
* Establece la temperatura de congelación recomendada.
*
* @param representa la temperatura de congelación recomendada.
*/
public void setTempCongelacionRecomendada(int tempCongelacionRecomendada){this.tempCongelacionRecomendada = tempCongelacionRecomendada;}
//GETTERS//
/**
* Método getTempCongelacionRecomendada
* El método devuelve la temperatura de congelacion recomendada.
*
* @return retorna la temperatura de congelacion recomendada.
*/
public int getTempCongelacionRecomendada(){return tempCongelacionRecomendada;}
// MÉTODOS VARIOS //
/**
* Método mostrarTempCongelacionRecomendada
*
* El método muestra la temperatura de congelacion recomendada.
*/
public void mostrarTempCongelacionRecomendada(){System.out.print(tempCongelacionRecomendada);}
} // fin de la clase
Clase TestHerencia2
/**
* Clase TestHerencia2.
* Esta clase sirve para probar nuestro incipiente incursión en el tema Herencia de Java.
*
* @author (RaGa)
* @version (20150408)
*/
public class TestHerencia2{
// Declaración de campos de instancia
static String tmpFechaDeCaducidad;
static int tmpNroLote;
/**
* Constructor de la clase TestHerencia2 vacío.
*/
public TestHerencia2(){
}
/**
* Método main.
*/
public static void main (String[] args){
// Declaración de los campos de clase
String tmpString;
int tmpInt;
//CARGA DE PRODUCTOS
System.out.print("\fBienvenido a la carga de Productos Alimenticios!\n");
//Carga de un Producto Fresco
Exibidor.mostrarEncabezadoProductoTipo("Fresco");
GestorTipoProducto.pedirCampos();
ProductoFresco miProductoFresco = new ProductoFresco(tmpFechaDeCaducidad,tmpNroLote);
System.out.println("Por favor ingrese la fecha de envasado:");
miProductoFresco.setFechaEnvasado(GestionadorEntradasTeclado.leerString());
System.out.println("Por favor ingrese el país de origen del producto:");
miProductoFresco.setPaisDeOrigen(GestionadorEntradasTeclado.leerString());
//Carga de un Producto Refrigerado
Exibidor.mostrarEncabezadoProductoTipo("Refrigerado");
GestorTipoProducto.pedirCampos();
ProductoRefrigerado miProductoRefrigerado = new ProductoRefrigerado(tmpFechaDeCaducidad,tmpNroLote);
System.out.println("Por favor ingrese el Código del organismo de supervisión alimentaria:");
miProductoRefrigerado.setCodigoOSA(GestionadorEntradasTeclado.leerString());
//Carga de un Producto Congelado
Exibidor.mostrarEncabezadoProductoTipo("Congelado");
GestorTipoProducto.pedirCampos();
ProductoCongelado miProductoCongelado = new ProductoCongelado(tmpFechaDeCaducidad,tmpNroLote);
System.out.println("Por favor ingrese la temperatura de congelación recomendada:");
miProductoCongelado.setTempCongelacionRecomendada(GestionadorEntradasTeclado.leerInt());
// MUESTRA DE PRODUCTOS CARGADOS
System.out.println("\fProductos Alimenticios cargados por el sistema");
//Muestra del Producto Fresco cargado
Exibidor.mostarRotuloProductoTipo("Fresco");
System.out.print("Fecha de caducidad: "); miProductoFresco.mostrarFechaDeCaducidad();
System.out.print("Nro.de Lote: "); miProductoFresco.mostrarNroLote();
System.out.print("Fecha de Envasado: "); miProductoFresco.mostrarFechaEnvasado();
System.out.print("País de Origen: "); miProductoFresco.mostrarPaisDeOrigen();
//Muestra del Producto Refrigerado cargado
Exibidor.mostarRotuloProductoTipo("Refrigerado");
System.out.print("Fecha de caducidad: "); miProductoRefrigerado.mostrarFechaDeCaducidad();
System.out.print("Nro.de Lote: "); miProductoRefrigerado.mostrarNroLote();
System.out.print("Código del organismo de supervisión alimentaria: "); miProductoRefrigerado.mostrarCodigoOSA();
//Muestra del Producto Congelado cargado
Exibidor.mostarRotuloProductoTipo("Congelado");
System.out.print("Fecha de caducidad: "); miProductoCongelado.mostrarFechaDeCaducidad();
System.out.print("Nro.de Lote: "); miProductoCongelado.mostrarNroLote();
System.out.print("Temperatura de congelación recomendada: "); miProductoCongelado.mostrarTempCongelacionRecomendada();
} // fin método main
/**
* Método cargarFechaCaducidadTipoProducto.
* Sirve para cargar el campo tmpFechaDeCaducidad el cual servirá como parámetro para inicilizar un producto.
*
* @param Recibe como parámetro un String con la fecha de caducidad del producto.
*/
public static void cargarFechaCaducidadTipoProducto(String valorTmpFechaDeCaducidad){
tmpFechaDeCaducidad = valorTmpFechaDeCaducidad;
}
/**
* Método cargarNroLoteTipoProducto.
* Sirve para cargar el campo tmpNroLote el cual servirá como parámetro para inicilizar un producto.
*
* @param Recibe como parámetro un int con el numero de lote del producto.
*/
public static void cargarNroLoteTipoProducto(int valorTmpNroLote){
tmpNroLote = valorTmpNroLote;
}
} // fin de la clase
Clase GestorTipoProducto
/**
* Clase GestorTipoProducto.
*
* Esta clase sirve para gestionar los parámetros necesarios para inicilizar un objeto tipo Producto.
*
* @author (RaGa)
* @version (20150408)
*/
public class GestorTipoProducto{
/**
* Método pedirCampos.
*
* Esta método sirve para pedir al Usuario ingrese por Teclado los
* parámetro que necesita el Constructor de la clase Producto.
*
*/
public static void pedirCampos(){
System.out.println("Por favor ingrese la fecha de caducidad:");
TestHerencia2.cargarFechaCaducidadTipoProducto(GestionadorEntradasTeclado.leerString());
System.out.println("Por favor ingrese el número de lote:");
TestHerencia2.cargarNroLoteTipoProducto(GestionadorEntradasTeclado.leerInt());
} //fin de método
} // fin de clase
Clase Exibidor
/**
* Clase Exibidor.
*
* Esta clase sirve mostrar datos por consola.
*
* @author (RaGa)
* @version (20150408)
*/
public class Exibidor{
/**
* Método mostrarEncabezadoProductoTipo.
*
* Esta método sirve para mostrar el encabezado al momento de la carga de los productos.
*
* @param El parámetro de entrada corresponde al tipo de producto que se cargara (Congelado, Refrigerado, o Fresco). Este parámetro tipo String es el que se mostrará por consola.
*
*/
public static void mostrarEncabezadoProductoTipo(String tipoDeProducto){
System.out.print("------------------------------------------------\n");
System.out.print("");
System.out.println("A continuación se cargará un Producto "+tipoDeProducto+"...");
System.out.println("");
} //fin de método
/**
* Método mostarRotuloProductoTipo.
*
* Esta método muestra por consola un encabezado donde se indica el tipo de Producto.
*
* @param El parámetro corresponde al tipo de producto (Congelado, Refrigerado, o Fresco).
*
*/
public static void mostarRotuloProductoTipo(String tipoDeProducto){
System.out.println("------------------------------------------------\n");
System.out.println("[ Producto "+tipoDeProducto+" ]");
System.out.println("");
} // fin de método
} // fin de clase
Clase GestionadorEntradasTeclado
import java.util.Scanner;
/**Esta clase sirve para leer los valores ingresados por el usuario a través del teclado. Cuenta con dos métodos estáticos tipo función: uno devuelve un objeto tipo String ingresado por el usuario a través del teclado, y el otro devuelve un valor tipo int ingresado por el usuario a través del teclado.
* @author: RaGa
* @date: 15/03/15
* @version: 01
*/
public class GestionadorEntradasTeclado{
//Declaracion de campos de instancia de la clase vacío.
public GestionadorEntradasTeclado(){ // Constructor de clase vacío.
}
/**Devuelve un objeto tipo String que corrsponde al valor ingresado por el usuario a través del teclado.
* @return retorna un objeto tipo String.
*/
public static String leerString(){
Scanner scannerTeclado = new Scanner (System.in);
String valorTeclado = scannerTeclado.nextLine();
return valorTeclado;
}
/**Devuelve un valor tipo int que corresponde al valor ingresado por el usuario a través del teclado.
* @return retorna un valor tipo int.
*/
public static int leerInt(){
Scanner scannerTeclado = new Scanner (System.in);
int valorTeclado = scannerTeclado.nextInt();
String valorTmp = scannerTeclado.nextLine(); // para vaciar el buffer.
return valorTeclado;
}
} // Fin de la clase