Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: manu37 en 01 de Diciembre 2017, 11:17
-
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.
Archivo Productos
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
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
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
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
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();
}
}
-
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.