Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Campillo en 04 de Septiembre 2015, 14:16

Título: Plantear esquema de herencia en java creando abstracciones intermedias CU00687B
Publicado por: Campillo en 04 de Septiembre 2015, 14:16
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");
    }
}

Título: Re:Plantear esquema de herencia en java creando abstracciones intermedias CU00687B
Publicado por: Mario R. Rancel en 07 de Septiembre 2015, 14:59
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
Título: Re:Plantear esquema de herencia en java creando abstracciones intermedias CU00687B
Publicado por: Campillo en 07 de Septiembre 2015, 19:13
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();
       
    }
}

Título: Re:Plantear esquema de herencia en java creando abstracciones intermedias CU00687B
Publicado por: Mario R. Rancel en 08 de Septiembre 2015, 18:18
Sí, con esto el ejercicio queda "completo".

Saludos