Autor Tema: Ejemplo de cómo la herencia Java favorece la reutilización de código CU00686B  (Leído 3500 veces)

manu37

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 32
    • Ver Perfil
Buenos días compañeros,

El enunciado del curso "aprendiendo programación desde cero" CU00686B  Ejemplo de Herencia dice así:

Se plantea desarrollar un programa Java que permita la gestión de una empresa agroalimentaria que trabaja con tres tipos de productos: productos frescos, productos refrigerados y productos congelados.

Todos los productos llevan esta información común: fecha de caducidad y número de lote. A su vez, cada tipo de producto lleva alguna información específica.

-Los productos frescos deben llevar la fecha de envasado y el país de origen.
-Los productos refrigerados deben llevar el código del organismo de supervisión alimentaria.
-Los productos congelados deben llevar la temperatura de congelación recomendada.

Crear el código de las clases Java implementando una relación de herencia desde la
superclase Producto hasta las subclases ProductoFresco, ProductoRefrigerado y ProductoCongelado.

Cada clase debe disponer de constructor y permitir establecer (set) y recuperar (get) el valor de sus atributos y tener un método que permita mostrar la información del objeto.

Crear una clase testHerencia2 con el método main donde se cree un objeto de cada tipo y se muestren los datos de cada uno de los objetos creados.

Código: [Seleccionar]
Archivo Productos
Código: [Seleccionar]
package Herencia;

public class Productos {

//Variables

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

//CONSTRUCTOR

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

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

}

//Método setter de las 3 variables

public void setNombre(String nombre) {

this.nombre = nombre;
}

public void setNumeroLote(String numeroLote) {

this.numeroLote = numeroLote;
}

public void setFechaCaducidad(String fechaCaducidad) {

this.fechaCaducidad = fechaCaducidad;
}

//Método Getter de las 3 variables

public String getNombre() {return nombre;}
public String getNumeroLote() {return numeroLote;}
public String getFechaCaducidad() {return fechaCaducidad;}

}

ProductoFresco

Código: [Seleccionar]
package Herencia;

public class ProductoFresco extends Productos {

//Variable

private String fechaEnvasado;
private String paisOrigen;

//CONSTRUCTOR

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

super(nombre, fechaCaducidad, numeroLote);
this.fechaEnvasado = fechaEnvasado;
this.paisOrigen = paisOrigen;

}

//Métodos Setter

public void setFechaEnvasado(String fechaEnvasado) {

this.fechaEnvasado = fechaEnvasado;
}

public void setPaisOrigen(String paisOrigen) {

this.paisOrigen = paisOrigen;
}

//Métodos Getter

public String getFechaEnvasado() {return fechaEnvasado;}
public String getPaisOrigen() {return paisOrigen;}

//Imprimir resultados

public void imprimirProductoFresco() {

System.out.println("El nombre del producto es: " + getNombre() + " con numero de lote " + getNumeroLote() + " fecha de caducidad " + getFechaCaducidad() + " y fecha de envasado " + getFechaEnvasado() + " con pais de origen " + getPaisOrigen());
}

}

ProductoRefrigerado

Código: [Seleccionar]
package Herencia;

public class ProductoRefrigerado extends Productos {

//variable

private String codigoSupervision;

//CONSTRUCTOR CON PARÁMETROS

public ProductoRefrigerado(String nombre, String fechaCaducidad, String numeroLote, String codigoSupervision) {

super(nombre, fechaCaducidad, numeroLote);

this.codigoSupervision = codigoSupervision;

}

//Método Setter

public void setCodigoSupervision(String codigoSupervision) {

this.codigoSupervision = codigoSupervision;
}

//Métod Getter

public String getCodigoSupervision() {return codigoSupervision;}

//Imprimir resultado

public void ImprimirProductoRefrigerado() {

System.out.println("El nombre del producto es: " + getNombre() + " con numero de lote " + getNumeroLote() + " fecha de caducidad " + getFechaCaducidad() + " con código de Supervisión " + getCodigoSupervision());
}


}

ProductoCongelado

Código: [Seleccionar]
package Herencia;

public class ProductoCongelado extends Productos {

// Variable

private String temperaturaCongelacion;

//CONSTRUCTOR

public ProductoCongelado(String nombre, String fechaCaducidad, String numeroLote, String temperaturaCongelacion) {

super(nombre, fechaCaducidad, numeroLote);

this.temperaturaCongelacion = temperaturaCongelacion;
}

//Método Setter

public void setTemperaturaCongelacion(String temperaturaCongelacion) {

this.temperaturaCongelacion = temperaturaCongelacion;
}

//Método Getter

public String getTemperaturaCongelacion() {return temperaturaCongelacion;}

//Imprimir resultados

public void ImprimirProductoCongelacion() {

System.out.println("El nombre del producto es: " + getNombre() + " con numero de lote " + getNumeroLote() + " fecha de caducidad " + getFechaCaducidad() + " con temperatura de congelación " + getTemperaturaCongelacion());
}

}

testHerencia2

Código: [Seleccionar]
package Herencia;

public class testHerencia2 {

public static void main(String[] args) {

ProductoFresco productoFresco = new ProductoFresco(" Pescado ", " 1650 " , " 30/12/2017 ", " 20/08/2017 " , " España ");
ProductoRefrigerado productoRefrigerado = new ProductoRefrigerado(" Pollo " , " 1651 " , " 20/11/2017 " , " A1654 ");
ProductoCongelado productoCongelado = new ProductoCongelado(" Atun " , " 1652 " , " 20/02/2020 " , "-15º");

productoFresco.imprimirProductoFresco();
productoRefrigerado.ImprimirProductoRefrigerado();
productoCongelado.ImprimirProductoCongelacion();

}

}

« Última modificación: 03 de Febrero 2018, 19:17 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, el nombre correcto de la clase Productos sería Producto sin la ese. Puedes ver comentarios sobre cómo nombrar clases Java en https://www.aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

Hay algo que debería mejorarse: nos dicen que "Todos los productos llevan esta información común: fecha de caducidad y número de lote..."

Esto debe dar pie a una cosa: en la superclase Producto deberíamos tener un método para mostrar información, método que en la clase Producto incluirá los elementos comunes y en las subclases irá introduciendo progresivamente los nuevos campos propios de cada clase. La idea es reutilizar código, desde las superclases hasta las subclases, evitando la repetición de código. Puedes ver la idea de lo que comento con el método public void verInfoProducto() en https://www.aprenderaprogramar.com/foros/index.php?topic=1179.0

La herencia trata de evitar la repetición y así no tendríamos un método public void imprimirProductoFresco(), otro public void ImprimirProductoRefrigerado() etc. sino un único método que reutiliza el código de las superclases en las subclases.

Esto por lo menos son conceptos que ya deben irse trabajando en esta entrega del curso.

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