Autor Tema: Ejercicio herencia en Java. extends y super. Constructores con herencia CU00686B  (Leído 4231 veces)

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
Hola a todos !!! Paso a dejar el código para el ejercicio propuesto CU00686B del tutorial de programación Java como si estuviera en primero. Desde ya muchas gracias.  Saludos
Luis

EJERCICIO

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.

Clase principal - metodo main

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
public class TestHerencia2 {
    public static void main (String [ ] args) {
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        System.out.println("Por favor introduzca el nombre del producto:");
        entrada.pedirEntrada();
        String nomProd = entrada.getEntrada();       
        System.out.println("Ingrese el nro de lote :");
        entrada.pedirEntrada();
        int lote = Integer.parseInt(entrada.getEntrada());
        System.out.println("Ingrese el dia de caducidad :");
        entrada.pedirEntrada();
        int diaVenc = Integer.parseInt(entrada.getEntrada());
        System.out.println("Ingrese el mes de caducidad :");
        entrada.pedirEntrada();
        int mesVenc = Integer.parseInt(entrada.getEntrada());
        System.out.println("Ingrese el año de caducidad :");
        entrada.pedirEntrada();
        int anioVenc = Integer.parseInt(entrada.getEntrada());
        System.out.println("Por favor introduzca el tipo de producto (1=Fresco 2=Refrigerado 3=Congelado):");
        int opcion=0;
        entrada.pedirEntrada();
        opcion = Integer.parseInt(entrada.getEntrada());
        switch (opcion) {
            case 1: // producto fresco
            System.out.println("Por favor introduzca el pais de origen:");
            entrada.pedirEntrada();
            String paisOrigen = entrada.getEntrada();
            System.out.println("Ingrese el dia de envasado :");
            entrada.pedirEntrada();
            int diaEnv = Integer.parseInt(entrada.getEntrada());
            System.out.println("Ingrese el mes de envasado :");
            entrada.pedirEntrada();
            int mesEnv = Integer.parseInt(entrada.getEntrada());
            System.out.println("Ingrese el año de envasado :");
            entrada.pedirEntrada();
            int anioEnv = Integer.parseInt(entrada.getEntrada());
            ProductosFrescos prodFres = new ProductosFrescos(nomProd, lote, diaVenc, mesVenc, anioVenc, paisOrigen, diaEnv, mesEnv, anioEnv);           
            System.out.println("El producto fresco es :"+prodFres.getNombreProducto());
            System.out.println("El nro de lote es :"+prodFres.getNroLote());
            System.out.println("La fecha de caducidad es :"+prodFres.getFechaCaducidad());
            System.out.println("El pais de origen es :"+prodFres.getPaisOrigen());
            System.out.println("la fecha de envasado es :"+prodFres.getFechaEnvasado());
            break;
            case 2: // producto refrigerado
            System.out.println("Por favor introduzca el organismo de control");
            entrada.pedirEntrada();
            String xODC = entrada.getEntrada();
            ProductosRefrigerados prodRefr = new ProductosRefrigerados(nomProd, lote, diaVenc, mesVenc, anioVenc, xODC);           
            System.out.println("El producto refrigerado es :"+prodRefr.getNombreProducto());
            System.out.println("El nro de lote es :"+prodRefr.getNroLote());
            System.out.println("La fecha de caducidad es :"+prodRefr.getFechaCaducidad());
            System.out.println("El organismo de control es :"+prodRefr.getOrganismoControl());
            break;
            case 3: // producto congelado
            System.out.println("Ingrese temperatura de congelado :");
            entrada.pedirEntrada();
            double xTempCongelado = Double.parseDouble(entrada.getEntrada());
            ProductosCongelados prodCong = new ProductosCongelados(nomProd, lote, diaVenc, mesVenc, anioVenc, xTempCongelado);           
            System.out.println("El producto congelado es :"+prodCong.getNombreProducto());
            System.out.println("El nro de lote es :"+prodCong.getNroLote());
            System.out.println("La fecha de caducidad es :"+prodCong.getFechaCaducidad());
            System.out.println("El temperatura de congelado es :"+prodCong.getTemperaturaCongelado());
            break;
            default:break;
        }
    }
} //Cierre de la clase


Clase Productos donde se heredan los distintos tipos (frescos, refrigerados y congelados)

Código: [Seleccionar]
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * Write a description of class Productos here.
 *
 * @author Luis
 * @version CU00686B
 */
public class Productos
{
    // instance variables - replace the example below with your own
    private String nombreProducto;
    private int nroLote;
    Calendar fechaCaducidad = new GregorianCalendar();
    /**
     * Constructor for objects of class Productos
     */
    public Productos()
    {
        // initialise instance variables
        nombreProducto = "";
        nroLote = 0;
        fechaCaducidad.getInstance();
    }
   
    public Productos(String nomProd, int lote, int dia, int mes, int anio){
        setNombreProducto(nomProd);
        setNroLote(lote);
        setFechaCaducidad(dia,mes,anio);
    }
    // metodos setters
     /**
     * @param nombreProducto Descripcion del producto
     */
    public void setNombreProducto(String xNombre){
        nombreProducto = xNombre;
    }
     /**
     * @param nroLote Numero de lote del producto
     */
    public void setNroLote(int xLote){
        nroLote = xLote;
    }
    public void setFechaCaducidad(int d, int m, int a){
        fechaCaducidad.set(Calendar.DAY_OF_MONTH, d);
        fechaCaducidad.set(Calendar.MONTH, m-1);
        fechaCaducidad.set(Calendar.YEAR, a);
    }
    // metodos getters
        /**
    * @return Nombre del producto (String)
    */
    public String getNombreProducto(){
        return nombreProducto;
    }
    /**
    * @return Número de lote (int)
    */
    public int getNroLote(){
        return nroLote;
    }
    /**
     * @return Fecha de vencimiento del producto
     */
    public String getFechaCaducidad(){
        int dia = fechaCaducidad.get(Calendar.DAY_OF_MONTH);
        int mes = fechaCaducidad.get(Calendar.MONTH)+1;
        int anio = fechaCaducidad.get(Calendar.YEAR);
        return dia+"/"+mes+"/"+anio;
    }
}


Clase para productos frescos

Código: [Seleccionar]
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * Write a description of class ProductosFrescos here.
 *
 * @author Luis
 * @version CU00686B
 */
public class ProductosFrescos extends Productos {
    Calendar fechaEnvasado = new GregorianCalendar();
    String paisOrigen = "";
    public ProductosFrescos(String nomProd, int lote, int diaVenc, int mesVenc, int anioVenc, String paisOrigen, int diaEnv, int mesEnv, int anioEnv)    {
        super(nomProd, lote, diaVenc, mesVenc, anioVenc);
        fechaEnvasado.getInstance();
        this.paisOrigen = paisOrigen;
        setFechaEnvasado(diaEnv,mesEnv,anioEnv);
    }
    /**
     * @param paisDeOrigen Nombre de pais donde se produce
     */
    public void setPaisOrigen(String xPais){
        paisOrigen = xPais;
    }
     public void setFechaEnvasado(int d, int m, int a){
        fechaEnvasado.set(Calendar.DAY_OF_MONTH, d);
        fechaEnvasado.set(Calendar.MONTH, m-1);
        fechaEnvasado.set(Calendar.YEAR, a);
    }
    /**
     * @return Nombre del pais de origen (String)
     */
    public String getPaisOrigen(){
        return paisOrigen;
    }
    public String getFechaEnvasado(){
       int dia = fechaEnvasado.get(Calendar.DAY_OF_MONTH);
       int mes = fechaEnvasado.get(Calendar.MONTH)+1;
       int anio = fechaEnvasado.get(Calendar.YEAR);
       return dia+"/"+mes+"/"+anio;
    }
}


Clase para productos refrigerados

Código: [Seleccionar]
/**
 * Write a description of class ProductosRefrigerados here.
 *
 * @author Luis
 * @version CU00686B
 */
public class ProductosRefrigerados extends Productos
{
    private String organismoControl;
    public ProductosRefrigerados(String nomPro, int lote, int diaVenc, int mesVenc, int anioVenc, String organismoControl) {
        // initialise instance variables
        super(nomPro, lote, diaVenc, mesVenc, anioVenc);
        this.organismoControl=organismoControl;
    }
    /**
     * @param organismoControl El Organismo que controla el producto
     */
    public void setOrganismoControl(String organismoControl){
    this.organismoControl = organismoControl;
    }
     /**
     * @return El Organismo que controla el producto (String)   
     */
    public String getOrganismoControl() {
        return organismoControl;
    }
}


Clase para productos congelados

Código: [Seleccionar]
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * Write a description of class ProductosCongelados here.
 *
 * @author Luis
 * @version CU00686B
 */
public class ProductosCongelados extends Productos {
    private double temperaturaCongelado;

    public ProductosCongelados(String nomProd, int lote, int diaVenc, int mesVenc, int anioVenc, double temperaturaCongelado)
    {
        super(nomProd, lote, diaVenc, mesVenc, anioVenc);
        this.temperaturaCongelado=temperaturaCongelado;
    }
    /**
     * @param temperaturaCongelado Temperatura del producto congelado
     */
    public void setTemperaturaCongelado(double temperaturaCongelado){
        this.temperaturaCongelado = temperaturaCongelado;
    }
     /**
     * @return la temperatura de congelado(double)
     */
    public double getTemperaturaCongelado() {
        return temperaturaCongelado;
    }
}


Clase para ingreso de datos por consola ya usada anteriormente

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
    public EntradaDeTeclado ()  { //Constructor
        entradaTeclado="";
     //   pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();
        } //Cierre del método pedirEntrada
    public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada
    public String getPrimeraPalabra ()  {
               for (int i=0; i < entradaTeclado.length() - 1; i++) {
            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
                return entradaTeclado.substring(0, i+1);         }
        }
        return entradaTeclado;  //Caso de que no se detecte ningún espacio devolvemos lo que haya
    } //Cierre del método getPrimeraPalabra
    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    } //Cierre del método getLongitud
} //Cierre de la clase
« Última modificación: 03 de Septiembre 2017, 11:50 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola LuisM

Debes mejorar la forma de nombrar las clases. Por ejemplo el nombre de clase debe ser Producto en lugar de Productos. Para ver una orientación sobre esto puedes guiarte por las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

Hay cosas a mejorar. Por ejemplo si defines Calendar fechaCaducidad el método get para este atributo debe devolver un objeto Calendar. Sin embargo tú devuelves un String con public String getFechaCaducidad(). Los métodos get siempre deben devolver el atributo, con el tipo correspondiente al atributo. Si lo deseas puedes además tener otros métodos para recuperar el atributo con otro formato, pero el nombre de esos métodos debe ser distinto, por ejemplo getComoStringFechaCaducidad()

Lo mismo ocurre con el método public void setFechaCaducidad(int d, int m, int a). Si fechaCaducidad es un objeto Calendar, el método set debe recibir un objeto Calendar. Si quieres puedes tener un método como el que has creado, pero debes ponerle otro nombre distinto.

En este ejercicio, para hacer uso de la herencia, es recomendable plantear un método que muestre los datos de cada producto haciendo uso de la herencia. Para ello se puede invocar super() sobreescribiendo un método, o simplemente llamar un método de una superclase desde una subclase. Puedes ver ejemplos de cómo hacer esto consultando otros ejercicios en el foro. Puedes ver la idea consultando https://www.aprenderaprogramar.com/foros/index.php?topic=1179.0

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