Autor Tema: Ejercicio resuelto herencia Java CU00686B - Ejemplo de extends (heredar)  (Leído 5662 veces)

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Buenas tardes, subo mi codigo para su revision. :)

Clase Producto
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class Producto {
   
    String fechaDeCaducidad, numeroDeLote, nombre;
   
    public Producto(String valorNombre) {
        fechaDeCaducidad = "";
        numeroDeLote = "";
        nombre = valorNombre;
    }
   
    public void setFechaDeCaducidad(String valorFechaDeCaducidad){
        fechaDeCaducidad = valorFechaDeCaducidad;
    }
   
    public String getFechaDeCaducidad(){
        return fechaDeCaducidad;
    }
   
    public void setNumeroDeLote(String valorNumeroDeLote){
        numeroDeLote = valorNumeroDeLote;
    }
   
    public String getNumeroDeLote() {
        return numeroDeLote;
    }
   
    public void setNombre(String valorNombre){
        nombre = valorNombre;
    }
   
    public String getNombre(){
        return nombre;
    }
}

Clase ProductoCongelado
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class ProductoCongelado extends Producto{
   
    double tempDeCongRecom;
   
    public ProductoCongelado(String nombre){
        super(nombre);
        tempDeCongRecom = 0;
    }
   
    public void setTempDeCongRecom(double valorTempDeCongRecom) {
        tempDeCongRecom = valorTempDeCongRecom;
    }
   
    public double getTempDeCongRecom(){
        return tempDeCongRecom;
    }
}

Clase ProductoFresco
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class ProductoFresco extends Producto{
   
    String fechaDeEnvasado, paisDeOrigen;
   
    public ProductoFresco(String nombre){
        super(nombre);
        fechaDeEnvasado = "";
        paisDeOrigen = "";
    }
   
    public void setFechaDeEnvasado(String valorFechaDeEnvasado){
        fechaDeEnvasado = valorFechaDeEnvasado;
    }
   
    public String getFechaDeEnvasado(){
        return fechaDeEnvasado;
    }
   
    public void setPaisDeOrigen(String valorPaisDeOrigen){
        paisDeOrigen = valorPaisDeOrigen;
    }
   
    public String getPaisDeOrigen(){
        return paisDeOrigen;
    }
}

Clase ProductoRefrigerado
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class ProductoRefrigerado extends Producto {
   
    String codiDelOrgaDeSupeAlim;
           
    public ProductoRefrigerado(String nombre){
        super(nombre);
        codiDelOrgaDeSupeAlim = "";
    }
   
    public void setCodiDelOrgaDeSupeAlim(String valorCodiDelOrgaDeSupeAlim){
        codiDelOrgaDeSupeAlim = valorCodiDelOrgaDeSupeAlim;
    }
   
    public String getCodiDelOrgaDeSupeAlim(){
        return codiDelOrgaDeSupeAlim;
    }
}

Clase Main
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ProductoFresco vegetal = new ProductoFresco("Tomate");
        ProductoRefrigerado embutido = new ProductoRefrigerado("Jamonada");
        ProductoCongelado carne = new ProductoCongelado("Carne de Res");
       
        vegetal.setFechaDeCaducidad("25-03-2015");
        vegetal.setFechaDeEnvasado("25-02-2015");
        vegetal.setNumeroDeLote("001");
        vegetal.setPaisDeOrigen("Perú");
       
        embutido.setCodiDelOrgaDeSupeAlim("Instituto Nacional de Salud");
        embutido.setFechaDeCaducidad("25-08-2015");
        embutido.setNumeroDeLote("001");
       
        carne.setFechaDeCaducidad("25-10-2015");
        carne.setNumeroDeLote("001");
        carne.setTempDeCongRecom(-10);
       
        System.out.println("El producto "+vegetal.getNombre()+
                            " tiene como fecha de caducidad el "+vegetal.getFechaDeCaducidad()+
                            ", y fecha de envasadado el "+vegetal.getFechaDeEnvasado()+
                            " con numero de lote "+vegetal.getNumeroDeLote()+
                            " y tiene como pais de origen "+vegetal.getPaisDeOrigen()+".");
        System.out.println("El producto "+embutido.getNombre()+
                            " tiene como fecha de caducidad el "+embutido.getFechaDeCaducidad()+
                            ", con numero de lote "+embutido.getNumeroDeLote()+
                            " y la institucion que supervisa es el "+embutido.getCodiDelOrgaDeSupeAlim()+".");
        System.out.println("El producto "+carne.getNombre()+
                            " tiene como fecha de caducidad el "+carne.getFechaDeCaducidad()+
                            ", con numero de lote "+carne.getNumeroDeLote()+
                            " y tiene como temperatura recomendada: "+carne.getTempDeCongRecom()+"ºC.");
    }
}
« Última modificación: 09 de Abril 2015, 10:48 por Alex Rodríguez »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Solucion Ejercicio CU00686B - Ejemplo de herencia en Java
« Respuesta #1 en: 27 de Febrero 2015, 08:58 »
Hola Juan, sobre tu ejercicio

Citar
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.
--> Las has creado correctamente

Citar
Todos los productos llevan esta información común: fecha de caducidad y número de lote.
-- > Lo has incluido en la superclase Producto, correcto

Citar
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.
-- > Correcto

Citar
Los productos refrigerados deben llevar el código del organismo de supervisión alimentaria.
  -- > Correcto

Citar
Los productos congelados deben llevar la temperatura de congelación recomendada.
-- > Correcto


Citar
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.
-- > Correcto



Citar
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.
-- > TE FALTA INCLUIR LOS MÉTODOS QUE PERMITAN MOSTRAR LA INFORMACIÓN DEL OBJETO

Citar
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.
  -- > tiene varias cosas a mejorar, debido a fallos en el código de las clases

1) La clase Producto debe tener un constructor que reciba los parámetros necesarios para un producto Tú has escrito este constructor:

Código: [Seleccionar]
    public Producto(String valorNombre) {
        fechaDeCaducidad = "";
        numeroDeLote = "";
        nombre = valorNombre;
    }

Pero debe existir un constructor que reciba tanto nombre como fecha de caducidad como numero de lote

En las subclases ocurre lo mismo:

Código: [Seleccionar]
   public ProductoFresco(String nombre){
        super(nombre);
        fechaDeEnvasado = "";
        paisDeOrigen = "";
    }

Debe existir un constructor que reciba todos los parámetros con que trabaja la clase, es decir, 5 parámetros, los tres de la superclase y los dos propios.

En las otras subclases lo mismo


2) En vez de hacer esto para inicializar

Código: [Seleccionar]
        vegetal.setFechaDeCaducidad("25-03-2015");
        vegetal.setFechaDeEnvasado("25-02-2015");
        vegetal.setNumeroDeLote("001");
        vegetal.setPaisDeOrigen("Perú");

deberías usar el constructor y hacerlo en una sola línea

3) En vez de usar esto para mostrar la información de un producto

Código: [Seleccionar]
System.out.println("El producto "+vegetal.getNombre()+
                            " tiene como fecha de caducidad el "+vegetal.getFechaDeCaducidad()+
                            ", y fecha de envasadado el "+vegetal.getFechaDeEnvasado()+
                            " con numero de lote "+vegetal.getNumeroDeLote()+
                            " y tiene como pais de origen "+vegetal.getPaisDeOrigen()+".");

Deberías llamar a un método del objeto que muestre la información del producto.

Te recomiendo revisar el código propuesto por compañeros en el foro y replantear el ejercicio para mejorarlo

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:Solucion Ejercicio CU00686B - Ejemplo de herencia en Java
« Respuesta #2 en: 27 de Febrero 2015, 18:43 »
Primero agradecerte por las anotaciones, son muy valiosas para mi y las tendre encuenta, dejo mi codigo nuevamente para su revision

Clase Main
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ProductoFresco tomateProductoFresco = new ProductoFresco("Tomate", "25-03-2015", "001", "25-02-2015", "Perú");
        tomateProductoFresco.mostrarProductoFresco();
        System.out.println("");
        ProductoRefrigerado salchichaProductoRefrigerado = new ProductoRefrigerado("Jamonada", "25-08-2015", "001", "Instituto Nacional de Salud");
        salchichaProductoRefrigerado.mostrarProductoRefrigerado();
        System.out.println("");
        ProductoCongelado carneDeResProductoCongelado = new ProductoCongelado("Carne de Res", "25-10-2015", "001", -10);
        carneDeResProductoCongelado.mostrarProductoCongelado();
    }
}

Clase Producto
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class Producto {
   
    String fechaDeCaducidad = "", numeroDeLote = "", nombre = "";
   
    public Producto(String valorNombre, String valorFechaDeCaducidad, String valorNumeroDeLote) {
        fechaDeCaducidad = valorFechaDeCaducidad;
        numeroDeLote = valorNumeroDeLote;
        nombre = valorNombre;
    }
   
    public void setFechaDeCaducidad(String valorFechaDeCaducidad){
        fechaDeCaducidad = valorFechaDeCaducidad;
    }
   
    public String getFechaDeCaducidad(){
        return fechaDeCaducidad;
    }
   
    public void setNumeroDeLote(String valorNumeroDeLote){
        numeroDeLote = valorNumeroDeLote;
    }
   
    public String getNumeroDeLote() {
        return numeroDeLote;
    }
   
    public void setNombre(String valorNombre){
        nombre = valorNombre;
    }
   
    public String getNombre(){
        return nombre;
    }

    public void mostrarProducto(){
        System.out.println("El producto "+getNombre()+" cuenta con la siguiente informacion:"+
                "\nNumero de lote: "+getNumeroDeLote()+
                "\nFecha de caducidad "+getFechaDeCaducidad());
    }
}

Clase ProductoFresco
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class ProductoFresco extends Producto{
   
    String fechaDeEnvasado, paisDeOrigen;
   
    public ProductoFresco(String valorNombre, String valorFechaDeCaducidad, String valorNumeroDeLote, String valorFechaDeEnvasado, String valorPaisDeOrigen){
        super(valorNombre, valorFechaDeCaducidad, valorNumeroDeLote);
        fechaDeEnvasado = valorFechaDeEnvasado;
        paisDeOrigen = valorPaisDeOrigen;
    }
   
    public void setFechaDeEnvasado(String valorFechaDeEnvasado){
        fechaDeEnvasado = valorFechaDeEnvasado;
    }
   
    public String getFechaDeEnvasado(){
        return fechaDeEnvasado;
    }
   
    public void setPaisDeOrigen(String valorPaisDeOrigen){
        paisDeOrigen = valorPaisDeOrigen;
    }
   
    public String getPaisDeOrigen(){
        return paisDeOrigen;
    }

    public void mostrarProductoFresco(){
        mostrarProducto();
        System.out.println("Fecha de Envasado: "+getFechaDeEnvasado()+
                "\nPais de Origen: "+getPaisDeOrigen());
    }
}

Clase ProductoRefrigerado
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class ProductoRefrigerado extends Producto {
   
    String codiDelOrgaDeSupeAlim;
           
    public ProductoRefrigerado(String valorNombre, String valorFechaDeCaducidad, String valorNumeroDeLote, String valorCodiDelOrgaDeSupeAlim){
        super(valorNombre, valorFechaDeCaducidad, valorNumeroDeLote);
        codiDelOrgaDeSupeAlim = valorCodiDelOrgaDeSupeAlim;
    }
   
    public void setCodiDelOrgaDeSupeAlim(String valorCodiDelOrgaDeSupeAlim){
        codiDelOrgaDeSupeAlim = valorCodiDelOrgaDeSupeAlim;
    }
   
    public String getCodiDelOrgaDeSupeAlim(){
        return codiDelOrgaDeSupeAlim;
    }

    public void mostrarProductoRefrigerado(){
        mostrarProducto();
        System.out.println("Organismo responsable de la Supervision Alimenticia: "+getCodiDelOrgaDeSupeAlim());
    }
}

Clase ProductoCongelado
Código: [Seleccionar]
package producto;

/**
 *
 * @author Juan Calderon
 */
public class ProductoCongelado extends Producto{
   
    double tempDeCongRecom;
   
    public ProductoCongelado(String valorNombre, String valorFechaDeCaducidad, String valorNumeroDeLote, double valorTempDeCongRecom){
        super(valorNombre,valorFechaDeCaducidad,valorNumeroDeLote);
        tempDeCongRecom = valorTempDeCongRecom;
    }
   
    public void setTempDeCongRecom(double valorTempDeCongRecom) {
        tempDeCongRecom = valorTempDeCongRecom;
    }
   
    public double getTempDeCongRecom(){
        return tempDeCongRecom;
    }

    public void mostrarProductoCongelado(){
        mostrarProducto();
        System.out.println("Temperatura de Congelamiento Recomendada: "+getTempDeCongRecom()+"ºC");
    }
}

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Solucion Ejercicio CU00686B - Ejemplo de herencia en Java
« Respuesta #3 en: 02 de Marzo 2015, 09:02 »
Hola ahora mucho mejor!!!

Un detalle, en la clase producto has escrito:

String fechaDeCaducidad = "", numeroDeLote = "", nombre = "";

Esto no debes hacerlo así. Primero debes declarar los atributos,  y luego en un constructor sin parámetros hacer esta inicialización. Recuerda que una clase puede tener más de un constructor.

Saludos!!!
Responsable de departamento de producción aprenderaprogramar.com

Wolf

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Re:Solucion Ejercicio CU00686B - Ejemplo de herencia en Java
« Respuesta #4 en: 08 de Abril 2015, 11:48 »
Hola ! Tengo una duda. ¿Por qué es crea un método setNombre(valor nombre) para inicializar la variable String nombre, si ya lo hace el constructor? Y otra cosa, ¿por qué se escriben las variables así: String fechaDeCaducidad = "", numeroDeLote = "", nombre = ""; con comillas ?No le veo el sentido. Gracias.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Solucion Ejercicio CU00686B - Ejemplo de herencia en Java
« Respuesta #5 en: 08 de Abril 2015, 14:01 »
Hola Wolf, los set se incluyen normalmente dentro de las clases (aunque no se usen). Aunque realmente no es obligatorio se suelen incluir, pero si en un caso no es necesario podrías no incluir los set.

Respecto a la inicialización es recomendable inicializar todas las variables y esto normalmente lo hacemos a 0, vacío ("") ó false. Puedes verlo comentado en muchos hilos del foro, por ejemplo www.aprenderaprogramar.com/foros/index.php?topic=1167

Saludos!!
Responsable de departamento de producción aprenderaprogramar.com

Wolf

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 13
    • Ver Perfil
Re:Solucion Ejercicio CU00686B - Ejemplo de herencia en Java
« Respuesta #6 en: 08 de Abril 2015, 18:06 »
Ok. Muchísimas gracias por contestar tan pronto. Un saludo !

 

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