Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: fedegaray en 26 de Abril 2015, 06:08
-
Hola otra vez. Veamos como me salió este ejercicio. Son un montón de clases, ya que además de las que pide el ejercicio, decidí crear una clase ProductoRefCon, que agrupa atributos de las clases ProductoRefrigerado y ProductoCongelado, y de esa manera evitar la repetición de código.
En este ejemplo no he inicializado las variables con valores por defecto, sino con valores específicos, para ver si la clase Test muestra correctamente los datos del producto.
Aquí vamos:
Clase Producto
public class Producto {
private String fechaCaducidad;
private int numeroLote;
private String fechaEnvio;
private String paisOrigen;
public Producto () {
fechaCaducidad = "14/02/2018";
numeroLote = 52525542;
fechaEnvio = "25/01/2015";
paisOrigen = "Perú";
}
public Producto (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvio, String valorPaisOrigen) {
fechaCaducidad = valorFechaCaducidad;
numeroLote = valorNumeroLote;
fechaEnvio = valorFechaEnvio;
paisOrigen = valorPaisOrigen;
}
public void setFechaCaducidad (String valorFechaCaducidad){
fechaCaducidad = valorFechaCaducidad;
}
public void setNumeroLote (int valorNumeroLote) {
numeroLote = valorNumeroLote;
}
public void setFechaEnvio (String valorFechaEnvio) {
fechaEnvio = valorFechaEnvio;
}
public void setPaisOrigen (String valorPaisOrigen) {
paisOrigen = valorPaisOrigen;
}
public String getFechaCaducidad () {
return fechaCaducidad;
}
public int getNumeroLote () {
return numeroLote;
}
public String getFechaEnvio () {
return fechaEnvio;
}
public String getPaisOrigen () {
return paisOrigen;
}
public void dameDatos () {
System.out.println ("Fecha de caducidad: " + getFechaCaducidad());
System.out.println ("Número de lote: " + getNumeroLote());
System.out.println ("Fecha de envío: " + getFechaEnvio());
System.out.println ("País de origen: " + getPaisOrigen ());
}
}
Clase ProductoFresco
public class ProductoFresco extends Producto {
public ProductoFresco () {
super ();
}
public ProductoFresco (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen) {
super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen);
}
public void dameDatos() {
super.dameDatos();
}
}
Clase ProRefCon
public class ProRefCon extends Producto {
private int tempMantRec;
public ProRefCon () {
super ();
tempMantRec = 11;
}
public ProRefCon (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec) {
super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen);
tempMantRec = valorTempMantRec;
}
public void setTempMantRec (int valorTempMantRec) {
tempMantRec = valorTempMantRec;
}
public int getTempMantRec () {
return tempMantRec;
}
public void dameDatos() {
super.dameDatos();
System.out.println ("Temperatura de mantenimiento recomendada: " + getTempMantRec() + " grados");
}
}
Clase ProductoRefrigerado
public class ProductoRefrigerado extends ProRefCon {
private String codigoSupervAlim;
public ProductoRefrigerado () {
super ();
codigoSupervAlim = "75jhyn";
}
public ProductoRefrigerado (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, String valorCodigoSupervAlim) {
super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
codigoSupervAlim = valorCodigoSupervAlim;
}
public void getCodigoSupervAlim (String valorCodigoSupervAlim) {
codigoSupervAlim = valorCodigoSupervAlim;
}
public String getCodigoSupervAlim () {
return codigoSupervAlim;
}
public void dameDatos() {
super.dameDatos();
System.out.println ("Código del organismo de supervición alimentaria: " + getCodigoSupervAlim());
}
}
Clase ProductoCongelado
public class ProductoCongelado extends ProRefCon {
public ProductoCongelado () {
super ();
}
public ProductoCongelado (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec) {
super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
}
public void dameDatos() {
super.dameDatos();
}
}
Clase ProductoCongeladoAire
public class ProductoCongeladoAire extends ProductoCongelado {
private double porcentajeNitrogeno;
private double porcentajeOxigeno;
private double porcentajeDioxidoDeCarbono;
private double porcentajeVaporDeAgua;
public ProductoCongeladoAire () {
super ();
porcentajeNitrogeno = 25.5;
porcentajeOxigeno = 10.4;
porcentajeDioxidoDeCarbono = 55;
porcentajeVaporDeAgua = 10;
}
public ProductoCongeladoAire (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, double valorPorcentajeNitrogeno, double valorPorcentajeOxigeno, double valorPorcentajeDioxidoDeCarbono, double valorPorcentajeVaporDeAgua) {
super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
porcentajeNitrogeno = valorPorcentajeNitrogeno;
porcentajeOxigeno = valorPorcentajeOxigeno;
porcentajeDioxidoDeCarbono = valorPorcentajeDioxidoDeCarbono;
porcentajeVaporDeAgua = valorPorcentajeVaporDeAgua;
}
public void setPorcentajeNitrogeno (double valorPorcentajeNitrogeno) {
porcentajeNitrogeno = valorPorcentajeNitrogeno;
}
public void setPorcentajeOxigeno (double valorPorcentajeOxigeno) {
porcentajeOxigeno = valorPorcentajeOxigeno;
}
public void setPorcentajeDioxidoDeCarbono (double valorPorcentajeDioxidoDeCarbono) {
porcentajeDioxidoDeCarbono = valorPorcentajeDioxidoDeCarbono;
}
public void setPorcentajeVaporDeAgua (double valorPorcentajeVaporDeAgua) {
porcentajeVaporDeAgua = valorPorcentajeVaporDeAgua;
}
public double getPorcentajeNitrogeno () {
return porcentajeNitrogeno;
}
public double getPorcentajeOxigeno () {
return porcentajeOxigeno;
}
public double getPorcentajeDioxidoDeCarbono () {
return porcentajeDioxidoDeCarbono;
}
public double getPorcentajeVaporDeAgua () {
return porcentajeVaporDeAgua;
}
public void dameDatos () {
super.dameDatos ();
System.out.println ("Composición del aire con que fue congelado:");
System.out.println ("Nitrógeno: " + getPorcentajeNitrogeno() + "%");
System.out.println ("Oxígeno: " + getPorcentajeOxigeno() + "%");
System.out.println ("Dióxido de carbono: " + getPorcentajeDioxidoDeCarbono() + "%");
System.out.println ("Vapor de agua: " + getPorcentajeVaporDeAgua() + "%");
}
}
Clase ProductoCongeladoAgua
public class ProductoCongeladoAgua extends ProductoCongelado {
private int salPorLitro;
public ProductoCongeladoAgua () {
super ();
salPorLitro = 32;
}
public ProductoCongeladoAgua (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, double valorPorcentajeNitrogeno, double valorPorcentajeOxigeno, double valorPorcentajeDioxidoDeCarbono, double valorPorcentajeVaporDeAgua, int valorSalPorLitro) {
super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
salPorLitro = valorSalPorLitro;
}
public void setSalPorLitro (int valorSalPorLitro) {
salPorLitro = valorSalPorLitro;
}
public int getSalPorLitro () {
return salPorLitro;
}
public void dameDatos () {
super.dameDatos ();
System.out.println ("Salinidad: " + getSalPorLitro() + " grs. por litro de agua");
}
}
Clase ProductoCongeladoNitrogeno
public class ProductoCongeladoNitrogeno extends ProductoCongelado {
private String metodo;
private int tiempoExposicion;
public ProductoCongeladoNitrogeno () {
super ();
metodo = "Frio seco";
tiempoExposicion = 775;
}
public ProductoCongeladoNitrogeno (String valorFechaCaducidad, int valorNumeroLote, String valorFechaEnvasado, String valorPaisOrigen, int valorTempMantRec, double valorPorcentajeNitrogeno, double valorPorcentajeOxigeno, double valorPorcentajeDioxidoDeCarbono, double valorPorcentajeVaporDeAgua, String valorMetodo, int valorTiempoExposicion) {
super (valorFechaCaducidad, valorNumeroLote, valorFechaEnvasado, valorPaisOrigen, valorTempMantRec);
metodo = valorMetodo;
tiempoExposicion = valorTiempoExposicion;
}
public void setMetodo (String valorMetodo) {
metodo = valorMetodo;
}
public void setTiempoExposicion (int valorTiempoExposicion) {
tiempoExposicion = valorTiempoExposicion;
}
public String getMetodo () {
return metodo;
}
public int getTiempoExposicion () {
return tiempoExposicion;
}
public void dameDatos () {
super.dameDatos ();
System.out.println ("Método de congelación empleado: " + getMetodo());
System.out.println ("Tiempo de exposición al nitrógeno: " + getTiempoExposicion() + " segundos");
}
}
Clase TestProducto
public class TestProducto {
public static void main (String [] args) {
ProductoFresco proFres1 = new ProductoFresco ();
ProductoFresco profres2 = new ProductoFresco ();
ProductoRefrigerado proRef1 = new ProductoRefrigerado ();
ProductoRefrigerado proRef2 = new ProductoRefrigerado ();
ProductoRefrigerado proRef3 = new ProductoRefrigerado ();
ProductoCongeladoAire proConAi1 = new ProductoCongeladoAire ();
ProductoCongeladoAire proConAi2 = new ProductoCongeladoAire ();
ProductoCongeladoAgua proConAg1 = new ProductoCongeladoAgua ();
ProductoCongeladoAgua proConAg2 = new ProductoCongeladoAgua ();
ProductoCongeladoNitrogeno proConNit1 = new ProductoCongeladoNitrogeno ();
System.out.println ("\f");
System.out.println ("PRODUCTO FRESCO 1");
proFres1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO FRESCO 2");
profres2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO REFRIGERADO 1");
proRef1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO REFRIGERADO 2");
proRef2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO REFRIGERADO 3");
proRef3.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AIRE 1");
proConAi1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AIRE 2");
proConAi2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AGUA 1");
proConAg1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AGUA 2");
proConAg2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON NITRÓGENO 1");
proConNit1.dameDatos();
}
}
Cuánto código! Esto se está poniendo divertido!!!
-
Hola crear clases como ProductoRefCon es adecuado cuando vemos que ciertas clases comparten algunas cosas en común. Creando una superclase lo que hacemos es agrupar esas cosas para evitar la repetición de código (algo que debemos buscar). ProductoRefCon puede que no coincida con algo del mundo real, es lo que llamamos una abstracción en programación, que en este caso la usamos para evitar repetición de código.
Esto no debes hacerlo:
public Producto () {
fechaCaducidad = "14/02/2018";
numeroLote = 52525542;
fechaEnvio = "25/01/2015";
paisOrigen = "Perú";
}
Eso va contra la filosofía general que se trabaja en el curso (y en general contra la programación orientada a objetos).
Por el contrario, lo que se debe hacer para las pruebas es usar el constructor y pasarle esos parámetros
ProductoFresco proFres1 = new ProductoFresco ("14/02/2018", 52525542, "25/01/2015", "Perú");
De esta manera creas una instancia con esos datos concretos, de la otra manera todas las instancias llevarían esos datos, no sería lógico que todos los productos tuvieran la misma fecha de caducidad.
Ese es el único error grave que has cometido en este ejercicio.
Por otro lado sería recomendable que en vez de hacer esto:
System.out.println ("\f");
System.out.println ("PRODUCTO FRESCO 1");
proFres1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO FRESCO 2");
profres2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO REFRIGERADO 1");
proRef1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO REFRIGERADO 2");
proRef2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO REFRIGERADO 3");
proRef3.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AIRE 1");
proConAi1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AIRE 2");
proConAi2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AGUA 1");
proConAg1.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON AGUA 2");
proConAg2.dameDatos();
System.out.println ("");
System.out.println ("PRODUCTO CONGELADO CON NITRÓGENO 1");
proConNit1.dameDatos();
En vez de eso crea una colección, añade los productos y luego recorre la colección con un bucle invocando el método dameDatos(). La idea es obtener el mismo resultado pero de una forma más elegante o correcta.
Saludos!
-
Muchas gracias. Aguardaba ansioso una devolución de este ejercicio. No quería terminar el siguiente (que está muy relacionado a este) sin antes recibir alguna observación. Me ha servido mucho tu aporte. Gracias de nuevo!