Autor Tema: Java Concepto polimorfismo y variables polimorficas mediante ejemplos CU00688B  (Leído 2163 veces)

PatAs

  • Sin experiencia
  • *
  • Mensajes: 19
  • ¿Libre...? - Solo cuando pienso y aprendo!!
    • Ver Perfil
Buenas tardes/noche. Presento código del ejercicio propuesto CU00688B del curso de programación Java con BlueJ:

Código: [Seleccionar]
package CU00688B;
/**
 * La clase Producto centraliza los atributos y métodos comunes a todos los productos
 * que procesa la empresa
 * @author (Arnaldo R. Martinez)
 * @version (31-Jul-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
 public class Producto {
private String fechaDeVencimiento;
private String numDeLote;
private String fechaDeEnvasado;
private String paisDeOrigen;
//Constructor general sin parametros.
public Producto(){
fechaDeVencimiento = "";
numDeLote = "";
fechaDeEnvasado = "";
paisDeOrigen = "";
}
//Constructor con parametros
public Producto(String fVto, String lote, String fEnv, String Origen) {
fechaDeVencimiento = fVto;
numDeLote = lote;
fechaDeEnvasado = fEnv;
paisDeOrigen = Origen;
}
//Métodos set
public void setVencimiento(String fechaDeVencimiento) {
this.fechaDeVencimiento = fechaDeVencimiento;
}
public void setNumLote(String numDeLote) {
this.numDeLote = numDeLote;
}
public void setEnvasado(String fechaDeEnvasado) {
this.fechaDeEnvasado = fechaDeEnvasado;
}
public void setOrigen(String paisDeOrigen) {
this.paisDeOrigen = paisDeOrigen;
}
//Métodos get
public String getVencimiento() {return fechaDeVencimiento;}
public String getNumLote() {return numDeLote;}
public String getEnvasado() {return fechaDeEnvasado;}
public String getOrigen() {return paisDeOrigen;}
//Otros métodos
public void mostrarProducto(){
System.out.println("Producto \tLote: " +getNumLote());
System.out.println("Envasado el " +getEnvasado()+ "\t-Fecha de vencimiento: " +getVencimiento());
System.out.println("Origen: " +getOrigen());
}
}//Fin de la superclase
Código: [Seleccionar]
package CU00688B;
/**
 * La subclase 'ProductoFresco' es heredada de la superclase 'Producto'.
 *
 * @author (Arnaldo R. Martinez)
 * @version (31-Jul-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class ProductoFresco extends Producto {

//Constructor
public ProductoFresco(){
super();
}
public ProductoFresco(String fVto, String lote, String fEnv, String Origen) {
super(fVto,lote,fEnv,Origen);
}//Cierre del constructor
//Método de la subclase
public void mostrarProducto(){
System.out.println("Producto Fresco.\tLote: " +getNumLote());
System.out.println("Envasado el " +getEnvasado()+ "\t-Fecha de vencimiento: " +getVencimiento());
System.out.println("Origen: " +getOrigen());
}
}//Cierre de la clase
Código: [Seleccionar]
package CU00688B;
/**
 * 'ClaseAuxiliar' es una subclase de la superclase 'Producto' y a la vez
 * es superclase de las clases 'ProductoRefrigerado' y 'ProductoCongelado'
 * maneja y muestra atributos de la temperatura de mantenimiento para los
 * productos que requieren tenerla controlada.
 * @author (Arnaldo R. Martinez)
 * @version (31-Jul-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class AuxiliarProducto extends Producto {
private float temperaturaDeMantenimiento;

public AuxiliarProducto() {
super();
temperaturaDeMantenimiento = 0.0f;
}

public AuxiliarProducto(String fVto, String lote, String fEnv, String Origen, float tempMant) {
super(fVto,lote,fEnv,Origen);
temperaturaDeMantenimiento = tempMant;
}
//Método set
public void setTemperatura(float temperaturaDeMantenimiento) {
this.temperaturaDeMantenimiento = temperaturaDeMantenimiento;
}
//Método get
public float getTemperatura() {return temperaturaDeMantenimiento;}
}
Código: [Seleccionar]
package CU00688B;
/**
 * 'ProductoRefrigerado' es heredada de 'AuxiliarProducto' que q su vez hereda de 'Producto'.
 *
 * @author (Arnaldo R. Martinez)
 * @version (01-Ago-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class ProductoRefrigerado extends AuxiliarProducto {
private String codigoInspeccionOSA;
//Constructor general sin parámetros
public ProductoRefrigerado() {
super();
codigoInspeccionOSA = "";
}
//Constructor con parámetros
public ProductoRefrigerado(String fVto,String Lote, String fEnv, String Origen, float tempMant, String codOSA) {
super (fVto,Lote,fEnv,Origen,tempMant);
codigoInspeccionOSA = codOSA;
}
//Métodos de la clase.
public void setInspOSA(String codigoInspeccionOSA) { this.codigoInspeccionOSA = codigoInspeccionOSA;}

public String getInspOSA() {return codigoInspeccionOSA;}

public void mostrarProducto() {
System.out.println("Producto Refrigerado.\tLote: " +getNumLote());
System.out.println("Envasado el " +getEnvasado()+ "\t-Fecha de vencimiento: " +getVencimiento());
System.out.println("Origen: " +getOrigen());;
System.out.println("Temperatura recomendada de conservacion: " +getTemperatura()+ "\t-Certificado de inspeccion: " +getInspOSA());
}
}//Cierre de la clase.
Código: [Seleccionar]
package CU00688B;
/**
 * 'ProductoCongelado' es heredada de 'ClaseAuxiliar' que a su vez hereda de 'Producto'.
 * No presenta atributos propios ya que los mismos están definidos en las superclases de la misma
 * @author (Arnaldo R. Martinez)
 * @version (01-Ago-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class ProductoCongelado extends AuxiliarProducto {
//Constructor general sin parámetros.
    public ProductoCongelado() {
        super();
    }
    //Constructor con parámetros.
    public ProductoCongelado(String fVto, String Lote, String fEnv, String Origen, float tempMant) {
        super (fVto,Lote,fEnv,Origen,tempMant);
    }
    //Método de la clase.
//Presenta dudas si debe incluirse, ya que 'ProductoCongelado' tiene tres subclases y en cada una
//existe un método 'Mostrar()'
    public void MostrarProductoCongelado() {
        System.out.println("El producto congelado " +getNumLote()+ " fue envasado el " +getEnvasado()+ "\ntiene fecha de vencimiento " +getVencimiento()+ " el origen es " +getOrigen()+ "\ny se recomienda mantener a una temperatura de " +getTemperatura()+ " °C");
    }
}
Código: [Seleccionar]
package CU00688B;
/**
 * 'ProductoCongeladoPorAgua' es dubclase de 'ProductoCongelado'.
 *
 * @author (Arnaldo R. Martinez)
 * @version (01-Ago-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class ProductoCongeladoPorAgua extends ProductoCongelado {
private float salinidadAgua;
//Cosntructor general sin parámetros.
public ProductoCongeladoPorAgua() {
super();
salinidadAgua = 0.0f;
}
//Constructor con parámetros
public ProductoCongeladoPorAgua(String fVto,String lote,String fEnv,String Origen,float tempMant,float salAgua) {
super(fVto,lote,fEnv,Origen,tempMant);
salinidadAgua = salAgua;
}//Cierre del constructor.

//Métodos de la subclase
public void setSalinidad(float salinidadAgua) {
this.salinidadAgua = salinidadAgua;

}
public float getSalinidad() {return salinidadAgua;}

public void mostrarProducto() {
System.out.println("Producto Congelado Por Agua.\tLote: " +getNumLote());
System.out.println("Envasado el " +getEnvasado()+ "\t-Fecha de vencimiento: " +getVencimiento());
System.out.println("Origen: " +getOrigen()+ "\t-Salinidad del agua de congelamiento " +getSalinidad()+ " gr/l.");
System.out.println("Temperatura recomendada de conservacion: " +getTemperatura());
}
}//Cierre de la clase
Código: [Seleccionar]
package CU00688B;
/**
 * 'ProductoCongeladoPorAire' es subclase de 'ProductoCongelado'
 *
 * @author (Arnaldo R. Martinez)
 * @version (01-Ago-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class ProductoCongeladoPorAire extends ProductoCongelado {
private float porcentajeNitrogeno;
private float porcentajeOxigeno;
private float porcentajeDioxidoDeCarbono;
private float porcentajeVaporDeAgua;
//Constructor general sin parámetros
public ProductoCongeladoPorAire() {
super();
porcentajeNitrogeno = 0.0f;
porcentajeOxigeno = 0.0f;
porcentajeDioxidoDeCarbono = 0.0f;
porcentajeVaporDeAgua = 0.0f;
}
//Constructos con parámetros
public ProductoCongeladoPorAire(String fVto,String lote,String fEnv,String Origen,float tempMant,float porcNi,float porcO2,float porcDC,float porcVA) {
super(fVto,lote,fEnv,Origen,tempMant);
porcentajeNitrogeno = porcNi;
porcentajeOxigeno = porcO2;
porcentajeDioxidoDeCarbono = porcDC;
porcentajeVaporDeAgua = porcVA;
}
//Métodos set
public void setNitrogeno(float porcentajeNitrogeno) {
this.porcentajeNitrogeno = porcentajeNitrogeno;
}
public void setOxigeno(float porcentajeOxigeno) {
this.porcentajeOxigeno = porcentajeOxigeno;
}
public void setDDC(float porcentajeDioxidoDeCarbono) {
this.porcentajeDioxidoDeCarbono = porcentajeDioxidoDeCarbono;
}
public void setVapor(float porcentajeVaporDeAgua) {
this.porcentajeVaporDeAgua = porcentajeVaporDeAgua;
}
//Métodos get
public float getNitrogeno() {return porcentajeNitrogeno;}
public float getOxigeno(){return porcentajeOxigeno;}
public float getDDC() {return porcentajeDioxidoDeCarbono;}
public float getVapor(){return porcentajeVaporDeAgua;}
//Otros métodos
public void MostrarComposicionAire() {
System.out.println("Composición del aire " +getNitrogeno()+ " %," +getOxigeno()+ " %," +getDDC()+ " %," +getVapor()+ "%.");
}

public void mostrarProducto() {
System.out.println("Producto Congelado por Aire.\tLote: " +getNumLote());
System.out.println("Envasado el " +getEnvasado()+ "\t-Fecha de vencimiento: " +getVencimiento());
System.out.println("Origen: " +getOrigen());
System.out.println("Temperatura recomendada de conservacion: " +getTemperatura());
System.out.println("Composición de la mezcla de aire de congelamiento: ");
System.out.println("Nitrogeno: " +getNitrogeno()+ "\t-Oxigeno: " +getOxigeno());
System.out.println("Dioxido de Carbono: " +getDDC()+ "\t-Vapor de agua: " +getVapor());
}
}
Código: [Seleccionar]
package CU00688B;
/**
 * 'ProductoCongeladoPorNitrogeno' hereda de 'ProductoCongelado'.
 *
 * @author (Arnaldo R. Martinez)
 * @version (01-Ago-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class ProductoCongeladoPorNitrogeno extends ProductoCongelado {
private String metodoCongelador;
private int tiempoExposicioSegundos;
//Constructor general sin parámetros
public ProductoCongeladoPorNitrogeno() {
super();
metodoCongelador = "";
tiempoExposicioSegundos = 0;
}
//Constructor con parámetros.
public ProductoCongeladoPorNitrogeno(String fVto,String lote,String fEnv,String Origen,float tempMant,String metCong,int tSeg) {
super(fVto,lote,fEnv,Origen,tempMant);
metodoCongelador = metCong;
tiempoExposicioSegundos = tSeg;
}
//Métodos set
public void setMetodoCongelador(String metodoCongelador) {
this.metodoCongelador = metodoCongelador;
}
public void setTiempoExposicion(int tiempoExposicioSegundos) {
this.tiempoExposicioSegundos = tiempoExposicioSegundos;
}
//Métodos get
public String getMetodoCongelador() {return metodoCongelador;}
public int getTiempoExposicion() {return tiempoExposicioSegundos;}
//Otro método
public void mostrarProducto() {
System.out.println("Producto Congelado por Nitrogeno.\tLote: " +getNumLote());
System.out.println("Envasado el " +getEnvasado()+ "\t-Fecha de vencimiento: " +getVencimiento());
System.out.println("Origen: " +getOrigen());
System.out.println("Temperatura recomendada de conservacion: " +getTemperatura());
System.out.println("Metodo de congelacion: " +getMetodoCongelador()+ "\t-Tiempo de exposicion: " +getTiempoExposicion()+ " seg.");
}
}
Código: [Seleccionar]
package CU00688B;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * Clase para tratamiento de los envios de productos.
 *
 * @author (Arnaldo R. Martinez)
 * @version (04-Ago-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class EnvioDeProductos {
//Inicialización
private List <Producto> listaEnvio;
//Constructor de la clase
public EnvioDeProductos() {
listaEnvio = new ArrayList<Producto>();
}//Cierre del constructor
//Método para incorporar producto
public void incluirProductoALista(Producto productoNuevo) {
listaEnvio.add(productoNuevo);
}
//Método para obtener número de productos en la lista
public int getNumeroProductos() { return listaEnvio.size(); }
//Se aplica Iteraror para recorrer el ArrayList
public void verProductos() {
Iterator <Producto> it = listaEnvio.iterator();
Producto p;
while (it.hasNext()) {
p = it.next();
p.mostrarProducto();
System.out.println("-----------------------------------------------------------");
}
}
}
Código: [Seleccionar]
package CU00688B;
/**
 * Write a description of class TestHerencia4 here.
 *
 * @author (Arnaldo R. Martinez)
 * @version (04-Ago-2017 - Ejercicio propuesto por 'aprenderaprogramar.com')
 */
public class TestHerencia4 {
public static void main (String [] Args) {
//1°.-Se crean 2 productos frescos.
ProductoFresco pfresco1 = new ProductoFresco("12-08-2017","FR1001","30-07-2017","Argentina");
ProductoFresco pfresco2 = new ProductoFresco("25-07-2017","FR1002","25-07-2017","Brasil");
//2°,-Se crean 3 productos refrigerados
ProductoRefrigerado prefrig1 = new ProductoRefrigerado("30-08-2017","RF1003","20-07-2017","Bolivia",2.0f,"AR-5004");
ProductoRefrigerado prefrig2 = new ProductoRefrigerado("05-09-2017","RF1004","20-07-2017","Brasil",3.5f,"AR-5005");
ProductoRefrigerado prefrig3 = new ProductoRefrigerado("15-09-2017","RF1005","20-07-2017","Chile",1.5f,"AR-5006");
//3°.-Secrean 5 productos congelados (2 por agua, 2 por aire y 1 por nitrogeno)
ProductoCongeladoPorAgua pcongagua1 = new ProductoCongeladoPorAgua("12-06-2017","CAG1006","30-12-2017","Alemania",-18.0f,35.0f);
ProductoCongeladoPorAgua pcongagua2 = new ProductoCongeladoPorAgua("12-06-2017","CAG1007","30-12-2017","Francia",-15.5f,55.5f);
ProductoCongeladoPorAire pcongaire1 = new ProductoCongeladoPorAire("12-06-2017","CAI1008","30-12-2017","España",-12.0f,70.0f,19.0f,2.0f,8.0f);
ProductoCongeladoPorAire pcongaire2 = new ProductoCongeladoPorAire("12-06-2017","CAI1009","30-12-2017","Italia",-22.3f,70.5f,19.5f,2.0f,7.0f);
ProductoCongeladoPorNitrogeno pcongnitro1 = new ProductoCongeladoPorNitrogeno("12-06-2017","CAI1010","30-12-2017","Argentina",-25.3f,"Inmersion",7);
//Inicialización y creación de un objeto de la clase 'EnvioDeProductos'
EnvioDeProductos productosAEnviar = new EnvioDeProductos();
//La lista
Producto [] listaProductosAEnviar = {pfresco1,pfresco2,prefrig1,prefrig2,prefrig3,pcongagua1,pcongagua2,pcongaire1,pcongaire2,pcongnitro1};
//Mediante 'for-each' se añaden los productos en la colección de Envio.
for (Producto tmp: listaProductosAEnviar) {
productosAEnviar.incluirProductoALista(tmp);
}
//Se muestra por pantalla cuantos productos componen el envío y descripción detallada de cada uno.
System.out.println("El pedido contiene " +productosAEnviar.getNumeroProductos()+ " productos.");
System.out.println("");
System.out.println("Los productos preparados para el ennvio son: ");
System.out.println("----------------------------------------------");


productosAEnviar.verProductos();
}
}
« Última modificación: 26 de Agosto 2017, 14:22 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola PatAs en general felicitarte por el código

Como se ha comentado en otros hilos, sería deseable que el método mostrarProducto() reutilizara código usando invocaciones a super. Puedes ver un ejemplo donde se reutiliza código con invocaciones a super en https://www.aprenderaprogramar.com/foros/index.php?topic=2959.0

El nombre de clase AuxiliarProducto es poco adecuado por no ser descriptivo del cometido o función de la clase

En la clase EnvioDeProductos has hecho un buen uso de polimorfismo, al definir private List <Producto> listaEnvio;, al ser el tipo de la lista Producto, admite tipo Producto y cualquiera de sus subclases.

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