Autor Tema: Java básico cómo relacionar clases entre sí uso de extends y super CU00687B  (Leído 2170 veces)

Manuel Molina

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Buenas tardes a todos, y agradecer de antemano vuestra ayuda. he realizado el ejercicio con código CU00687B del curso pdf de programación java de aprenderaprogramar.

Producto:

Código: [Seleccionar]
public class Producto {

private String nombre;
private String fechaCaducidad;
private String numeroLote;

public Producto(String nombre, String fechaCaducidad, String numeroLote) {

this.nombre = nombre;
this.fechaCaducidad = fechaCaducidad;
this.numeroLote = numeroLote;
}

public String getNombre() {

return nombre;
}

public String getFechaCaducidad() {

return fechaCaducidad;
}

public String getNumeroLote() {

return numeroLote;

}

public void setNombre(String nombre) {

this.nombre = nombre;
}

public void setFechaCaducidad(String fechaCaducidad) {

this.fechaCaducidad = fechaCaducidad;
}

public void setNumeroLote(String numeroLote) {

this.numeroLote = numeroLote;
}

public void imprimirProducto() {

System.out.println("El nombre del producto es: " + nombre + " , la fecha de caducidad: " + fechaCaducidad + " y numero de lote: " + numeroLote);
}

}

Producto Fresco:

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

private String fechaEnvasado;
private String pais;

public ProductoFresco(String nombre, String fechaCaducidad, String numeroSerie, String fechaEnvasado, String pais) {

super(nombre, fechaCaducidad, numeroSerie);

this.fechaEnvasado = fechaEnvasado;
this.pais = pais;

}

public String getFechaEnvasado() {
return fechaEnvasado;
}

public String getPais() {
return pais;
}

public void setFechaEnvasado(String fechaEnvasado) {

this.fechaEnvasado = fechaEnvasado;
}

public void setPais(String pais) {

this.pais = pais;
}

public void imprimirProductoFresco() {
imprimirProducto();

System.out.println("La fecha de envasado es: " + getFechaEnvasado() + " el pais de origen: " + getPais());
}

}

Producto Referencia Frío:

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

private String fechaEnvasado;
private String paisOrigen;

public ProductoReferenciaFrio(String nombre, String fechaCaducidad, String numeroLote, String fechaEnvasado,
String paisOrigen) {

super(nombre, fechaCaducidad, numeroLote);

this.fechaEnvasado = fechaEnvasado;

this.paisOrigen = paisOrigen;

}

public String getFechaEnvasado() {
return fechaEnvasado;
}

public String getPaisOrigen() {
return paisOrigen;
}

public void setFechaEnvasado(String fechaEnvasado) {
this.fechaEnvasado = fechaEnvasado;
}


public void setPaisOrigen(String paisOrigen) {
this.paisOrigen = paisOrigen;
}

public void imprimirProductoReferenciaCongelado() {

System.out.println("La fecha de envasado " +  " ,pais de origen " + getPaisOrigen());
}



}

Producto Refrigerado:

Código: [Seleccionar]
public class ProductoRefrigerado extends ProductoReferenciaFrio {

private String codigoOrganismo;
private String temperaturaMantenimiento;

public ProductoRefrigerado(String nombre, String fechaCaducidad, String numeroLote, String fechaEnvasado,
String paisOrigen, String codigoOrganismo, String temperaturaMantenimiento) {

super(nombre, fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen);

this.codigoOrganismo = codigoOrganismo;
this.temperaturaMantenimiento = temperaturaMantenimiento;

}

public String getCodigoOrganismo() {
return codigoOrganismo;
}
public String getTemperaturaEnvasado() {
return temperaturaMantenimiento;
}

public void setCodigoOrganismo(String codigoOrganismo) {

this.codigoOrganismo = codigoOrganismo;
}

public void setTemperaturaMantenimiento(String temperaturaMantenimiento) {
this.temperaturaMantenimiento = temperaturaMantenimiento;
}

public void imprimirProductoRefrigerado() {
imprimirProducto();
System.out.println("El código del organismo es: " + getCodigoOrganismo() + " , la temperatura mantenimiento: " + getTemperaturaEnvasado() );
}

}

Producto congelado:

Código: [Seleccionar]
public class ProductoCongelado extends ProductoReferenciaFrio {

private int temperaturaRequerida;

public ProductoCongelado(String nombre, String fechaCaducidad, String numeroLote, String fechaEnvasado,
String paisOrigen, int temperaturaRequerida) {

super(nombre, fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen);

this.temperaturaRequerida = temperaturaRequerida;

}

public int getTemperaturaRequerida() {
return temperaturaRequerida;
}

public void setTemperaturaRequerida(int temperaturaRequeridad) {

this.temperaturaRequerida = temperaturaRequerida;
}

public void imprimirProductoCongelado() {

System.out.println("La temperatura requerida de congenlación es " + getTemperaturaRequerida());
}


}

Producto Congelado Agua:

Código: [Seleccionar]
public class ProductoCongeladoAgua extends ProductoCongelado {

private int salinidadAgua;

public ProductoCongeladoAgua(String nombre, String fechaCaducidad, String numeroLote, String fechaEnvasado,
String paisOrigen, int temperaturaRequerida, int salinidadAgua ) {

super(nombre, fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperaturaRequerida);

this.salinidadAgua = salinidadAgua;

}

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

public void imprimirProductoCongeladoAgua() {

System.out.println("Salinidad del agua: " + getSalinidadAgua() + " gramos de sal por litro de agua.");
}

}

Producto congelado aire:

Código: [Seleccionar]
public class ProductoCongeladoAire extends ProductoCongelado {

private int nitrogeno;
private int oxigeno;
private int dioxiCarbono;
private int vaporAgua;

public ProductoCongeladoAire(String nombre, String fechaCaducidad, String numeroLote, String fechaEnvasado,
String paisOrigen, int temperaturaRequerida, int nitrogeno, int oxigeno, int dioxiCarbono, int vaporAgua) {

super(nombre, fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperaturaRequerida);

this.nitrogeno = nitrogeno;
this.oxigeno = oxigeno;
this.dioxiCarbono = dioxiCarbono;
this.vaporAgua = vaporAgua;

}

public int getNitrogeno() {return nitrogeno;}
public int getOxigeno() {return oxigeno;}
public int getDioxiCarbono() {return dioxiCarbono;}
public int getVaporAgua() {return vaporAgua;}

public void setNitrogeno(int nitrogeno) {this.nitrogeno = nitrogeno;}
public void setOxigeno(int oxigeno) {this.oxigeno = oxigeno;}
public void setDioxiCarbono(int dioxiCarbono) {this.dioxiCarbono = dioxiCarbono;}
public void setVaporAgua(int vaporAgua) {this.vaporAgua = vaporAgua;}

public void imprimirCongeladoAire() {
imprimirProducto();
System.out.println("La composición de aire en porcetaje de nitrógeno es  " + getNitrogeno() + ", oxigeno " + getOxigeno() +
" , dioxido de cabono " + getDioxiCarbono() + " , vapor agua " + getVaporAgua());
}


}

Producto congelado Nitrogeno:

Código: [Seleccionar]
public class ProductoCongeladoNitrogeno extends ProductoCongelado {

private String metodoCongelacion;
private int tiempoExposicion;

public ProductoCongeladoNitrogeno(String nombre, String fechaCaducidad, String numeroLote, String fechaEnvasado,
String paisOrigen, int temperaturaRequerida, String metodoCongelacion, int tiempoExposicion) {

super(nombre, fechaCaducidad, numeroLote, fechaEnvasado, paisOrigen, temperaturaRequerida);

this.metodoCongelacion = metodoCongelacion;
this.tiempoExposicion = tiempoExposicion;

}

public String getMetodoCongelacion() {return metodoCongelacion;}
public void setMetodoCongelacion(String metodoCongelacion) {this.metodoCongelacion = metodoCongelacion;}
public int getTiempoExposicion() {return tiempoExposicion;}
public void setTiempoExposicion(int tiempoExposicion) { this.tiempoExposicion = tiempoExposicion;}


public void imprimirCongeladoNitrogeno() {
imprimirProducto();
System.out.println("Metodo de congelación: " + getMetodoCongelacion() + ", tiempo de exposición en segundos: " + getTiempoExposicion() );
}

}

TestHerencia3:

Código: [Seleccionar]
public class TestHerencia3 {

public static void main(String[] args) {

ProductoFresco fresco1 = new ProductoFresco("Manzanas", "12,05,2018", "A150",  "05,05,2018", "España");
ProductoFresco fresco2 = new ProductoFresco("Cerezas", "12,05,2018", "A151", "05,05,2018", "España");

ProductoRefrigerado refrigerado1 = new ProductoRefrigerado("Yogurt","20,05,2018", "A152", "20,04,2018", "España", "52010", "10" );
ProductoRefrigerado refrigerado2 = new ProductoRefrigerado("Nata", "30,05,2018", "A153", "20,04,2018", "España", "52011" , "5");
ProductoRefrigerado refrigerado3 = new ProductoRefrigerado("Flan", "20,05,2018", "A153", "20,04,2018", "España", "52012", "10");

ProductoCongeladoAgua congeladoAgua1 = new ProductoCongeladoAgua("Guisantes",  "10,10,2018",  "A153", "20,04,2018", "España", -5, 20);
ProductoCongeladoAgua congeladoAgua2 = new ProductoCongeladoAgua("Judias", "10,10,2018", "A154", "20,04,2018", "España", -5, 20);

ProductoCongeladoAire congeladoAire1 = new ProductoCongeladoAire( "Ternera", "12,12,2018", "A155", "20,04,2018",
"España", -20, 10, 20, 10, 60);
ProductoCongeladoAire congeladoAire2 = new ProductoCongeladoAire("Cerdo", "12,12,2018", "A156", "20,04,2018", "España", -20, 10, 20, 10,  60);

ProductoCongeladoNitrogeno congeladoNitrogeno = new ProductoCongeladoNitrogeno("Pescado", "12,04,2018", "A157", "01,01,2017",
"Noruega", -20, "Nitrogeno", 10);

System.out.println("PRODUCTO FRESCO");

fresco1.imprimirProductoFresco();
fresco2.imprimirProductoFresco();

System.out.println();
System.out.println("PRODUCTO REFRIGERADO");

refrigerado1.imprimirProductoReferenciaCongelado();
refrigerado1.imprimirProductoRefrigerado();

refrigerado2.imprimirProductoReferenciaCongelado();
refrigerado2.imprimirProductoRefrigerado();

refrigerado3.imprimirProductoReferenciaCongelado();
refrigerado3.imprimirProductoRefrigerado();

System.out.println();
System.out.println("PRODUCTO CONGELADO POR AGUA");

congeladoAgua1.imprimirProductoCongeladoAgua();
congeladoAgua2.imprimirProductoCongeladoAgua();

System.out.println();
System.out.println("PRODUCTO CONGELADO POR AIRE");

congeladoAire1.imprimirCongeladoAire();
congeladoAire2.imprimirCongeladoAire();

System.out.println();
System.out.println("PRODUCTO CONGELADO POR NITROGENO");
congeladoNitrogeno.imprimirCongeladoNitrogeno();



}

}


« Última modificación: 07 de Julio 2018, 19:55 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola por un lado felicitarte por haber desarrollado este código. Por otro lado te comento las cosas que veo mejorables.

- Con la herencia se pretende reutilizar código de las superclases en las subclases. Por ejemplo, si en la superclase Producto se usa el método imprimirProducto() en la clase ProductoFresco reutilizamos ese código para evitar repetirlo. Esto lo has hecho correctamente en

Código: [Seleccionar]
public void imprimirProductoFresco() {
imprimirProducto();
System.out.println("La fecha de envasado es: " + getFechaEnvasado() + " el pais de origen: " + getPais());
}

De esta forma logras reutilizar el código de la superclase en la subclase. (Nota: más adelante en el curso se explica el método toString pero ahora no nos vamos a meter con eso).

Sin embargo en la clase ProductoReferenciaFrio no haces esta reutilización de código. Luego introduces imprimirProducto() en la clase ProductoRefrigerado, pero no en la clase ProductoCongelado, ni en ProductoCongeladoPorAgua, etc. No acabo de entender el por qué.

Luego utilizas en el main

refrigerado3.imprimirProductoReferenciaCongelado();
refrigerado3.imprimirProductoRefrigerado();

Resulta confuso... si refrigerado3 es un producto refrigerado ¿Por qué invocas el método refrigerado3.imprimirProductoReferenciaCongelado(); si no es un producto congelado? Ese método lo tienes dentro de la clase ProductoReferenciaFrio pero eso no es correcto: crea confusión. Si el producto no es congelado, no debe tener un método que se llame imprimirProductoReferenciaCongelado

La idea debería ser:

a) Introducir el código a reutilizar en la clase más elevada en la jerarquía posible. En este caso deberías reutilizar imprimirProducto() en la clase ProductoReferenciaFrio

b) En cada subclase ir llamando al método de la superclase que sea necesario, más las instrucciones específicas de esa subclase.

c) Evitar tener que hacer dobles invocaciones para una tarea que puede solucionarse con un solo método: para eso está la herencia.

En resumen, las correcciones a hacer en este ejercicio serían:

- Corregir los nombres de métodos para evitar incoherencias (por ejemplo que se pueda invocar imprimirProductoReferenciaCongelado sobre un producto que no es un congelado, esto no tiene lógica). Es importante que los nombres de clases y métodos sean coherentes y no induzcan a confusión.

- Estructurar bien la reutilización de código desde las superclases hasta las subclases de modo que solo sea necesario llamar a un método para mostrar la información de un producto por ejemplo


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