Programa Java que gestiona los productos que comercializan varios viveros
1. Desarrollar un programa Java que proponga una solución orientada a objetos al siguiente enunciado.
“Se desea realizar un programa que gestione los productos que comercializan varios viveros. De cada
vivero nos interesa saber su nombre y localización. Además, el programa almacenará el nombre y NIF de
sus trabajadores.
Cada uno de los viveros comercializa plantas y árboles, los cuales poseen un identificador de producto, un
nombre y un precio. Además, las plantas poseen un tipo de flor (gamopétalas, dialipétalas, etc.), que debe
ser contemplado por la aplicación. También, las plantas pueden clasificarse en plantas de interior y exterior.
De las primeras nos interesa saber la sensibilidad de luz (valor entero) y humedad ideal, mientras que las de
exterior, la temperatura ideal de conservación y humedad ideal. Por otro lado, los árboles poseerán la
información sobre el tipo de tronco que tienen y el diámetro del mismo (en cms).
Paralelamente a este sistema de información, se pretende crear un sistema inteligente que permita regar a
cada producto con una determinada cantidad de agua. Para ello, todos deberán responder a la acción de
regar con un valor entero que represente la cantidad de agua public int calcularCantidadAgua() que
necesitan.
La implementación del método regar se realizará teniendo en cuenta las siguientes fórmulas.
Árboles -> corteza de corcho= 4 * diámetro; otra corteza = 2 * diámetro
Plantas Interior -> sensibilidad de luz * 3 * humedad
Plantas Exterior -> temperatura * 2 * humedad”
Se pide:
• Crear dos viveros y agregar varios tipos de productos a cada uno (no tiene un número
predeterminado de productos).
• A continuación, se realizarán las siguientes acciones independientemente del número y el tipo de
objetos creados, es decir, del punto anterior:
• Mostrar la información de todos los viveros.
• Obtener los valores de agua para regar todos los productos del vivero “X” e iniciar el
proceso automático de regadío invocando al método public void riega(Regable r) de la
clase SistemaRegadio. El método de esta clase se limitará a imprimir por pantalla la
cantidad de agua que está utilizando para el parámetro r.
• Mostrar el tipo de flor de las plantas del vivero “X”.
• Los productos que comercializa cada vivero deberán estar ordenador por identificador de producto.
• Nos interesa mantener el orden de creación de los viveros.
• Estructurar el programa en paquetes.
bitCoach::Juan Bautista Cascallar Lorenzo::Página 1
2. ContadorIDS.java
package es.java.mentor.actividad2global.productos;
public final class ContadorIDS {
public static int id = 0;
}
Producto.java
package es.java.mentor.actividad2global.productos;
public abstract class Producto {
//Atributos
private int idProducto;
private String nombre;
private double precio;
//Constructor
public Producto(String nomb, double prec){
ContadorIDS.id++;
idProducto = ContadorIDS.id;
nombre = nomb;
precio = prec;
}
//GETTERS
public int getIdProducto(){
return idProducto;
}
public String getNombre(){
return nombre;
}
public double getPrecio(){
return precio;
}
//Otros métodos
public abstract int calcularCantidadAgua();
}
Planta.java
package es.java.mentor.actividad2global.productos;
public abstract class Planta extends Producto {
//Atributos
private String tipoFlor;
//Constructor
public Planta(String nomb, double prec, String tFlor){
super(nomb,prec);
tipoFlor = tFlor;
}
//GETTERS
public String getTipoFlor(){
return tipoFlor;
}
//Otros métodos
public abstract int calcularCantidadAgua();
}
bitCoach::Juan Bautista Cascallar Lorenzo::Página 2
3. Arbol.java
package es.java.mentor.actividad2global.productos;
public class Arbol extends Producto {
//Atributos
private String tipoCorteza;
private int diametroTronco;
//Constructor
public Arbol(String nomb, double prec, String tCorteza, int diamTronco){
super(nomb,prec);
tipoCorteza = tCorteza;
diametroTronco = diamTronco;
}
//Getters
public String getTipoTronco(){
return tipoCorteza;
}
public int getDiametroTronco(){
return diametroTronco;
}
//Otros métodos
public int calcularCantidadAgua(){
//Árboles -> corteza de corcho = 4 * diámetro; otra corteza = 2 * diámetro
if(tipoCorteza.equalsIgnoreCase("CORCHO") == true){
return (4 * diametroTronco);
}else{
return (2 * diametroTronco);
}
}
}
PlantaInterior.java
package es.java.mentor.actividad2global.productos;
public class PlantaInterior extends Planta {
//Atributos
private int sensibilidad_luz; //Valor entero
private int humedad_ideal; //Porcentaje (ej.30%)
//Constructor
public PlantaInterior(String nomb, double prec, String tFlor, int sluz, int humedad){
super(nomb,prec,tFlor);
sensibilidad_luz = sluz;
humedad_ideal = humedad;
}
//Getters
public int getSensibilidadLuz(){
return sensibilidad_luz;
}
public int getHumedad(){
return humedad_ideal;
}
//Otros métodos
public int calcularCantidadAgua(){
//Plantas Interior -> sensibilidad de luz * 3 * humedad
return (sensibilidad_luz * 3 * humedad_ideal);
}
}
bitCoach::Juan Bautista Cascallar Lorenzo::Página 3
4. PlantaExterior.java
package es.java.mentor.actividad2global.productos;
public class PlantaExterior extends Planta{
//Atributos
private int tempConservacion; //Temperatura ideal de conservación
private int humedad_ideal; //Porcentaje (ej.30%)
//Constructor
public PlantaExterior(String nomb, double prec, String tFlor, int tConservacion, int
humedad){
super(nomb,prec,tFlor);
tempConservacion = tConservacion;
humedad_ideal = humedad;
}
//GETTERS
public int getTempConservacion(){
return tempConservacion;
}
public int getHumedadIdeal(){
return humedad_ideal;
}
//Otros métodos
public int calcularCantidadAgua(){
//Plantas Exterior -> temperatura * 2 * humedad”
return (tempConservacion * 2 * humedad_ideal);
}
}
Trabajador.java
package es.java.mentor.actividad2global.trabajadores;
public class Trabajador {
//Atributos
private String nif;
private String nombre;
//Constructor
public Trabajador(String nf, String nomb){
nif = nf;
nombre = nomb;
}
//GETTERS
public String getNif(){
return nif;
}
public String getNombre(){
return nombre;
}
}
SistemaRegadio.java
package es.java.mentor.actividad2global.Riego;
import java.util.ArrayList;
import java.util.Iterator;
public class SistemaRegadio {
//Atributos
private int cantidadAgua = 0;
public void riega(ArrayList<Integer> r){
Iterator<Integer> it = r.iterator();
while(it.hasNext()){
cantidadAgua += it.next();
}
System.out.println("Cantidad de agua a utilizar: " + cantidadAgua);
}
}
bitCoach::Juan Bautista Cascallar Lorenzo::Página 4
5. Vivero.java
package es.java.mentor.actividad2global.viveros;
import es.java.mentor.actividad2global.trabajadores.Trabajador;
import es.java.mentor.actividad2global.productos.*;
import es.java.mentor.actividad2global.Riego.*;
import java.util.ArrayList;
import java.util.Iterator;
public class Vivero {
//Atributos
private String nombre;
private String localizacion;
private ArrayList<Trabajador> trabajadores = new ArrayList<Trabajador>();
private ArrayList<Object> productos = new ArrayList<Object>();
//CONSTRUCTOR
public Vivero(String nomb, String loc){
nombre = nomb;
localizacion = loc;
}
//GETTERS
public String getNombre(){
return nombre;
}
public String getLocalizacion(){
return localizacion;
}
//OTROS MÉTODOS
public void altaTrabajador(Trabajador t){
trabajadores.add(t);
}
public void altaProducto(Object p){
productos.add(p);
}
public void regarProductos(){
ArrayList<Integer> cantidadesDeAgua = new ArrayList<Integer>();
if(productos.isEmpty()==true){
System.out.println("No hay productos...");
}else{
System.out.println("Regando los productos del vivero: " + this.nombre + "-" +
this.localizacion);
Iterator<Object> it = productos.iterator();
while(it.hasNext()){
Producto po = (Producto)it.next();
cantidadesDeAgua.add(po.calcularCantidadAgua());
}
//--- Regar ---
SistemaRegadio sr = new SistemaRegadio();
sr.riega(cantidadesDeAgua);
//-------------
}
}
public void mostrarTipoFlor_Plantas(){
if(productos.isEmpty() == true){
System.out.println("No hay productos...");
}else{
Iterator<Object> it = productos.iterator();
System.out.println("Tipos de Flor de las plantas del vivero: " + this.nombre);
while(it.hasNext()){
Producto pr = (Producto)it.next();
if(pr instanceof Planta){
System.out.println("--- PLANTA ------------");
System.out.println("ID: " + pr.getIdProducto());
System.out.println("NOMBRE: " + pr.getNombre());
System.out.println("TIPO DE FLOR: " + ((Planta)
pr).getTipoFlor());
System.out.println("-----------------------");
}
}
}
}
bitCoach::Juan Bautista Cascallar Lorenzo::Página 5
6. public void mostrarInfo(){
System.out.println("================================================================");
System.out.println("INFORMACIÓN DEL VIVERO " + nombre + "-" + localizacion);
System.out.println("================================================================");
//--- Trabajadores ---
if(trabajadores.isEmpty() == true){
System.out.println("- No tiene trabajadores.");
}else{
Iterator<Trabajador> it = trabajadores.iterator();
while(it.hasNext()){
Trabajador tr = it.next();
System.out.println("--- TRABAJADOR --------");
System.out.println("NIF: " + tr.getNif());
System.out.println("NOMBRE: " + tr.getNombre());
System.out.println("-----------------------");
}
}
//--- Productos ---
if(productos.isEmpty() == true){
System.out.println("- No tiene productos.");
}else{
Iterator<Object> it = productos.iterator();
while(it.hasNext()){
Producto pr = (Producto)it.next();
System.out.println("--- PRODUCTO ----------");
//--- Común a todos los productos ---
System.out.println("ID: " + pr.getIdProducto());
System.out.println("NOMBRE: " + pr.getNombre());
System.out.println("PRECIO: " + pr.getPrecio());
//--- Común a todos los productos ---
if(pr instanceof PlantaInterior){
System.out.println("TIPO DE FLOR: " + ((PlantaInterior)
pr).getTipoFlor());
System.out.println("SENSIBILIDAD DE LUZ: " + ((PlantaInterior)
pr).getSensibilidadLuz());
System.out.println("HUMEDAD IDEAL: " + ((PlantaInterior)
pr).getHumedad());
}else if(pr instanceof PlantaExterior){
System.out.println("TIPO DE FLOR: " + ((PlantaExterior)
pr).getTipoFlor());
System.out.println("TEMPERATURA CONSERVACIÓN: " +
((PlantaExterior) pr).getTempConservacion());
System.out.println("HUMEDAD IDEAL: " + ((PlantaExterior)
pr).getHumedadIdeal());
}else if(pr instanceof Arbol){
System.out.println("TIPO CORTEZA: " + ((Arbol)
pr).getTipoTronco());
System.out.println("DIÁMETRO TRONCO: " + ((Arbol)
pr).getDiametroTronco());
}
System.out.println("-----------------------");
}
}
}
}
bitCoach::Juan Bautista Cascallar Lorenzo::Página 6
7. gestionViveros.java
package es.java.mentor.actividad2global.viveros;
import java.util.ArrayList;
import java.util.Iterator;
public class gestionViveros {
//Atributos
private ArrayList<Vivero> viveros = new ArrayList<Vivero>();
//Otros métodos
public void altaVivero(Vivero v){
viveros.add(v);
}
public void mostrarInfoViveros(){
if(viveros.isEmpty() == true){
System.out.println("No hay ningún vivero.");
}else{
Iterator<Vivero> it = viveros.iterator();
while(it.hasNext()){
Vivero v = it.next();
v.mostrarInfo();
}
}
}
public void regarProductosDelViveroX(String nomb){
if(viveros.isEmpty() == true){
System.out.println("No hay ningún vivero.");
}else{
boolean existe = false;
Iterator<Vivero> it = viveros.iterator();
while(it.hasNext()){
Vivero v = it.next();
if(v.getNombre().equalsIgnoreCase(nomb) == true){
v.regarProductos();
existe = true;
break;
}
}
if(existe == false){
System.out.println("No existe el vivero: " + nomb);
}
}
}
}//Fin clase.
bitCoach::Juan Bautista Cascallar Lorenzo::Página 7
8. testViveros.java
package es.java.mentor.actividad2global.pruebas;
import es.java.mentor.actividad2global.productos.*;
import es.java.mentor.actividad2global.viveros.*;
import es.java.mentor.actividad2global.trabajadores.*;
public class testViveros {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//--- Crea dos Viveros ---
//Vivero(String nomb, String loc)
gestionViveros gv = new gestionViveros();
Vivero v01 = new Vivero("VIVERO_N1","ZONA NORTE");
Vivero v02 = new Vivero("VIVERO_N2","ZONA SUR");
gv.altaVivero(v01);
gv.altaVivero(v02);
//--- Trabajadores ---
Trabajador tr01 = new Trabajador("44556656-T","José Luis Almadro");
Trabajador tr02 = new Trabajador("65423552-B","Alberto Martínez Santos");
//--- Productos ---
//PlantaInterior(String nomb, double prec, String tFlor, int sluz, int humedad)
PlantaInterior pi01 = new PlantaInterior("PLANTA INTERIOR
01",20.5,"GAMOPÉTALA",3,10);
PlantaInterior pi02 = new PlantaInterior("PLANTA INTERIOR
02",30.5,"DIALIPÉTALA",7,20);
//PlantaExterior(String nomb, double prec, String tFlor, int tConservacion, int
humedad)
PlantaExterior pe01 = new PlantaExterior("PLANTA EXTERIOR
01",12.5,"DIALIPÉTALA",10,25);
PlantaExterior pe02 = new PlantaExterior("PLANTA EXTERIOR 02",12,"GAMOPÉTALA",8,15);
//Arbol(String nomb, double prec, String tCorteza, int diamTronco)
Arbol arb01 = new Arbol("ARBOL 01",40.5,"CORCHO",20);
Arbol arb02 = new Arbol("ARBOL 02",30.5,"OTRA CORTEZA",30);
//--- Construir v01 ---
v01.altaTrabajador(tr01);
v01.altaProducto(pi01);
v01.altaProducto(pe01);
v01.altaProducto(arb01);
//--- Construir v02 ---
v02.altaTrabajador(tr02);
v02.altaProducto(pi02);
v02.altaProducto(pe02);
v02.altaProducto(arb02);
//MOSTAR INFORMACIÓN DE TODOS LOS VIVEROS
gv.mostrarInfoViveros();
//REGAR TODOS LOS PRODUCTOS DEL VIVERO V01 Y DEL VIVERO V02
gv.regarProductosDelViveroX("VIVERO_N1");
gv.regarProductosDelViveroX("VIVERO_N2");
//TIPOS DE FLOR DE LAS PLANTAS DEL VIVERO V01 Y DEL VIVERO V02
v01.mostrarTipoFlor_Plantas();
v02.mostrarTipoFlor_Plantas();
}
}
bitCoach::Juan Bautista Cascallar Lorenzo::Página 8
9. Diagrama de clases UML
bitCoach::Juan Bautista Cascallar Lorenzo::Página 9