Autor Tema: Plantear esquema de herencia en java creando abstracciones intermedias CU00687B  (Leído 3786 veces)

Campillo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Producto

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.util.Locale;

public class Producto
{
   
    private static Locale currentLocale = new Locale("es","ES");
    private String lote;
    private Calendar fechaEnvasado;
    private Calendar fechaCaducidad;
    private String paisOrigen;
 

    public Producto(){
        lote="";
        fechaCaducidad=null;
        fechaEnvasado=null;
        paisOrigen="";
    }

    public Producto(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen){
        this.lote=lote;
        this.fechaEnvasado=Calendar.getInstance(currentLocale);
        this.fechaEnvasado.setTime(fechaEnvasado.getTime());
        this.fechaCaducidad=Calendar.getInstance(currentLocale);
        this.fechaCaducidad.setTime(fechaCaducidad.getTime());
        this.paisOrigen=paisOrigen;
    }

    public void setLote(String lote){
        this.lote=lote;
    }

    public void setFechaEnvasado(Calendar fechaEnvasado){
        this.fechaEnvasado=fechaEnvasado;
    }
   
    public void setFechaCaducidad(Calendar fechaCaducidad){
        this.fechaCaducidad=fechaCaducidad;
    }

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

    public Calendar getFechaEnvasado(){
       return fechaEnvasado;
    }
   
    public Calendar getFechaCaducidad(){
        return fechaCaducidad;
    }

    public String getPaisOrigen(){
        return paisOrigen;
    }
   
    public void mostrarProducto(){
        SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy",currentLocale);
        System.out.println("Lote : "+lote);
        System.out.println("Fecha de envasado : "+formatoFecha.format(fechaEnvasado.getTime()));
        System.out.println("Fecha de caducidad : "+formatoFecha.format(fechaCaducidad.getTime()));
        System.out.println("País de origen : "+paisOrigen);
    }
}


Productos frescos

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
import java.text.SimpleDateFormat;
/**
 * Write a description of class ProductosFrescos here.
 *
 * @author Campillo
 * @version 22/08/2015
 */
public class ProductosFrescos extends Producto
{
   
    /**
     * Constructor for objects of class ProductosFrescos
     */
    public ProductosFrescos()
    {
        super();
    }

    public ProductosFrescos(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen)
    {
        super (lote, fechaEnvasado, fechaCaducidad, paisOrigen);
    }
   
    public void infoProductosFrescos(){
        super.mostrarProducto();
    }
}



Productos no frescos

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class ProductosNoFrescos here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class ProductosNoFrescos extends Producto
{
    private int temperaturaRecomendada;
   
    /**
     * Constructor for objects of class ProductosNoFrescos
     */
    public ProductosNoFrescos()
    {
        super();
        temperaturaRecomendada = 0;
    }
   
    public ProductosNoFrescos(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen);
        this.temperaturaRecomendada = temperaturaRecomendada;
    }

    public void setTemperaturaRecomendada(int temperaturaRecomendada){
        this.temperaturaRecomendada = temperaturaRecomendada;
    }
   
    public int getTemperaturaRecomendada(){ return temperaturaRecomendada; }
   
    public void infoProductosNoFrescos(){
        super.mostrarProducto();
        System.out.println("La temperatura recomendada: " + getTemperaturaRecomendada() + "º");
    }
}



Productos refrigerados

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class ProductosRefrigerados here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ProductosRefrigerados extends ProductosNoFrescos
{
    private String codigoSupervisionAlimentaria;

    /**
     * Constructor for objects of class ProductosRefrigerados
     */
    public ProductosRefrigerados()
    {
        super();
        codigoSupervisionAlimentaria = "";
    }
   
    public ProductosRefrigerados(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, String codigoSupervisionAlimentaria){
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        this.codigoSupervisionAlimentaria = codigoSupervisionAlimentaria;
    }

    public void setCodigoSupervisionAlimentaria(String codigoSupervisionAlimentaria){
        this.codigoSupervisionAlimentaria = codigoSupervisionAlimentaria;
    }
   
    public String getCodigoSupervisionAlimentaria(){ return codigoSupervisionAlimentaria; }
   
    public void infoProductosRefrigerados(){
        super.infoProductosNoFrescos();
        System.out.println("Codigo del organismo de supervision alimentaria: " + getCodigoSupervisionAlimentaria());
    }
}



Productos congelados

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class ProductosCongelados here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class ProductosCongelados extends ProductosNoFrescos
{
   

    /**
     * Constructor for objects of class ProductosCongelados
     */
    public ProductosCongelados()
    {
        super();
    }

    public ProductosCongelados(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
    }
}



Productos congelados por aire

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class PCongeladosAire here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class PCongeladosAire extends ProductosCongelados
{
    private int dioxidoDeCarbono;
    private int nitrogeno;
    private int oxigeno;
    private int vaporDeAgua;

    /**
     * Constructor for objects of class PCongeladosAire
     */
    public PCongeladosAire(){
        super();
        dioxidoDeCarbono = 0;
        nitrogeno = 0;
        oxigeno = 0;
        vaporDeAgua = 0;
    }
   
    public PCongeladosAire(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, int dioxidodeCarbono, int nitrogeno, int oxigeno, int vaporDeAgua)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        this.dioxidoDeCarbono = dioxidoDeCarbono;
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.vaporDeAgua = vaporDeAgua;
    }

    public void setComposicionDelAire(int dioxidoDeCarbono, int nitrogeno, int oxigeno, int vaporDeAgua){
        this.dioxidoDeCarbono = dioxidoDeCarbono;
        this.nitrogeno = nitrogeno;
        this.oxigeno = oxigeno;
        this.vaporDeAgua = vaporDeAgua;
    }
   
    public int getDioxidoDeCarbono(){ return dioxidoDeCarbono; }
   
    public int getNitrogeno(){ return nitrogeno; }
   
    public int getOxigeno(){ return oxigeno; }
   
    public int getVaporDeAgua(){ return vaporDeAgua; }
   
    public void infoProductosCongeladosPorAire(){
        super.infoProductosNoFrescos();
        System.out.println("La composicion del aire es: " + getDioxidoDeCarbono() + "% de dioxido de carbono, " + getNitrogeno() + "% de nitrogeno " + getVaporDeAgua() + "% de vapor de agua");
    }
}



Productos congelados por agua

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class PCongeladosAgua here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class PCongeladosAgua extends ProductosCongelados
{
    private int salinidad;

    /**
     * Constructor for objects of class PCongeladosAgua
     */
    public PCongeladosAgua()
    {
        super();
        salinidad = 0;
    }
   
    public PCongeladosAgua(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, int salinidad)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        this.salinidad = salinidad;
    }

    public void setSalinidad(int salinidad){
        this.salinidad = salinidad;
    }
   
    public int getSalinidad(){ return salinidad; }
   
    public void infoProductosCongeladosPorAgua(){
        super.infoProductosNoFrescos();
        System.out.println("La salinidad del agua es: " + getSalinidad() + "g/l");
    }
}



Productos congelados por nitrogeno

Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class PCOngeladosNitrogeno here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class PCongeladosNitrogeno extends ProductosCongelados
{
    private String metodoCongelacion;
    private int tiempoExposicion;

    /**
     * Constructor for objects of class PCOngeladosNitrogeno
     */
    public PCongeladosNitrogeno()
    {
        super();
        metodoCongelacion = "";
        tiempoExposicion = 0;
    }
   
    public PCongeladosNitrogeno(String lote,Calendar fechaEnvasado,Calendar fechaCaducidad,String paisOrigen, int temperaturaRecomendada, String metodoCongelacion, int tiempoExposicion)
    {
        super(lote, fechaEnvasado, fechaCaducidad, paisOrigen, temperaturaRecomendada);
        this.metodoCongelacion = metodoCongelacion;
        this.tiempoExposicion = tiempoExposicion;
    }

    public void setMetodoCongelacion(String metodoCongelacion){
        this.metodoCongelacion = metodoCongelacion;
    }
   
    public void setTiempoExposicion(int tiempoExposicion){
        this.tiempoExposicion = tiempoExposicion;
    }
   
    public String getMetodoCongelacion(){ return metodoCongelacion; }
   
    public int getTiempoExposicion(){ return tiempoExposicion;  }
   
    public void infoProductosCongeladosPorNitrogeno(){
        super.infoProductosNoFrescos();
        System.out.println("El método de congelacion fue: " + getMetodoCongelacion());
        System.out.println("El tiempo de exposicion fue: " + getTiempoExposicion() + "s");
    }
}

« Última modificación: 07 de Septiembre 2015, 14:59 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Hola Campillo

El esquema de herencia está bien planteado y el código bien estructurado

La clase ProductosCongelados es una superclase intermedia bien planteada, como decía el enunciado del ejercicio:
"clases que sirven (aunque no se correspondan con la descripción dada de la empresa) para agrupar atributos y métodos cuando sea posible."

Has trabajado con algunas clases del api java que no se explican en el curso como Locale, Calendar, SimpleDateFormat... esto puede verse positivamente para ir adquiriendo soltura en el manejo del api Java

Te ha faltado (no sé si la has dejado olvidada al crear el post del foro) la clase con el main

Citar
Crear una clase testHerencia3 con el método main donde se creen: dos productos frescos, tres productos refrigerados y cinco productos congelados (2 de ellos congelados por agua, otros 2 por agua y 1 por nitrógeno). Mostrar la información de cada producto por pantalla.

Como aspecto a mejorar tendríamos la forma de nombrar las clases, en particular evitar el uso de plurales. Esto se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=3035.0

Saludos

Campillo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Upps...Fallo mio el no haber subido la clase que contenía el método main.
Clase TestHerencia3
Código: [Seleccionar]
package Numero88;

import java.util.Calendar;
/**
 * Write a description of class TestHerancia3 here.
 *
 * @author Campillo
 * @version 28/08/2015
 */
public class TestHerancia3
{
    public static void main(String [] Args){
        System.out.println("Productos frescos:");
        Calendar fechaEnvasado = Calendar.getInstance();
        Calendar fechaCaducidad = Calendar.getInstance();
        fechaEnvasado.set(2012,2,12);
        fechaCaducidad.set(2014,8,5);
        ProductosFrescos productoFresco1 = new ProductosFrescos("74KLG", fechaEnvasado, fechaCaducidad,"Alemania");
        productoFresco1.infoProductosFrescos();
        fechaEnvasado.set(2013,4,30);
        fechaCaducidad.set(2015,11,20);
        ProductosFrescos productoFresco2 = new ProductosFrescos("26RLV", fechaEnvasado, fechaCaducidad,"Francia");
        productoFresco2.infoProductosFrescos();
       
        System.out.println("Productos refrigerados:");
        fechaEnvasado.set(2014,5,23);
        fechaCaducidad.set(2015,10,2);
        ProductosRefrigerados productoRefrigerado1 = new ProductosRefrigerados("15DFS", fechaEnvasado, fechaCaducidad, "Japon", 0, "1245DDGT");
        productoRefrigerado1.infoProductosRefrigerados();
        fechaEnvasado.set(2014,5,29);
        fechaCaducidad.set(2015,5,8);
        ProductosRefrigerados productoRefrigerado2 = new ProductosRefrigerados("35GDR",fechaEnvasado, fechaCaducidad, "China", 5, "5482GEDG");
        productoRefrigerado2.infoProductosRefrigerados();
        fechaEnvasado.set(2013,4,25);
        fechaCaducidad.set(2014,6,12);
        ProductosRefrigerados productoRefrigerado3 = new ProductosRefrigerados("35DGB", fechaEnvasado, fechaCaducidad, "EE.UU.", 12, "4596FREN");
        productoRefrigerado3.infoProductosRefrigerados();

        System.out.println("Productos congelados por aire: ");
        fechaEnvasado.set(2012,5,30);
        fechaCaducidad.set(2017,4,27);
        PCongeladosAire congeladosAire1 = new PCongeladosAire("65FGR", fechaEnvasado, fechaCaducidad, "Argentina", -5, 2, 60, 18, 23);
        congeladosAire1.infoProductosCongeladosPorAire();
        fechaEnvasado.set(2013,9,16);
        fechaCaducidad.set(2016,8,5);
        PCongeladosAire congeladosAire2 = new PCongeladosAire("24SFE", fechaEnvasado, fechaCaducidad, "Brasil", -2, 5, 50, 20, 15);
        congeladosAire1.infoProductosCongeladosPorAire();
       
        System.out.println("Productos congelados por agua: ");
        fechaEnvasado.set(2000,1,1);
        fechaCaducidad.set(2010,1,1);
        PCongeladosAgua congeladosAgua1 = new PCongeladosAgua("37FST", fechaEnvasado, fechaCaducidad, "Mexico", -7, 12);
        congeladosAgua1.infoProductosCongeladosPorAgua();
        fechaEnvasado.set(2001,11,5);
        fechaCaducidad.set(2011,10,23);
        PCongeladosAgua congeladosAgua2 = new PCongeladosAgua("37SDK", fechaEnvasado, fechaCaducidad, "Italia", -7, 12);
        congeladosAgua2.infoProductosCongeladosPorAgua();
       
        System.out.println("Producto congelado por nitrogeno: ");
        fechaEnvasado.set(2004,2,5);
        fechaCaducidad.set(2014,5,3);
        PCongeladosNitrogeno congeladosNitrogeno = new PCongeladosNitrogeno("36HRF", fechaEnvasado, fechaCaducidad, "España", -5, "Inmesion", 12);
        congeladosNitrogeno.infoProductosCongeladosPorNitrogeno();
       
    }
}


Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Sí, con esto el ejercicio queda "completo".

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