From 0bf64f57c7bfab0a21fb4757ba0b708219a54c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Prada=20MU=C3=B1oz?= Date: Sat, 21 Nov 2020 20:19:22 +0100 Subject: [PATCH 01/10] =?UTF-8?q?A=C3=B1adiendo=20clase=20abstracta=20Vehi?= =?UTF-8?q?culoConRuedas=20y=20clase=20Moto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/vehiculos/Ejemplo.java | 5 ++++- src/vehiculos/Moto.java | 26 ++++++++++++++++++++++++++ src/vehiculos/Vehiculo.java | 2 +- src/vehiculos/VehiculoConRuedas.java | 23 +++++++++++++++++++++++ 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 src/vehiculos/Moto.java create mode 100644 src/vehiculos/VehiculoConRuedas.java diff --git a/src/vehiculos/Ejemplo.java b/src/vehiculos/Ejemplo.java index d6dc4ce..8ccf2d9 100644 --- a/src/vehiculos/Ejemplo.java +++ b/src/vehiculos/Ejemplo.java @@ -1,6 +1,5 @@ package vehiculos; -import static vehiculos.Coche.*; public class Ejemplo { @@ -26,6 +25,10 @@ public static void main(String[] args) { System.out.println(miCoche); System.out.println(miCoche2); + + System.out.println(new Coche ("BMW", "azul platino", 4)); + System.out.println(new Coche ("SEAT TOLEDO", colorPorDefecto, 4)); + System.out.println(new Moto("Suzuki", "negro")); } } diff --git a/src/vehiculos/Moto.java b/src/vehiculos/Moto.java new file mode 100644 index 0000000..5b21114 --- /dev/null +++ b/src/vehiculos/Moto.java @@ -0,0 +1,26 @@ +package vehiculos; + + +public class Moto extends VehiculoConRuedas{ + + public Moto() { + super(); + } + + public Moto(String modelo, String color) { + super(modelo, color); + } + + @Override + public int getNumeroDeRuedas() { + return 2; + } + + @Override + public String toString() { + return "Moto: " + super.toString(); + } + + + +} diff --git a/src/vehiculos/Vehiculo.java b/src/vehiculos/Vehiculo.java index 8e5c6ba..19187ca 100644 --- a/src/vehiculos/Vehiculo.java +++ b/src/vehiculos/Vehiculo.java @@ -31,7 +31,7 @@ public Vehiculo(String modelo, String color) { public String toString() { return (getModelo() == null ? MODELO_NO_DISPONIBLE : getModelo()) // return getModelo() - + " (" + color + ") " + modelo; + + " (" + color + ")"; } } \ No newline at end of file diff --git a/src/vehiculos/VehiculoConRuedas.java b/src/vehiculos/VehiculoConRuedas.java new file mode 100644 index 0000000..2240a8a --- /dev/null +++ b/src/vehiculos/VehiculoConRuedas.java @@ -0,0 +1,23 @@ +package vehiculos; + + +public abstract class VehiculoConRuedas extends Vehiculo { + + public VehiculoConRuedas() { + super(); + } + + public VehiculoConRuedas(String modelo, String color) { + super(modelo, color); + } + + public abstract int getNumeroDeRuedas(); + + @Override + public String toString() { + return super.toString() + ", " + getNumeroDeRuedas() + " ruedas"; + } + + + +} \ No newline at end of file From 8f7b25942e6913d663055ad7887be5415c92cdf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Prada=20MU=C3=B1oz?= Date: Mon, 23 Nov 2020 21:56:14 +0100 Subject: [PATCH 02/10] =?UTF-8?q?Aplicando=20revision=20de=20formato=20y?= =?UTF-8?q?=20a=C3=B1adiendo=20clases=20anonimas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/vehiculos/Coche.java | 51 +++++++++++++------------- src/vehiculos/Ejemplo.java | 38 +++++++++----------- src/vehiculos/Igualdad.java | 54 ++++++++++++++++++++++++++-- src/vehiculos/Moto.java | 6 +--- src/vehiculos/Vehiculo.java | 13 ++++--- src/vehiculos/VehiculoConRuedas.java | 8 ++--- 6 files changed, 102 insertions(+), 68 deletions(-) diff --git a/src/vehiculos/Coche.java b/src/vehiculos/Coche.java index 4ba63a4..34a57be 100644 --- a/src/vehiculos/Coche.java +++ b/src/vehiculos/Coche.java @@ -4,49 +4,50 @@ public class Coche extends Vehiculo { private int numeroDeRuedas; private String matricula; + protected static int miCodigoSecreto = 12345; public void setMatricula(String matricula) { this.matricula = matricula; } - + public Coche() { this("Blanco"); -// numeroDeRuedas = 4; + // numeroDeRuedas = 4; } public Coche(String color) { -// this(); -// numeroDeRuedas = 4; -// setColor(color); // como ya tengo el setter lo utilizo + // this(); + // numeroDeRuedas = 4; + // setColor(color); // como ya tengo el setter lo utilizo this(null, color); } - + public Coche(String modelo, String color) { -// super(modelo, color); -// numeroDeRuedas = 4; + // super(modelo, color); + // numeroDeRuedas = 4; this(modelo, color, 4); } - + public Coche(String modelo, String color, int ruedas) { super(modelo, color); numeroDeRuedas = ruedas; } -// public Coche color(String color) { -// setColor(color); -// return this; -// } -// -// public Coche modelo(String modelo) { -// this.modelo = modelo; -// return this; -// } - -// public static Coche crearConModelo(String modelo) { -// Coche coche = new Coche(); -// coche.modelo = modelo; -// return coche; -// } + // public Coche color(String color) { + // setColor(color); + // return this; + // } + // + // public Coche modelo(String modelo) { + // this.modelo = modelo; + // return this; + // } + + // public static Coche crearConModelo(String modelo) { + // Coche coche = new Coche(); + // coche.modelo = modelo; + // return coche; + // } @Override public String toString() { @@ -83,6 +84,4 @@ public boolean equals(Object obj) { return false; return true; } - - } diff --git a/src/vehiculos/Ejemplo.java b/src/vehiculos/Ejemplo.java index 8ccf2d9..e5b5f81 100644 --- a/src/vehiculos/Ejemplo.java +++ b/src/vehiculos/Ejemplo.java @@ -1,34 +1,28 @@ package vehiculos; - public class Ejemplo { public static void main(String[] args) { - + String colorPorDefecto = "Rojo"; - Vehiculo miCoche = new Coche("Verde");//.modelo("Mercedes Benz");; + Vehiculo miCoche = new Coche("Verde");// .modelo("Mercedes Benz");; Vehiculo miCoche2 = new Coche("Azul"); -// miCoche.modelo = "Ford Fiesta"; -// miCoche.color = colorPorDefecto; - - -// miCoche.setColor(colorPorDefecto); + // miCoche.modelo = "Ford Fiesta"; + // miCoche.color = colorPorDefecto; + + // miCoche.setColor(colorPorDefecto); System.out.println(miCoche); - -// miCoche2 = Coche.crearConModelo("Seat Ibiza"); - + + // miCoche2 = Coche.crearConModelo("Seat Ibiza"); + miCoche = miCoche2; -// miCoche2.modelo = "Opel Astra"; -// miCoche2.color = "Azul"; - -// miCoche2.color = colorPorDefecto; - - System.out.println(miCoche); - System.out.println(miCoche2); - - System.out.println(new Coche ("BMW", "azul platino", 4)); - System.out.println(new Coche ("SEAT TOLEDO", colorPorDefecto, 4)); + // miCoche2.modelo = "Opel Astra"; + // miCoche2.color = "Azul"; + + // miCoche2.color = colorPorDefecto; + + System.out.println(new Coche("BMW", "azul platino", 4)); + System.out.println(new Coche("SEAT TOLEDO", colorPorDefecto, 4)); System.out.println(new Moto("Suzuki", "negro")); } - } diff --git a/src/vehiculos/Igualdad.java b/src/vehiculos/Igualdad.java index 6680baf..e135302 100644 --- a/src/vehiculos/Igualdad.java +++ b/src/vehiculos/Igualdad.java @@ -18,9 +18,59 @@ public static void main(String[] args) { coche2.setMatricula("5555 CCC"); System.out.println("Los coches siguen siendo iguales: " + coche1.equals(coche2)); - //Identidad + // Identidad System.out.println("coche1 y coche2 son el mismo: " + (coche1 == coche2)); System.out.println("coche1 y coche3 son el mismo: " + (coche3 == coche1)); - } + // Clases anonimas + VehiculoConRuedas triciclo = new VehiculoConRuedas("Fisher-Price", "Multicolor") { + + @Override + public int getNumeroDeRuedas() { + return 3; + } + }; + + System.out.println(triciclo); + Moto harley = new Moto("Harley-Davidson", "Rosa") { + + @Override + public void setColor(String color) { + if (!(color.equals("Rojo") || color.equals("Negro"))) { + System.out.println("No se permite ese color para " + modelo); + } + } + }; + + System.out.println(harley); + harley.setColor("Rojo"); + System.out.println(harley); + + Vehiculo barco = new Vehiculo("CMB Yachts", "Blanco") { + double eslora = 47.8; + + private double getEslora() { + return eslora; + } + + public String toString() { + return super.toString() + " con " + getEslora() + "m de eslora"; + } + }; + + System.out.println(barco); + Coche cocheConPin = new Coche() { + + @Override + public String toString() { + return "El código secreto es: " + miCodigoSecreto; + } + }; + + System.out.println(cocheConPin); + System.out.println(triciclo.getClass()); + System.out.println(harley.getClass()); + System.out.println(barco.getClass()); + + } } diff --git a/src/vehiculos/Moto.java b/src/vehiculos/Moto.java index 5b21114..8c49914 100644 --- a/src/vehiculos/Moto.java +++ b/src/vehiculos/Moto.java @@ -1,7 +1,6 @@ package vehiculos; - -public class Moto extends VehiculoConRuedas{ +public class Moto extends VehiculoConRuedas { public Moto() { super(); @@ -20,7 +19,4 @@ public int getNumeroDeRuedas() { public String toString() { return "Moto: " + super.toString(); } - - - } diff --git a/src/vehiculos/Vehiculo.java b/src/vehiculos/Vehiculo.java index 19187ca..0c8f65f 100644 --- a/src/vehiculos/Vehiculo.java +++ b/src/vehiculos/Vehiculo.java @@ -3,7 +3,7 @@ public class Vehiculo { private static final String MODELO_NO_DISPONIBLE = "N/A"; - private String modelo; + protected String modelo; private String color; public String getColor() { @@ -13,15 +13,15 @@ public String getColor() { public void setColor(String color) { this.color = color; } - + protected String getModelo() { -// return modelo == null ? MODELO_NO_DISPONIBLE : modelo; + // return modelo == null ? MODELO_NO_DISPONIBLE : modelo; return modelo; } - + public Vehiculo() { } - + public Vehiculo(String modelo, String color) { this.modelo = modelo; setColor(color); @@ -30,8 +30,7 @@ public Vehiculo(String modelo, String color) { @Override public String toString() { return (getModelo() == null ? MODELO_NO_DISPONIBLE : getModelo()) -// return getModelo() + // return getModelo() + " (" + color + ")"; } - } \ No newline at end of file diff --git a/src/vehiculos/VehiculoConRuedas.java b/src/vehiculos/VehiculoConRuedas.java index 2240a8a..150804a 100644 --- a/src/vehiculos/VehiculoConRuedas.java +++ b/src/vehiculos/VehiculoConRuedas.java @@ -1,23 +1,19 @@ package vehiculos; - public abstract class VehiculoConRuedas extends Vehiculo { public VehiculoConRuedas() { super(); } - + public VehiculoConRuedas(String modelo, String color) { super(modelo, color); } - + public abstract int getNumeroDeRuedas(); @Override public String toString() { return super.toString() + ", " + getNumeroDeRuedas() + " ruedas"; } - - - } \ No newline at end of file From 0f81439b3fcb5877407b028a5a3c3a35c38c2814 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Prada=20MU=C3=B1oz?= Date: Tue, 1 Dec 2020 20:49:42 +0100 Subject: [PATCH 03/10] =?UTF-8?q?A=C3=B1adiendo=20modificaciones=2001/12/2?= =?UTF-8?q?0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/{vehiculos => ejemplos_uso}/Ejemplo.java | 8 ++- .../EjemploAnonima.java} | 54 +++++++++++-------- src/ejemplos_uso/EjemploCollection.java | 40 ++++++++++++++ src/ejemplos_uso/EjemploInterface.java | 22 ++++++++ src/ejemplos_uso/Igualdad.java | 29 ++++++++++ src/ejemplos_uso/Movible.java | 6 +++ src/vehiculos/Arrancable.java | 9 ++++ src/vehiculos/Coche.java | 14 ++++- src/vehiculos/VehiculoConRuedas.java | 10 +++- 9 files changed, 166 insertions(+), 26 deletions(-) rename src/{vehiculos => ejemplos_uso}/Ejemplo.java (84%) rename src/{vehiculos/Igualdad.java => ejemplos_uso/EjemploAnonima.java} (57%) create mode 100644 src/ejemplos_uso/EjemploCollection.java create mode 100644 src/ejemplos_uso/EjemploInterface.java create mode 100644 src/ejemplos_uso/Igualdad.java create mode 100644 src/ejemplos_uso/Movible.java create mode 100644 src/vehiculos/Arrancable.java diff --git a/src/vehiculos/Ejemplo.java b/src/ejemplos_uso/Ejemplo.java similarity index 84% rename from src/vehiculos/Ejemplo.java rename to src/ejemplos_uso/Ejemplo.java index e5b5f81..5fa7e24 100644 --- a/src/vehiculos/Ejemplo.java +++ b/src/ejemplos_uso/Ejemplo.java @@ -1,4 +1,9 @@ -package vehiculos; +package ejemplos_uso; + +import vehiculos.Coche; +import vehiculos.Moto; +import vehiculos.Vehiculo; +import vehiculos.VehiculoConRuedas; public class Ejemplo { @@ -24,5 +29,6 @@ public static void main(String[] args) { System.out.println(new Coche("BMW", "azul platino", 4)); System.out.println(new Coche("SEAT TOLEDO", colorPorDefecto, 4)); System.out.println(new Moto("Suzuki", "negro")); + } } diff --git a/src/vehiculos/Igualdad.java b/src/ejemplos_uso/EjemploAnonima.java similarity index 57% rename from src/vehiculos/Igualdad.java rename to src/ejemplos_uso/EjemploAnonima.java index e135302..88ab826 100644 --- a/src/vehiculos/Igualdad.java +++ b/src/ejemplos_uso/EjemploAnonima.java @@ -1,28 +1,34 @@ -package vehiculos; +package ejemplos_uso; -public class Igualdad { +import vehiculos.Coche; +import vehiculos.Moto; +import vehiculos.Vehiculo; +import vehiculos.VehiculoConRuedas; + +public class EjemploAnonima { public static void main(String[] args) { - Coche coche1 = new Coche("Seat Ibiza", "Rojo"); - coche1.setMatricula("1234 BBB"); - Coche coche2 = new Coche("Seat Ibiza", "Rojo"); - coche2.setMatricula("1234 BBB"); - Vehiculo coche3 = coche1; - - // Igualdad - System.out.println("coche1 y coche2 son iguales: " + coche1.equals(coche2)); - System.out.println("Pinto coche2 de Negro"); - coche2.setColor("Negro"); - System.out.println("Los coches siguen siendo iguales: " + coche1.equals(coche2)); - System.out.println("Cambio la matrícula a coche2"); - coche2.setMatricula("5555 CCC"); - System.out.println("Los coches siguen siendo iguales: " + coche1.equals(coche2)); - - // Identidad - System.out.println("coche1 y coche2 son el mismo: " + (coche1 == coche2)); - System.out.println("coche1 y coche3 son el mismo: " + (coche3 == coche1)); - - // Clases anonimas + Vehiculo original = new Vehiculo("Original", null); + System.out.println(original.getClass()); + + Vehiculo anonimo = new Vehiculo("Anonimo", null) { + String ancla = "Ancla standard"; + + @Override + public String getColor() { + // TODO Auto-generated method stub + return super.getColor() + "*"; + } + + @Override + public String toString() { + // TODO Auto-generated method stub + return super.toString() + " " + ancla; + } + + }; + System.out.println(anonimo); + VehiculoConRuedas triciclo = new VehiculoConRuedas("Fisher-Price", "Multicolor") { @Override @@ -73,4 +79,6 @@ public String toString() { System.out.println(barco.getClass()); } -} + + } + diff --git a/src/ejemplos_uso/EjemploCollection.java b/src/ejemplos_uso/EjemploCollection.java new file mode 100644 index 0000000..0de143d --- /dev/null +++ b/src/ejemplos_uso/EjemploCollection.java @@ -0,0 +1,40 @@ +package ejemplos_uso; + +import java.util.ArrayList; +import java.util.Collection; + +import vehiculos.*; + +public class EjemploCollection { + + public static void main(String[] args) { + String matricula = "1234ABC"; + Coche coche = new Coche("Ford Fiesta", "Rojo"); // ¿por que no usar variable Vehiculo? + coche.setMatricula(matricula); + Vehiculo moto = new Moto("Suzuki", "Verde"); + + Collection vehiculos = new ArrayList<>(); + vehiculos.add(coche); + vehiculos.add(moto); + System.out.println(vehiculos); + + vehiculos.forEach(System.out::println); + + System.out.println("\nQuito la moto"); + vehiculos.remove(moto); + vehiculos.forEach(System.out::println); + + coche = new Coche("Ford Fiesta", "Blanco"); + coche.setMatricula(matricula); + + System.out.println("\nAñado nuevo coche"); + vehiculos.add(coche); + vehiculos.forEach(System.out::println); + + System.out.println("\nQuito coche " + coche); + vehiculos.remove(coche); + vehiculos.forEach(System.out::println); + + } + +} diff --git a/src/ejemplos_uso/EjemploInterface.java b/src/ejemplos_uso/EjemploInterface.java new file mode 100644 index 0000000..ac80352 --- /dev/null +++ b/src/ejemplos_uso/EjemploInterface.java @@ -0,0 +1,22 @@ +package ejemplos_uso; + +import vehiculos.Arrancable; +import vehiculos.Moto; +import vehiculos.VehiculoConRuedas; + +public class EjemploInterface { + + public static void main(String[] args) { + Arrancable vcr = new VehiculoConRuedas() { + + @Override + public int getNumeroDeRuedas() { + // TODO Auto-generated method stub + return 0; + } + }; + + vcr.arrancar(); + } + +} diff --git a/src/ejemplos_uso/Igualdad.java b/src/ejemplos_uso/Igualdad.java new file mode 100644 index 0000000..1cd5ae8 --- /dev/null +++ b/src/ejemplos_uso/Igualdad.java @@ -0,0 +1,29 @@ +package ejemplos_uso; + +import vehiculos.Coche; +import vehiculos.Vehiculo; + +public class Igualdad { + + public static void main(String[] args) { + Coche coche1 = new Coche("Seat Ibiza", "Rojo"); + coche1.setMatricula("1234 BBB"); + Coche coche2 = new Coche("Seat Ibiza", "Rojo"); + coche2.setMatricula("1234 BBB"); + Vehiculo coche3 = coche1; + + // Igualdad + System.out.println("coche1 y coche2 son iguales: " + coche1.equals(coche2)); + System.out.println("Pinto coche2 de Negro"); + coche2.setColor("Negro"); + System.out.println("Los coches siguen siendo iguales: " + coche1.equals(coche2)); + System.out.println("Cambio la matrícula a coche2"); + coche2.setMatricula("5555 CCC"); + System.out.println("Los coches siguen siendo iguales: " + coche1.equals(coche2)); + + // Identidad + System.out.println("coche1 y coche2 son el mismo: " + (coche1 == coche2)); + System.out.println("coche1 y coche3 son el mismo: " + (coche3 == coche1)); + + } +} diff --git a/src/ejemplos_uso/Movible.java b/src/ejemplos_uso/Movible.java new file mode 100644 index 0000000..6a040ff --- /dev/null +++ b/src/ejemplos_uso/Movible.java @@ -0,0 +1,6 @@ +package ejemplos_uso; + +public interface Movible { + + +} diff --git a/src/vehiculos/Arrancable.java b/src/vehiculos/Arrancable.java new file mode 100644 index 0000000..cc8cb0c --- /dev/null +++ b/src/vehiculos/Arrancable.java @@ -0,0 +1,9 @@ +package vehiculos; + +public interface Arrancable { + + default void arrancar() { + System.out.println("Configuración por defecto en Interfaz Arrancable"); + } + +} diff --git a/src/vehiculos/Coche.java b/src/vehiculos/Coche.java index 34a57be..93752de 100644 --- a/src/vehiculos/Coche.java +++ b/src/vehiculos/Coche.java @@ -1,6 +1,6 @@ package vehiculos; -public class Coche extends Vehiculo { +public class Coche extends VehiculoConRuedas { private int numeroDeRuedas; private String matricula; @@ -84,4 +84,16 @@ public boolean equals(Object obj) { return false; return true; } + + @Override + public void arrancar() { + System.out.println("Coche arrancando"); + + } + + @Override + public int getNumeroDeRuedas() { + // TODO Auto-generated method stub + return numeroDeRuedas; + } } diff --git a/src/vehiculos/VehiculoConRuedas.java b/src/vehiculos/VehiculoConRuedas.java index 150804a..070ceb0 100644 --- a/src/vehiculos/VehiculoConRuedas.java +++ b/src/vehiculos/VehiculoConRuedas.java @@ -1,6 +1,13 @@ package vehiculos; -public abstract class VehiculoConRuedas extends Vehiculo { +public abstract class VehiculoConRuedas extends Vehiculo implements Arrancable{ + + + @Override + public void arrancar() { + System.out.println("Arrancando VehiculoConRuedas"); + + } public VehiculoConRuedas() { super(); @@ -16,4 +23,5 @@ public VehiculoConRuedas(String modelo, String color) { public String toString() { return super.toString() + ", " + getNumeroDeRuedas() + " ruedas"; } + } \ No newline at end of file From f0f9d44f76ac3174dd1d93b9273fe6b29585af48 Mon Sep 17 00:00:00 2001 From: Miguel Prada Date: Sat, 2 Jan 2021 20:39:33 +0100 Subject: [PATCH 04/10] Cambios 2-enero-21 --- src/com/github/commerce/Merchantable.java | 19 +++++++++ src/com/github/commerce/Product.java | 22 ++++++++++ src/ejemplos_uso/EjemploComparabale.java | 26 ++++++++++++ src/ejemplos_uso/EjemploOrdenacion.java | 35 ++++++++++++++++ src/ejemplos_uso/Movible.java | 6 --- src/ejemplos_uso/UsandoLibreria.java | 49 +++++++++++++++++++++++ src/vehiculos/CocheProducto.java | 38 ++++++++++++++++++ src/vehiculos/Comerciable.java | 6 +++ src/vehiculos/ProductExterno.java | 26 ++++++++++++ src/vehiculos/Vehiculo.java | 28 ++++++++++++- 10 files changed, 248 insertions(+), 7 deletions(-) create mode 100644 src/com/github/commerce/Merchantable.java create mode 100644 src/com/github/commerce/Product.java create mode 100644 src/ejemplos_uso/EjemploComparabale.java create mode 100644 src/ejemplos_uso/EjemploOrdenacion.java delete mode 100644 src/ejemplos_uso/Movible.java create mode 100644 src/ejemplos_uso/UsandoLibreria.java create mode 100644 src/vehiculos/CocheProducto.java create mode 100644 src/vehiculos/Comerciable.java create mode 100644 src/vehiculos/ProductExterno.java diff --git a/src/com/github/commerce/Merchantable.java b/src/com/github/commerce/Merchantable.java new file mode 100644 index 0000000..205db11 --- /dev/null +++ b/src/com/github/commerce/Merchantable.java @@ -0,0 +1,19 @@ +package com.github.commerce; + +public interface Merchantable { + + String DEFAULT_CURRENCY = "€"; + + static Double priceToDouble(Merchantable merchantable) { + return new Double(merchantable.getPrice()); + } + + String getDescription(); + float getPrice(); + + default String getString() { + return getDescription() + " (" + getPrice() + + DEFAULT_CURRENCY + ")"; + } + +} diff --git a/src/com/github/commerce/Product.java b/src/com/github/commerce/Product.java new file mode 100644 index 0000000..f65ff3b --- /dev/null +++ b/src/com/github/commerce/Product.java @@ -0,0 +1,22 @@ +package com.github.commerce; + +public class Product implements Merchantable{ + private String description; + private float price; + + @Override + public String getDescription() { + return description; + } + + @Override + public float getPrice() { + return price; + } + + public Product(String description, float price) { + this.description = description; + this.price = price; + } + +} diff --git a/src/ejemplos_uso/EjemploComparabale.java b/src/ejemplos_uso/EjemploComparabale.java new file mode 100644 index 0000000..88c8692 --- /dev/null +++ b/src/ejemplos_uso/EjemploComparabale.java @@ -0,0 +1,26 @@ +package ejemplos_uso; + +import java.util.Arrays; +import java.util.List; + +import vehiculos.*; + +public class EjemploComparabale { + + public static void main(String[] args) { + + List vehiculos = Arrays.asList( + new Coche("Gris", "Volvo"), + new Vehiculo("Triciclo", "Rosa"), + new Moto("Aprilla", "Azul") + ); + + vehiculos.forEach(System.out::println); + vehiculos.sort(null); + + System.out.println("\nLista ordenada (por modelo):"); + vehiculos.forEach(System.out::println); + + } + +} diff --git a/src/ejemplos_uso/EjemploOrdenacion.java b/src/ejemplos_uso/EjemploOrdenacion.java new file mode 100644 index 0000000..281d6c0 --- /dev/null +++ b/src/ejemplos_uso/EjemploOrdenacion.java @@ -0,0 +1,35 @@ +package ejemplos_uso; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import vehiculos.Coche; +import vehiculos.Moto; +import vehiculos.Vehiculo; +import vehiculos.VehiculoConRuedas; + +public class EjemploOrdenacion { + + public static void main(String[] args) { + // TODO Auto-generated method stub + List listaStrings = Arrays.asList("a", "c", "b", "ab"); + Collection strings = listaStrings; + System.out.println(strings); + + listaStrings.sort(null); + // strings.sort(); da error porque strings es del tipo collection, y no permite + // ordenar + System.out.println(listaStrings); + listaStrings.sort(Comparator.reverseOrder()); + System.out.println(listaStrings); + + ((List) strings).sort(null); // casteo + Collections.sort(listaStrings); // clase Collections + System.out.println(listaStrings); + + } + +} diff --git a/src/ejemplos_uso/Movible.java b/src/ejemplos_uso/Movible.java deleted file mode 100644 index 6a040ff..0000000 --- a/src/ejemplos_uso/Movible.java +++ /dev/null @@ -1,6 +0,0 @@ -package ejemplos_uso; - -public interface Movible { - - -} diff --git a/src/ejemplos_uso/UsandoLibreria.java b/src/ejemplos_uso/UsandoLibreria.java new file mode 100644 index 0000000..41500c6 --- /dev/null +++ b/src/ejemplos_uso/UsandoLibreria.java @@ -0,0 +1,49 @@ +package ejemplos_uso; + +import java.util.Arrays; +import java.util.Collection; + +import com.github.commerce.Merchantable; + +import vehiculos.CocheProducto; +import vehiculos.Comerciable; +import vehiculos.ProductExterno; + +public class UsandoLibreria { + + public static void main(String[] args) { + + ProductExterno productoExterno = new ProductExterno("CocheRaro", 25000f); + CocheProducto cocheProducto = new CocheProducto("Seat", "Blanco", 16000); + + System.out.println("Usando Comerciable"); + Collection productos = Arrays.asList( + productoExterno, + cocheProducto + ); + + + productos.forEach(System.out::println); + System.out.println(getValorTotal(productos)); + + System.out.println("\nUsando Merchantable"); + Collection merchantables = Arrays.asList( + productoExterno, + cocheProducto + ); + merchantables.forEach(System.out::println); + System.out.println(merchantables.stream().mapToDouble(Merchantable::priceToDouble).sum()); + + } + + private static float getValorTotal(Collection comerciables) { + return (float)comerciables.stream().mapToDouble(UsandoLibreria::toDouble).sum(); + } + + private static Double toDouble(Comerciable comerciable) { + return new Double(comerciable.getPrecio()); + } + + } + + diff --git a/src/vehiculos/CocheProducto.java b/src/vehiculos/CocheProducto.java new file mode 100644 index 0000000..76a9ba0 --- /dev/null +++ b/src/vehiculos/CocheProducto.java @@ -0,0 +1,38 @@ +package vehiculos; + +import com.github.commerce.Merchantable; + +public class CocheProducto extends Coche implements Comerciable, Merchantable { + + private float precio; + + @Override + public String getDescripcion() { + return getModelo(); + } + + @Override + public float getPrecio() { + return precio; + } + + public CocheProducto(String modelo, String color, float precio) { + super(modelo, color); + this.precio = precio; + } + + @Override + public String getDescription() { + return getDescripcion(); + } + + @Override + public float getPrice() { + return getPrecio(); + } + + public String toString(){ + return getString(); + } + +} diff --git a/src/vehiculos/Comerciable.java b/src/vehiculos/Comerciable.java new file mode 100644 index 0000000..cde4c43 --- /dev/null +++ b/src/vehiculos/Comerciable.java @@ -0,0 +1,6 @@ +package vehiculos; + +public interface Comerciable { + String getDescripcion(); + float getPrecio(); +} diff --git a/src/vehiculos/ProductExterno.java b/src/vehiculos/ProductExterno.java new file mode 100644 index 0000000..897b6c3 --- /dev/null +++ b/src/vehiculos/ProductExterno.java @@ -0,0 +1,26 @@ +package vehiculos; + +import com.github.commerce.Product; + +public class ProductExterno extends Product implements Comerciable { + + @Override + public String getDescripcion() { + return getDescription(); + } + + @Override + public float getPrecio() { + return getPrice(); + } + + public String toString() { + return getString(); + } + + + public ProductExterno(String description, float price) { + super(description, price); + } + +} diff --git a/src/vehiculos/Vehiculo.java b/src/vehiculos/Vehiculo.java index 0c8f65f..835cdde 100644 --- a/src/vehiculos/Vehiculo.java +++ b/src/vehiculos/Vehiculo.java @@ -1,6 +1,6 @@ package vehiculos; -public class Vehiculo { +public class Vehiculo implements Comparable { private static final String MODELO_NO_DISPONIBLE = "N/A"; protected String modelo; @@ -33,4 +33,30 @@ public String toString() { // return getModelo() + " (" + color + ")"; } + + @Override + public int compareTo(Vehiculo vehiculo) { + return getModelo().compareTo(vehiculo.getModelo()); + } + + +// public int compareTo(Vehiculo vehiculo) { +// // para ordenar por el tamaño de los carateres del modelo +// return getModelo().length() - (vehiculo.getModelo().length()); +// } + +// public int compareTo(Vehiculo vehiculo) { +// // para ordenar por el tamaño de los carateres del modelo +// int resultado = getModelo().length() - (vehiculo.getModelo().length()); +// if (resultado==0) { +// resultado = getColor().compareTo(vehiculo.getColor()); +// } +// /* en el caso de que el tamaño de caracteres del modelo y los colores sean iguales, puedo +// * seguir añadiendo más parámetros */ +// if (resultado == 0) { +// resultado = getColor().length() - (vehiculo.getColor().length()); +// } +// return resultado; +// } + } \ No newline at end of file From 05d07b8725ac56ac3c0bb25cbcb4cd50d58f50f5 Mon Sep 17 00:00:00 2001 From: Miguel Prada Date: Sun, 3 Jan 2021 20:44:26 +0100 Subject: [PATCH 05/10] Merge branch 'main' of https://github.com/DptoSIC/Vehiculos into main --- src/com/app/App.java | 41 ++++++++- src/com/tallerpepe/Presupuesto.java | 4 +- src/com/tallerpepe/Reparacion.java | 2 +- src/com/tallerpepe/Taller.java | 40 +++++++++ src/ejemplos_uso/EjemploAnonima.java | 103 ++++++----------------- src/ejemplos_uso/EjemploCollection.java | 25 +----- src/ejemplos_uso/EjemploInterface.java | 36 +++----- src/ejemplos_uso/EjemploOrdenacion.java | 55 +++--------- src/ejemplos_uso/EjemploPresupuesto.java | 24 +++--- src/ejemplos_uso/UsandoLibreria.java | 90 +++++--------------- src/vehiculos/Motor.java | 9 +- 11 files changed, 173 insertions(+), 256 deletions(-) create mode 100644 src/com/tallerpepe/Taller.java diff --git a/src/com/app/App.java b/src/com/app/App.java index 0056722..9f6cbd7 100644 --- a/src/com/app/App.java +++ b/src/com/app/App.java @@ -1,9 +1,48 @@ package com.app; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Collection; + +import com.tallerpepe.Presupuesto; +import com.tallerpepe.Reparable; +import com.tallerpepe.Reparacion; +import com.tallerpepe.Repuesto; + +import vehiculos.Coche; + public class App { public static void main(String[] args) { - // TODO Auto-generated method stub + + // ingreso de un vehiculo al taller, estimación de horas de la reparación y presupuesto + Repuesto filtroAceite = new Repuesto("Filtro aceite motor", 10.50f); + Repuesto aceiteMotor = new Repuesto("Aceite motor diesel 5L", 20.60f); + Repuesto filtroAire = new Repuesto("Filtro aire", 8.50f); + Repuesto pastillaFreno = new Repuesto("Pastilla freno", 9.70f); + Repuesto limpiaParabrisas = new Repuesto("Limpiaparabrisas 2L", 3.50f); + Reparacion revision = new Reparacion(2f, filtroAceite, aceiteMotor, filtroAceite, filtroAire, pastillaFreno, + pastillaFreno, limpiaParabrisas); + revision.setGarantia(false); + Collection reparaciones = new ArrayList<>(); + reparaciones.add(revision); + Reparable cocheRenault = new Reparable() { + + @Override + public Collection getReparacionesPendientes() { + return reparaciones; + } + + @Override + public LocalDate getFechaEntrada() { + return LocalDate.of(2021, 01, 04); + } + }; + + Presupuesto presupuestoRenault = new Presupuesto(cocheRenault); + System.out.println(presupuestoRenault.calcularTextoPresupuesto(8.90f)); + + } diff --git a/src/com/tallerpepe/Presupuesto.java b/src/com/tallerpepe/Presupuesto.java index 61ea48d..c1b87a3 100644 --- a/src/com/tallerpepe/Presupuesto.java +++ b/src/com/tallerpepe/Presupuesto.java @@ -60,9 +60,9 @@ public String calcularTextoPresupuesto(float precioManoObra) { texto += getReparable(); // Ahora pongo cara reparacion en una linea for (Reparacion reparacion : getReparaciones()) { - texto += "\n" + reparacion; // "\n" para dalto de linea + texto += "\n" + reparacion; // "\n" para salto de linea } - texto += "\nPrecio Total: " + getPrecioTotal(precioManoObra); + texto += "\nPrecio Total: " + getPrecioTotal(precioManoObra) + "€"; return texto; } diff --git a/src/com/tallerpepe/Reparacion.java b/src/com/tallerpepe/Reparacion.java index 6837e41..65581f9 100644 --- a/src/com/tallerpepe/Reparacion.java +++ b/src/com/tallerpepe/Reparacion.java @@ -36,7 +36,7 @@ public Reparacion(float horasManoObra, Repuesto... repuestos) { @Override public String toString() { - return "Repuestos=" + repuestos + " (" + horasManoObra + "hs)"; + return "Repuestos=" + getRepuestos() + " (" + getHorasManoObra() + "hs)"; } diff --git a/src/com/tallerpepe/Taller.java b/src/com/tallerpepe/Taller.java new file mode 100644 index 0000000..d0065c1 --- /dev/null +++ b/src/com/tallerpepe/Taller.java @@ -0,0 +1,40 @@ + +package com.tallerpepe; + +import java.util.Collection; + +public class Taller { + + private Collection listaReparables; + private Collection repuestos; + private Collection hojasTrabajo; + + public Collection getListaReparables() { + return listaReparables; + } + + public Collection getRepuestos() { + return repuestos; + } + + public Collection getHojasTrabajo() { + return hojasTrabajo; + } + + public Taller(Collection listaReparables, Collection repuestos, + Collection hojasTrabajo) { + super(); + this.listaReparables = listaReparables; + this.repuestos = repuestos; + this.hojasTrabajo = hojasTrabajo; + } + + @Override + public String toString() { + return "Lista de Vehiculos: " + getListaReparables() + ", Repuestos: " + getRepuestos() + + ", Hojas de Trabajo: " + getHojasTrabajo(); + } + + + +} diff --git a/src/ejemplos_uso/EjemploAnonima.java b/src/ejemplos_uso/EjemploAnonima.java index 7921884..9801b22 100644 --- a/src/ejemplos_uso/EjemploAnonima.java +++ b/src/ejemplos_uso/EjemploAnonima.java @@ -1,32 +1,15 @@ package ejemplos_uso; -<<<<<<< HEAD -======= -import java.util.Comparator; - ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 -import vehiculos.Coche; import vehiculos.Moto; import vehiculos.Vehiculo; import vehiculos.VehiculoConRuedas; public class EjemploAnonima { -<<<<<<< HEAD - public static void main(String[] args) { - Vehiculo original = new Vehiculo("Original", null); - System.out.println(original.getClass()); - - Vehiculo anonimo = new Vehiculo("Anonimo", null) { - String ancla = "Ancla standard"; - - @Override - public String getColor() { - // TODO Auto-generated method stub -======= private static String colorValido2 = "Verde"; - + public static void main(String[] args) { + Vehiculo original = new Vehiculo("Original", null); System.out.println(original.getClass()); @@ -35,20 +18,22 @@ public static void main(String[] args) { @Override public String getColor() { ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 return super.getColor() + "*"; } @Override public String toString() { -<<<<<<< HEAD - // TODO Auto-generated method stub return super.toString() + " " + ancla; } - + + @Override + public int getNumeroDeRuedas() { + return 0; + } + }; System.out.println(anonimo); - + VehiculoConRuedas triciclo = new VehiculoConRuedas("Fisher-Price", "Multicolor") { @Override @@ -63,7 +48,7 @@ public int getNumeroDeRuedas() { @Override public void setColor(String color) { if (!(color.equals("Rojo") || color.equals("Negro"))) { - System.out.println("No se permite ese color para " + modelo); + System.out.println("No se permite ese color para " + getModelo()); } } }; @@ -85,44 +70,10 @@ public String toString() { }; System.out.println(barco); - Coche cocheConPin = new Coche() { - - @Override - public String toString() { - return "El código secreto es: " + miCodigoSecreto; - } - }; - - System.out.println(cocheConPin); System.out.println(triciclo.getClass()); System.out.println(harley.getClass()); System.out.println(barco.getClass()); - } - - } - -======= - return super.toString() + " " + ancla; - } - - @Override - public int getNumeroDeRuedas() { - return 0; - } - - }; - - VehiculoConRuedas triciclo = new VehiculoConRuedas("Fisher-Price", "Multicolor") { - int numeroRuedas = 0; - - @Override - public int getNumeroDeRuedas() { - return numeroRuedas++; - } - - }; - System.out.println(anonimo.getClass()); System.out.println(original); @@ -131,26 +82,24 @@ public int getNumeroDeRuedas() { System.out.println(triciclo); System.out.println(triciclo); System.out.println(triciclo); - + String colorValido1 = "Azul"; // String colorValido2 = "Verde"; - - Moto harley = new Moto("Harley-Davidson", "Rojo") { - - @Override - public void setColor(String color) { - if(!(color.equals(colorValido1) || color.equals(colorValido2))) { - System.out.println("No se permite ese color para " + getModelo()); - } - else { - super.setColor(color); - } - } - - }; - harley.setColor("Verde"); - System.out.println(harley); + + Moto harley2 = new Moto("Harley-Davidson", "Rojo") { + + @Override + public void setColor(String color) { + if (!(color.equals(colorValido1) || color.equals(colorValido2))) { + System.out.println("No se permite ese color para " + getModelo()); + } else { + super.setColor(color); + } + } + + }; + harley.setColor("Verde"); + System.out.println(harley2); } } ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 diff --git a/src/ejemplos_uso/EjemploCollection.java b/src/ejemplos_uso/EjemploCollection.java index f3fd261..cb88ff2 100644 --- a/src/ejemplos_uso/EjemploCollection.java +++ b/src/ejemplos_uso/EjemploCollection.java @@ -3,53 +3,34 @@ import java.util.ArrayList; import java.util.Collection; -<<<<<<< HEAD import vehiculos.*; -======= -import vehiculos.Coche; -import vehiculos.Moto; -import vehiculos.Vehiculo; ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 public class EjemploCollection { public static void main(String[] args) { + String matricula = "1234ABC"; Coche coche = new Coche("Ford Fiesta", "Rojo"); // ¿por que no usar variable Vehiculo? coche.setMatricula(matricula); Vehiculo moto = new Moto("Suzuki", "Verde"); -<<<<<<< HEAD - - Collection vehiculos = new ArrayList<>(); - vehiculos.add(coche); - vehiculos.add(moto); - System.out.println(vehiculos); - -======= Collection vehiculos = new ArrayList<>(); // Agrego 2 vehiculos vehiculos.add(coche); vehiculos.add(moto); System.out.println(vehiculos); ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 vehiculos.forEach(System.out::println); System.out.println("\nQuito la moto"); vehiculos.remove(moto); vehiculos.forEach(System.out::println); -<<<<<<< HEAD coche = new Coche("Ford Fiesta", "Blanco"); coche.setMatricula(matricula); -======= Coche aux = coche; - coche = new Coche("Ford Fiesta", "Blanco"); - coche.setMatricula(matricula); System.out.println(coche.equals(aux)); ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 System.out.println("\nAñado nuevo coche"); vehiculos.add(coche); vehiculos.forEach(System.out::println); @@ -57,10 +38,6 @@ public static void main(String[] args) { System.out.println("\nQuito coche " + coche); vehiculos.remove(coche); vehiculos.forEach(System.out::println); -<<<<<<< HEAD - -======= ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 } } diff --git a/src/ejemplos_uso/EjemploInterface.java b/src/ejemplos_uso/EjemploInterface.java index d5b7415..232062b 100644 --- a/src/ejemplos_uso/EjemploInterface.java +++ b/src/ejemplos_uso/EjemploInterface.java @@ -1,23 +1,16 @@ package ejemplos_uso; import vehiculos.Arrancable; -<<<<<<< HEAD -import vehiculos.Moto; -======= import vehiculos.Coche; -import vehiculos.Moto; import vehiculos.Vehiculo; ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 import vehiculos.VehiculoConRuedas; public class EjemploInterface { public static void main(String[] args) { -<<<<<<< HEAD -======= - + Object ordenador = new Arrancable() { - + @Override public void arrancar() { System.out.println("Encendido"); @@ -27,38 +20,34 @@ public void arrancar() { Coche coche = new Coche(); Arrancable a = coche; Vehiculo v = coche; - + Arrancable persona = new Arrancable() { - + @Override public void arrancar() { System.out.println("Me tomo un café"); } }; - ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 + Arrancable vcr = new VehiculoConRuedas() { - + @Override public int getNumeroDeRuedas() { // TODO Auto-generated method stub return 0; } }; - -<<<<<<< HEAD + vcr.arrancar(); - } -======= - Arrancable[] arrancables = { (Arrancable)ordenador, coche, persona, new Coche(), vcr }; + Arrancable[] arrancables = { (Arrancable) ordenador, coche, persona, new Coche(), vcr }; arrancarTodos(arrancables); - + System.out.println(coche.distanciaRecorrida(3.5f)); - + Movible tortuga = new Movible() { - + @Override public float getVelocidad() { return 0.2f; @@ -71,7 +60,6 @@ private static void arrancarTodos(Arrancable[] arrancables) { for (Arrancable arrancable : arrancables) { arrancable.arrancar(); } - + } ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 } diff --git a/src/ejemplos_uso/EjemploOrdenacion.java b/src/ejemplos_uso/EjemploOrdenacion.java index e3d13b1..9da1a9b 100644 --- a/src/ejemplos_uso/EjemploOrdenacion.java +++ b/src/ejemplos_uso/EjemploOrdenacion.java @@ -1,36 +1,20 @@ package ejemplos_uso; -<<<<<<< HEAD -======= -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.ArrayList; ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.List; -<<<<<<< HEAD import vehiculos.Coche; import vehiculos.Moto; import vehiculos.Vehiculo; -import vehiculos.VehiculoConRuedas; -======= -import java.util.stream.Collectors; - -import vehiculos.Coche; -import vehiculos.Moto; -import vehiculos.Motor; -import vehiculos.Vehiculo; ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 public class EjemploOrdenacion { public static void main(String[] args) { -<<<<<<< HEAD - // TODO Auto-generated method stub + List listaStrings = Arrays.asList("a", "c", "b", "ab"); Collection strings = listaStrings; System.out.println(strings); @@ -46,27 +30,16 @@ public static void main(String[] args) { Collections.sort(listaStrings); // clase Collections System.out.println(listaStrings); - } - -======= - List listaStrings = Arrays.asList("a", "c", "b", "ab"); - Collection strings = listaStrings; - System.out.println(strings); - - listaStrings.sort(null); - // strings.sort() // Error -// ((List)strings).sort(null); - listaStrings.sort(Comparator.reverseOrder()); Collection listaOrdenada = ordenar(strings); - + System.out.println(strings); System.out.println(listaOrdenada); - + List vehiculos = new ArrayList<>(); vehiculos.add(new Coche("B", "Rojo")); vehiculos.add(new Coche("C", "Blanco")); vehiculos.add(new Coche("A", "Verde")); - + Comparator comparador = new Comparator() { @Override @@ -74,30 +47,27 @@ public int compare(Vehiculo v1, Vehiculo v2) { return v1.getColor().compareTo(v2.getColor()); } }; - + // En lambda es: // comparador = (v1, v2) -> v1.getColor().compareTo(v2.getColor()); - + System.out.println(vehiculos); vehiculos.sort(null); System.out.println(vehiculos); - - vehiculos = Arrays.asList( - new Coche("Volvo", "Gris"), - new Vehiculo("Tricico", "Rosa"), - new Moto("Aprilla", "Azul") - ); + + vehiculos = Arrays.asList(new Coche("Volvo", "Gris"), new Vehiculo("Tricico", "Rosa"), + new Moto("Aprilla", "Azul")); vehiculos.forEach(System.out::println); - vehiculos.sort(null);//Vehiculo.COMPARADOR_LONGITUD_MODELO); + vehiculos.sort(null);// Vehiculo.COMPARADOR_LONGITUD_MODELO); System.out.println("\nLista ordenada (por modelo):"); vehiculos.forEach(System.out::println); - + // Coche c = new Coche(null, "B", 4, new Motor("C", 90.4f)); // System.out.println(c); // System.out.println(c.getMotor()); - + // try { // Method method = c.getClass().getDeclaredMethod("getModelo"); // System.out.println(method.invoke(c)); @@ -111,5 +81,4 @@ public static List ordenar(Collection collection) { list.sort(null); return list; } ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 } diff --git a/src/ejemplos_uso/EjemploPresupuesto.java b/src/ejemplos_uso/EjemploPresupuesto.java index a3c483f..66bf25d 100644 --- a/src/ejemplos_uso/EjemploPresupuesto.java +++ b/src/ejemplos_uso/EjemploPresupuesto.java @@ -1,8 +1,8 @@ package ejemplos_uso; +import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; -import java.util.Date; import java.util.List; import com.tallerpepe.Presupuesto; @@ -13,34 +13,34 @@ public class EjemploPresupuesto { public static void main(String[] args) { + Repuesto rueda = new Repuesto("Rueda", 100f); Repuesto valvula = new Repuesto("Valvula", 5f); - - List reparaciones = Arrays.asList( - new Reparacion(.5f, rueda, valvula), // Cambio rueda + + List reparaciones = Arrays.asList(new Reparacion(.5f, rueda, valvula), // Cambio rueda new Reparacion(.4f) // Paralelo - ); + ); // Pongo en garantia la primera reparacion reparaciones.get(0).setGarantia(true); - + Reparable reparable = new Reparable() { - + @Override public Collection getReparacionesPendientes() { return reparaciones; } - + @Override - public Date getFechaEntrada() { - return new Date(); + public LocalDate getFechaEntrada() { + return LocalDate.now(); } - + @Override public String toString() { return "Mi Reparable (pendiente: " + getReparacionesPendientes().size() + ")"; } }; - + Presupuesto presupuesto = new Presupuesto(reparable); System.out.println(presupuesto.calcularTextoPresupuesto(20f)); } diff --git a/src/ejemplos_uso/UsandoLibreria.java b/src/ejemplos_uso/UsandoLibreria.java index bbef62c..a64f8ad 100644 --- a/src/ejemplos_uso/UsandoLibreria.java +++ b/src/ejemplos_uso/UsandoLibreria.java @@ -2,13 +2,7 @@ import java.util.Arrays; import java.util.Collection; - import com.github.commerce.Merchantable; -<<<<<<< HEAD -======= -import com.github.commerce.Product; ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 - import vehiculos.CocheProducto; import vehiculos.Comerciable; import vehiculos.ProductExterno; @@ -16,73 +10,34 @@ public class UsandoLibreria { public static void main(String[] args) { -<<<<<<< HEAD - - ProductExterno productoExterno = new ProductExterno("CocheRaro", 25000f); - CocheProducto cocheProducto = new CocheProducto("Seat", "Blanco", 16000); - - System.out.println("Usando Comerciable"); - Collection productos = Arrays.asList( - productoExterno, - cocheProducto - ); - - - productos.forEach(System.out::println); - System.out.println(getValorTotal(productos)); - - System.out.println("\nUsando Merchantable"); - Collection merchantables = Arrays.asList( - productoExterno, - cocheProducto - ); - merchantables.forEach(System.out::println); - System.out.println(merchantables.stream().mapToDouble(Merchantable::priceToDouble).sum()); - - } - - private static float getValorTotal(Collection comerciables) { - return (float)comerciables.stream().mapToDouble(UsandoLibreria::toDouble).sum(); - } - - private static Double toDouble(Comerciable comerciable) { - return new Double(comerciable.getPrecio()); - } - - } - -======= ProductExterno productoExterno = new ProductExterno("CocheRaro", 25000f); CocheProducto cocheProducto = new CocheProducto("Seat", "Blanco", 16000); System.out.println("Usando Comerciable"); - Collection productos = Arrays.asList(productoExterno, cocheProducto, - new Comerciable() { - - @Override - public float getPrecio() { - return 1000000; - } - - @Override - public String getDescripcion() { - return "Sin descrpicion"; - } - }); + + Collection productos = Arrays.asList(productoExterno, cocheProducto, new Comerciable() { + + @Override + public float getPrecio() { + return 1000000; + } + + @Override + public String getDescripcion() { + return "Sin descrpicion"; + } + }); productos.forEach(System.out::println); System.out.println(getValorTotal(productos)); - + // Collection coches = Arrays.asList(cocheProducto); // System.out.println(getValorTotal(coches)); sell(cocheProducto); - + System.out.println("\nUsando Merchantable"); - Collection merchantables = Arrays.asList( - productoExterno, - cocheProducto - ); + Collection merchantables = Arrays.asList(productoExterno, cocheProducto); merchantables.forEach(System.out::println); // System.out.println(merchantables.stream().mapToDouble(Merchantable::priceToDouble).sum()); System.out.println(getValorTotal2(merchantables)); @@ -96,7 +51,7 @@ private static float getValorTotal(Collection comerciables) { } return resultado; } - + private static float getValorTotal2(Collection merchantables) { // return (float) comerciables.stream().mapToDouble(UsandoLibreria::toDouble).sum(); float resultado = 0; @@ -106,10 +61,11 @@ private static float getValorTotal2(Collection merchantables) { return resultado; } -// private static Double toDouble(Comerciable comerciable) { -// return new Double(comerciable.getPrecio()); -// } + private static Double toDouble(Comerciable comerciable) { + return new Double(comerciable.getPrecio()); + } - public static boolean sell(Merchantable p) {return false;} + public static boolean sell(Merchantable p) { + return false; + } } ->>>>>>> 114b3b5d3e2ef6afa61796fa73e9ab6a11ea9c92 diff --git a/src/vehiculos/Motor.java b/src/vehiculos/Motor.java index 59a111d..b1cfd24 100644 --- a/src/vehiculos/Motor.java +++ b/src/vehiculos/Motor.java @@ -4,11 +4,11 @@ public class Motor { String modelo; float potencia; // CV - + public String getModelo() { return modelo; } - + public float getPotencia() { return potencia; } @@ -21,8 +21,7 @@ public Motor(String modelo, float potencia) { @Override public String toString() { - return "Motor [modelo=" + modelo + ", potencia=" + potencia + "]"; + return "Motor: " + getModelo() + ", Potencia: " + getPotencia(); } - - + } From 88364646b7c7465fc4d4687091e8189a910f5312 Mon Sep 17 00:00:00 2001 From: Miguel Prada Date: Sun, 3 Jan 2021 20:50:57 +0100 Subject: [PATCH 06/10] "trabajando con el taller, 03/01/21" --- src/com/app/App.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/app/App.java b/src/com/app/App.java index 9f6cbd7..04465ed 100644 --- a/src/com/app/App.java +++ b/src/com/app/App.java @@ -9,7 +9,6 @@ import com.tallerpepe.Reparacion; import com.tallerpepe.Repuesto; -import vehiculos.Coche; public class App { From b62a5b3f5b0b5e99d5ab8353585a77b02c4cf577 Mon Sep 17 00:00:00 2001 From: Miguel Prada Date: Thu, 7 Jan 2021 20:46:21 +0100 Subject: [PATCH 07/10] =?UTF-8?q?A=C3=B1adiendo=20diagnosis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Diagrama_clases_Taller.pdf | Bin 0 -> 46091 bytes src/com/app/App.java | 104 +++++++++++++++------ src/com/tallerpepe/Presupuesto.java | 4 +- src/com/tallerpepe/Reparable.java | 4 +- src/com/tallerpepe/Reparacion.java | 49 ++++++++-- src/com/tallerpepe/Taller.java | 112 ++++++++++++++++++++--- src/ejemplos_uso/EjemploPresupuesto.java | 3 +- src/vehiculos/Vehiculo.java | 30 +++++- 8 files changed, 250 insertions(+), 56 deletions(-) create mode 100644 Diagrama_clases_Taller.pdf diff --git a/Diagrama_clases_Taller.pdf b/Diagrama_clases_Taller.pdf new file mode 100644 index 0000000000000000000000000000000000000000..24d4431d0ebac8d9207fed20d46356fb7750cdb2 GIT binary patch literal 46091 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
~&Of0aGmuwxjkzu-hJu)95+}S(6?6M{+@+rK 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 reparaciones = new ArrayList<>(); - reparaciones.add(revision); - Reparable cocheRenault = new Reparable() { - - @Override - public Collection getReparacionesPendientes() { - return reparaciones; - } - - @Override - public LocalDate getFechaEntrada() { - return LocalDate.of(2021, 01, 04); - } - }; - + Reparacion revision1 = new Reparacion(2f, filtroAceite, aceiteMotor, filtroAire, limpiaParabrisas); + Reparacion revision2 = new Reparacion(1.20f, pastillaFreno); + Reparacion cambioRuedasCoche = new Reparacion(2.30f, ruedaCoche, ruedaCoche, ruedaCoche, ruedaCoche); + Reparacion cambioRuedasHarley = new Reparacion(1.20f, ruedaHarley, ruedaHarley); + + Coche cocheRenault = new Coche("Renault 21", "verde"); + cocheRenault.setMatricula("2153BNR"); + cocheRenault.getReparacionesPendientes().add(revision1); + cocheRenault.getReparacionesPendientes().get(0).setGarantia(false); + cocheRenault.getReparacionesPendientes().add(cambioRuedasCoche); + cocheRenault.getReparacionesPendientes().get(1).setGarantia(false); + cocheRenault.setFechaEntrada(LocalDate.of(2021, 01, 05)); + + Moto harley1 = new Moto("HARLEY DAVIDSON", "negro"); + harley1.getReparacionesPendientes().add(revision2); + harley1.getReparacionesPendientes().get(0).setGarantia(true); + harley1.getReparacionesPendientes().add(cambioRuedasHarley); + harley1.getReparacionesPendientes().get(1).setGarantia(false); + harley1.setFechaEntrada(LocalDate.of(2021, 01, 05)); + + Taller taller1 = new Taller(cocheRenault, harley1); +// taller1.getListaReparables().add(cocheRenault); +// taller1.getListaReparables().add(harley1); + Presupuesto presupuestoRenault = new Presupuesto(cocheRenault); System.out.println(presupuestoRenault.calcularTextoPresupuesto(8.90f)); - - + Presupuesto presupuestoHarley = new Presupuesto(harley1); + System.out.println(presupuestoHarley.calcularTextoPresupuesto(7.50f)); + + /* + * El turno para reparar los vehículos los dará en primer lugar la existencia de + * piezas de repuesto para reparar todas las averías, después la fecha de + * entrada del vehículo al taller y finalmente el menor tiempo de reparación + * estimado. + */ + + taller1.getAlmacenRepuestos().put(limpiaParabrisas, 2); + taller1.getAlmacenRepuestos().put(pastillaFreno, 1); + taller1.getAlmacenRepuestos().put(filtroAire, 3); + taller1.getAlmacenRepuestos().put(aceiteMotor, 1); + taller1.getAlmacenRepuestos().put(filtroAceite, 2); + taller1.getAlmacenRepuestos().put(ruedaHarley, 0); + taller1.getAlmacenRepuestos().put(ruedaCoche, 3); + + System.out.println("\nAlmacén de Repuestos:\n" + taller1.getAlmacenRepuestos().toString()); + System.out.println("\nCálculo del turno de reparación:"); + taller1.calcularTurnoReparacion(taller1.getListaReparables()); + taller1.getListaReparables().forEach(System.out::println); + + /* + * La reparación tendrá una fecha de entrega del vehículo y tiene un periodo de + * garantía de un año. En caso de surgir la misma avería en menos de un año, el + * taller reparará dicha avería sin coste para el cliente a menos que en la + * diagnosis de detecte algún tipo de mal uso o fraude. + */ + cambioRuedasCoche.setFechaEntregaReparable(LocalDate.of(2020, 01, 01)); + cambioRuedasCoche.setFechaFinGarantiaReparacion(); + cambioRuedasHarley.setFechaEntregaReparable(LocalDate.of(2020, 01, 03)); + cambioRuedasHarley.setFechaFinGarantiaReparacion(); + revision1.setFechaEntregaReparable(LocalDate.of(2020, 11, 10)); + revision1.setFechaFinGarantiaReparacion(); + revision1.setMalUso(true); + revision2.setFechaEntregaReparable(LocalDate.of(2020, 10, 02)); + revision2.setFechaFinGarantiaReparacion(); + revision2.setMalUso(true); + float precioReparacionCoche = taller1.calcularPrecioReparaciones(cocheRenault); + float precioReparacionHarley = taller1.calcularPrecioReparaciones(harley1); + System.out + .println("\nEl precio de la reparacion del Coche es: " + String.format("%.2f€", precioReparacionCoche)); + System.out.println( + "\nEl precio de la reparacion de la harley es: " + String.format("%.2f€", precioReparacionHarley)); } diff --git a/src/com/tallerpepe/Presupuesto.java b/src/com/tallerpepe/Presupuesto.java index c1b87a3..01e4efe 100644 --- a/src/com/tallerpepe/Presupuesto.java +++ b/src/com/tallerpepe/Presupuesto.java @@ -56,13 +56,13 @@ private static float getPrecioPara(Collection repuestos) { } public String calcularTextoPresupuesto(float precioManoObra) { - String texto = "Presupuesto para:\n"; + String texto = "\nPresupuesto para:\n"; texto += getReparable(); // Ahora pongo cara reparacion en una linea for (Reparacion reparacion : getReparaciones()) { texto += "\n" + reparacion; // "\n" para salto de linea } - texto += "\nPrecio Total: " + getPrecioTotal(precioManoObra) + "€"; + texto += "\nPrecio Total: " + String.format("%.2f €", getPrecioTotal(precioManoObra)); return texto; } diff --git a/src/com/tallerpepe/Reparable.java b/src/com/tallerpepe/Reparable.java index f6ad07e..79c4244 100644 --- a/src/com/tallerpepe/Reparable.java +++ b/src/com/tallerpepe/Reparable.java @@ -1,11 +1,11 @@ package com.tallerpepe; import java.time.LocalDate; -import java.util.Collection; +import java.util.List; public interface Reparable { LocalDate getFechaEntrada(); - Collection getReparacionesPendientes(); + List getReparacionesPendientes(); } diff --git a/src/com/tallerpepe/Reparacion.java b/src/com/tallerpepe/Reparacion.java index 65581f9..8bc48a8 100644 --- a/src/com/tallerpepe/Reparacion.java +++ b/src/com/tallerpepe/Reparacion.java @@ -1,21 +1,55 @@ package com.tallerpepe; +import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; public class Reparacion { - public enum Tipo { MOTOR, CHAPA }; - + public enum Tipo { + MOTOR, CHAPA + }; + Tipo tipo; private Collection repuestos; private float horasManoObra; private boolean garantia; - + private LocalDate fechaEntregaReparable; + private LocalDate fechaFinGarantiaReparacion; + private boolean malUso = false; + + public boolean isMalUso() { + return malUso; + } + + public void setMalUso(boolean malUso) { + this.malUso = malUso; + } + + public LocalDate getFechaEntregaReparable() { + return fechaEntregaReparable; + } + + public void setFechaEntregaReparable(LocalDate fechaEntregaReparable) { + this.fechaEntregaReparable = fechaEntregaReparable; + } + + public LocalDate getFechaFinGarantiaReparacion() { + return fechaFinGarantiaReparacion; + } + + public void setFechaFinGarantiaReparacion() { + if (getFechaEntregaReparable() == null) { + System.err.println("La reparación no tiene fecha de entrega"); + } else { + this.fechaFinGarantiaReparacion = getFechaEntregaReparable().plusYears(1); + } + } + public Collection getRepuestos() { return repuestos; } - + public float getHorasManoObra() { return horasManoObra; } @@ -23,11 +57,11 @@ public float getHorasManoObra() { public boolean isGarantia() { return garantia; } - + public void setGarantia(boolean garantia) { this.garantia = garantia; } - + public Reparacion(float horasManoObra, Repuesto... repuestos) { super(); this.repuestos = Arrays.asList(repuestos); @@ -38,6 +72,5 @@ public Reparacion(float horasManoObra, Repuesto... repuestos) { public String toString() { return "Repuestos=" + getRepuestos() + " (" + getHorasManoObra() + "hs)"; } - - + } diff --git a/src/com/tallerpepe/Taller.java b/src/com/tallerpepe/Taller.java index d0065c1..c367080 100644 --- a/src/com/tallerpepe/Taller.java +++ b/src/com/tallerpepe/Taller.java @@ -1,40 +1,128 @@ package com.tallerpepe; -import java.util.Collection; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class Taller { - private Collection listaReparables; - private Collection repuestos; - private Collection hojasTrabajo; + private List listaReparables; + private Map almacenRepuestos; + private List hojasTrabajo; - public Collection getListaReparables() { + public List getListaReparables() { return listaReparables; } - public Collection getRepuestos() { - return repuestos; + public Map getAlmacenRepuestos() { + return almacenRepuestos; } - public Collection getHojasTrabajo() { + public List getHojasTrabajo() { return hojasTrabajo; } - public Taller(Collection listaReparables, Collection repuestos, - Collection hojasTrabajo) { + public Taller() { + this(new ArrayList<>(), new HashMap<>(), new ArrayList<>()); +// listaReparables = new ArrayList<>(); +// almacenRepuestos = new HashMap<>(); +// hojasTrabajo = new ArrayList<>(); + } + + public Taller(Reparable... reparables) { + this.listaReparables = Arrays.asList(reparables); + almacenRepuestos = new HashMap<>(); + hojasTrabajo = new ArrayList<>(); + + } + + public Taller(List listaReparables, Map almacenRepuestos, + List hojasTrabajo) { super(); this.listaReparables = listaReparables; - this.repuestos = repuestos; + this.almacenRepuestos = almacenRepuestos; this.hojasTrabajo = hojasTrabajo; } @Override public String toString() { - return "Lista de Vehiculos: " + getListaReparables() + ", Repuestos: " + getRepuestos() + return "Lista de Vehiculos: " + getListaReparables() + ", Almacén de Repuestos: " + getAlmacenRepuestos() + ", Hojas de Trabajo: " + getHojasTrabajo(); } + + public List calcularTurnoReparacion(List reparables) { + Collections.sort(reparables, new Comparator() { + + @Override + public int compare(Reparable reparable1, Reparable reparable2) { + int resultado = comprobarFaltantesRepuestos(reparable1) - comprobarFaltantesRepuestos(reparable2); + if (resultado == 0) { + resultado = reparable1.getFechaEntrada().compareTo(reparable2.getFechaEntrada()); + } + if (resultado == 0) { + resultado = calcularTiempoReparacion(reparable1) - calcularTiempoReparacion(reparable2); + } + return resultado; + } + }); + return reparables; + } + + public int calcularTiempoReparacion(Reparable reparable) { + int tiempo = 0; + for (Reparacion reparacion : reparable.getReparacionesPendientes()) { + tiempo += reparacion.getHorasManoObra(); + } + return tiempo; + } + + public int comprobarFaltantesRepuestos(Reparable reparable) { + int contador = 0; + for (Reparacion reparacion : reparable.getReparacionesPendientes()) { + for (Repuesto repuesto : reparacion.getRepuestos()) { + if (!comprobarRepuestosAlmacen(repuesto)) { + contador++; + } + } + } + return contador; + } + + public boolean comprobarRepuestosAlmacen(Repuesto repuesto) { + return (getAlmacenRepuestos().get(repuesto) > 0); + } + public boolean comprobarMalUso(Reparacion reparacion) { + boolean resultado = false; + if (reparacion.isMalUso()) { + resultado = true; + } + return resultado; + } + + public boolean comprobarGarantiaReparacion(Reparacion reparacion) { + boolean resultado = false; + if (reparacion.getFechaFinGarantiaReparacion().isAfter(LocalDate.now())) { + resultado = true; + } + return resultado; + } + public float calcularPrecioReparaciones(Reparable reparable) { + float precioReparaciones = 0; + Presupuesto presupuesto = new Presupuesto(reparable); + for (Reparacion reparacion : reparable.getReparacionesPendientes()) { + if (!comprobarGarantiaReparacion(reparacion) || comprobarMalUso(reparacion)) { + precioReparaciones+= presupuesto.getPrecioTotal(10.50f); + } + } + return precioReparaciones; + } } diff --git a/src/ejemplos_uso/EjemploPresupuesto.java b/src/ejemplos_uso/EjemploPresupuesto.java index 66bf25d..aeb9851 100644 --- a/src/ejemplos_uso/EjemploPresupuesto.java +++ b/src/ejemplos_uso/EjemploPresupuesto.java @@ -2,7 +2,6 @@ import java.time.LocalDate; import java.util.Arrays; -import java.util.Collection; import java.util.List; import com.tallerpepe.Presupuesto; @@ -26,7 +25,7 @@ public static void main(String[] args) { Reparable reparable = new Reparable() { @Override - public Collection getReparacionesPendientes() { + public List getReparacionesPendientes() { return reparaciones; } diff --git a/src/vehiculos/Vehiculo.java b/src/vehiculos/Vehiculo.java index 37053f6..9026abd 100644 --- a/src/vehiculos/Vehiculo.java +++ b/src/vehiculos/Vehiculo.java @@ -1,10 +1,18 @@ package vehiculos; +import java.time.LocalDate; +import java.util.ArrayList; import java.util.Comparator; +import java.util.List; + +import com.tallerpepe.Reparable; +import com.tallerpepe.Reparacion; + import ejemplos_uso.Acelerable; -public class Vehiculo implements Acelerable, Comparable { +public class Vehiculo implements Acelerable, Reparable, Comparable { + private List reparacionesPendientes = new ArrayList<>(); private static final String MODELO_NO_DISPONIBLE = "N/A"; public static final Comparator COMPARADOR_LONGITUD_MODELO = new Comparator() { @Override @@ -12,10 +20,16 @@ public int compare(Vehiculo arg0, Vehiculo arg1) { return arg0.getModelo().length() - arg1.getModelo().length(); } }; + + private LocalDate fechaEntrada; private String modelo; private String color; protected float velocidad = 0; + public void setFechaEntrada(LocalDate fechaEntrada) { + this.fechaEntrada = fechaEntrada; + } + public String getColor() { return color; } @@ -25,7 +39,7 @@ public void setColor(String color) { } protected String getModelo() { - return modelo == null ? MODELO_NO_DISPONIBLE : modelo + " (" + getColor() + ")"; + return modelo == null ? MODELO_NO_DISPONIBLE : modelo; } public Vehiculo() { @@ -38,8 +52,7 @@ public Vehiculo(String modelo, String color) { @Override public String toString() { - return (getModelo() == null ? MODELO_NO_DISPONIBLE : getModelo()) - + " (" + color + ")"; + return (getModelo() == null ? MODELO_NO_DISPONIBLE : getModelo()) + " (" + getColor() + ")"; } @Override @@ -65,6 +78,15 @@ public int compareTo(Vehiculo other) { return resultado; } + @Override + public LocalDate getFechaEntrada() { + return fechaEntrada; + } + + @Override + public List getReparacionesPendientes() { + return reparacionesPendientes; + } // public int compareTo(Vehiculo vehiculo) { // // para ordenar por el tamaño de los carateres del modelo From 4c510b19c74a607199c470925cf5580a8e67a841 Mon Sep 17 00:00:00 2001 From: Miguel Prada Date: Sat, 9 Jan 2021 20:04:04 +0100 Subject: [PATCH 08/10] "Anadiendo Map y lambda" --- Diagrama_clases_Taller.drawio | 1 + Diagrama_clases_Taller.pdf | Bin 46091 -> 46091 bytes src/com/app/App.java | 45 ++++++++-------- src/com/tallerpepe/Presupuesto.java | 38 +++++++------- src/com/tallerpepe/Reparable.java | 2 +- src/com/tallerpepe/Reparacion.java | 19 +++++-- src/com/tallerpepe/Taller.java | 76 +++++++++++++++------------- 7 files changed, 105 insertions(+), 76 deletions(-) create mode 100644 Diagrama_clases_Taller.drawio diff --git a/Diagrama_clases_Taller.drawio b/Diagrama_clases_Taller.drawio new file mode 100644 index 0000000..aa7dab1 --- /dev/null +++ b/Diagrama_clases_Taller.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/Diagrama_clases_Taller.pdf b/Diagrama_clases_Taller.pdf index 24d4431d0ebac8d9207fed20d46356fb7750cdb2..ec1a649dcfe038acbc3f3e7fa8a246863f8c2c1c 100644 GIT binary patch delta 31 gcmeBv!PNbNX~IKxOG8ToLnHHvFJxfM#oUaW0l4o9I{*Lx delta 31 gcmeBv!PNbNX~IKxb3;oL69bEhFJxfM#oUaW0l7;GLjV8( diff --git a/src/com/app/App.java b/src/com/app/App.java index b85d30a..54356b2 100644 --- a/src/com/app/App.java +++ b/src/com/app/App.java @@ -23,24 +23,28 @@ public static void main(String[] args) { Repuesto filtroAire = new Repuesto("Filtro aire", 8.50f); Repuesto pastillaFreno = new Repuesto("Pastilla freno", 9.70f); Repuesto limpiaParabrisas = new Repuesto("Limpiaparabrisas 2L", 3.50f); - Reparacion revision1 = new Reparacion(2f, filtroAceite, aceiteMotor, filtroAire, limpiaParabrisas); - Reparacion revision2 = new Reparacion(1.20f, pastillaFreno); - Reparacion cambioRuedasCoche = new Reparacion(2.30f, ruedaCoche, ruedaCoche, ruedaCoche, ruedaCoche); - Reparacion cambioRuedasHarley = new Reparacion(1.20f, ruedaHarley, ruedaHarley); + Reparacion revision1 = new Reparacion(2f); + revision1.getRepuestos().put(aceiteMotor, 2); + revision1.getRepuestos().put(filtroAceite, 1); + Reparacion revision2 = new Reparacion(1.30f); + revision2.getRepuestos().put(pastillaFreno, 2); + Reparacion cambioRuedasCoche = new Reparacion(2.30f); + cambioRuedasCoche.getRepuestos().put(ruedaCoche, 4); + Reparacion cambioRuedasHarley = new Reparacion(1.45f); + cambioRuedasHarley.getRepuestos().put(ruedaHarley, 2); Coche cocheRenault = new Coche("Renault 21", "verde"); cocheRenault.setMatricula("2153BNR"); cocheRenault.getReparacionesPendientes().add(revision1); - cocheRenault.getReparacionesPendientes().get(0).setGarantia(false); +// cocheRenault.getReparacionesPendientes().get(0).setGarantia(true); cocheRenault.getReparacionesPendientes().add(cambioRuedasCoche); - cocheRenault.getReparacionesPendientes().get(1).setGarantia(false); +// cocheRenault.getReparacionesPendientes().get(1).setGarantia(true); cocheRenault.setFechaEntrada(LocalDate.of(2021, 01, 05)); Moto harley1 = new Moto("HARLEY DAVIDSON", "negro"); harley1.getReparacionesPendientes().add(revision2); - harley1.getReparacionesPendientes().get(0).setGarantia(true); +// harley1.getReparacionesPendientes().get(0).setGarantia(true); harley1.getReparacionesPendientes().add(cambioRuedasHarley); - harley1.getReparacionesPendientes().get(1).setGarantia(false); harley1.setFechaEntrada(LocalDate.of(2021, 01, 05)); Taller taller1 = new Taller(cocheRenault, harley1); @@ -48,9 +52,9 @@ public static void main(String[] args) { // taller1.getListaReparables().add(harley1); Presupuesto presupuestoRenault = new Presupuesto(cocheRenault); - System.out.println(presupuestoRenault.calcularTextoPresupuesto(8.90f)); + System.out.println(presupuestoRenault.calcularTextoPresupuesto(10f)); Presupuesto presupuestoHarley = new Presupuesto(harley1); - System.out.println(presupuestoHarley.calcularTextoPresupuesto(7.50f)); + System.out.println(presupuestoHarley.calcularTextoPresupuesto(10f)); /* * El turno para reparar los vehículos los dará en primer lugar la existencia de @@ -59,17 +63,18 @@ public static void main(String[] args) { * estimado. */ - taller1.getAlmacenRepuestos().put(limpiaParabrisas, 2); - taller1.getAlmacenRepuestos().put(pastillaFreno, 1); - taller1.getAlmacenRepuestos().put(filtroAire, 3); - taller1.getAlmacenRepuestos().put(aceiteMotor, 1); - taller1.getAlmacenRepuestos().put(filtroAceite, 2); - taller1.getAlmacenRepuestos().put(ruedaHarley, 0); - taller1.getAlmacenRepuestos().put(ruedaCoche, 3); + Taller.getAlmacenRepuestos().put(limpiaParabrisas, 2); + Taller.getAlmacenRepuestos().put(pastillaFreno, 1); + Taller.getAlmacenRepuestos().put(filtroAire, 3); + Taller.getAlmacenRepuestos().put(aceiteMotor, 1); + Taller.getAlmacenRepuestos().put(filtroAceite, 2); + Taller.getAlmacenRepuestos().put(ruedaHarley, 0); + Taller.getAlmacenRepuestos().put(ruedaCoche, 4); - System.out.println("\nAlmacén de Repuestos:\n" + taller1.getAlmacenRepuestos().toString()); + System.out.println("\nAlmacén de Repuestos:\n" + Taller.getAlmacenRepuestos().toString()); System.out.println("\nCálculo del turno de reparación:"); - taller1.calcularTurnoReparacion(taller1.getListaReparables()); + taller1.getListaReparables().sort(Taller.COMPARADOR_TURNO_REPARACION); +// taller1.calcularTurnoReparacion(taller1.getListaReparables()); taller1.getListaReparables().forEach(System.out::println); /* @@ -78,7 +83,7 @@ public static void main(String[] args) { * taller reparará dicha avería sin coste para el cliente a menos que en la * diagnosis de detecte algún tipo de mal uso o fraude. */ - cambioRuedasCoche.setFechaEntregaReparable(LocalDate.of(2020, 01, 01)); + cambioRuedasCoche.setFechaEntregaReparable(LocalDate.of(2020, 01, 10)); cambioRuedasCoche.setFechaFinGarantiaReparacion(); cambioRuedasHarley.setFechaEntregaReparable(LocalDate.of(2020, 01, 03)); cambioRuedasHarley.setFechaFinGarantiaReparacion(); diff --git a/src/com/tallerpepe/Presupuesto.java b/src/com/tallerpepe/Presupuesto.java index 01e4efe..0cef9ed 100644 --- a/src/com/tallerpepe/Presupuesto.java +++ b/src/com/tallerpepe/Presupuesto.java @@ -2,56 +2,60 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; public class Presupuesto { private Reparable reparable; private Collection reparaciones; - + private Reparable getReparable() { return reparable; } - + public Collection getReparaciones() { return reparaciones; } - + public Presupuesto(Reparable reparable) { this.reparable = reparable; reparaciones = new ArrayList<>(reparable.getReparacionesPendientes()); } - + public float getHorasManoObra() { float horasTotales = 0; for (Reparacion reparacion : getReparaciones()) { - if(!reparacion.isGarantia()) { + if (!reparacion.isGarantia()) { horasTotales += reparacion.getHorasManoObra(); } } - + return horasTotales; } - + public float getPrecioRepuestos() { - Collection repuestos = new ArrayList<>(); + Map repuestos = new HashMap<>(); for (Reparacion reparacion : getReparaciones()) { - if(!reparacion.isGarantia()) { - repuestos.addAll(reparacion.getRepuestos()); + if (!reparacion.isGarantia()) { + for (Map.Entry entry : reparacion.getRepuestos().entrySet()) { + repuestos.put(entry.getKey(), entry.getValue()); + } } } return getPrecioPara(repuestos); } - + public float getPrecioTotal(float precioManoObra) { return getPrecioRepuestos() + getHorasManoObra() * precioManoObra; } - - private static float getPrecioPara(Collection repuestos) { + + private static float getPrecioPara(Map repuestos) { float total = 0; - for (Repuesto repuesto : repuestos) { - total += repuesto.getPrecio(); + for (Map.Entry entry : repuestos.entrySet()) { + total += entry.getKey().getPrecio() * entry.getValue(); } - + return total; } @@ -63,7 +67,7 @@ public String calcularTextoPresupuesto(float precioManoObra) { texto += "\n" + reparacion; // "\n" para salto de linea } texto += "\nPrecio Total: " + String.format("%.2f €", getPrecioTotal(precioManoObra)); - + return texto; } } diff --git a/src/com/tallerpepe/Reparable.java b/src/com/tallerpepe/Reparable.java index 79c4244..eb9ffe0 100644 --- a/src/com/tallerpepe/Reparable.java +++ b/src/com/tallerpepe/Reparable.java @@ -5,7 +5,7 @@ public interface Reparable { - LocalDate getFechaEntrada(); + LocalDate getFechaEntrada(); List getReparacionesPendientes(); } diff --git a/src/com/tallerpepe/Reparacion.java b/src/com/tallerpepe/Reparacion.java index 8bc48a8..be84f1a 100644 --- a/src/com/tallerpepe/Reparacion.java +++ b/src/com/tallerpepe/Reparacion.java @@ -3,6 +3,9 @@ import java.time.LocalDate; import java.util.Arrays; import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class Reparacion { @@ -11,7 +14,8 @@ public enum Tipo { }; Tipo tipo; - private Collection repuestos; + private Map repuestos; + private Collection repuestos2; private float horasManoObra; private boolean garantia; private LocalDate fechaEntregaReparable; @@ -46,7 +50,7 @@ public void setFechaFinGarantiaReparacion() { } } - public Collection getRepuestos() { + public Map getRepuestos() { return repuestos; } @@ -64,13 +68,22 @@ public void setGarantia(boolean garantia) { public Reparacion(float horasManoObra, Repuesto... repuestos) { super(); - this.repuestos = Arrays.asList(repuestos); + this.repuestos2 = Arrays.asList(repuestos); this.horasManoObra = horasManoObra; } + public Reparacion(float horasManoObra) { + super(); + this.repuestos = new HashMap<>(); + this.horasManoObra = horasManoObra; + this.garantia = false; + } + @Override public String toString() { return "Repuestos=" + getRepuestos() + " (" + getHorasManoObra() + "hs)"; } + + } diff --git a/src/com/tallerpepe/Taller.java b/src/com/tallerpepe/Taller.java index c367080..8f1aece 100644 --- a/src/com/tallerpepe/Taller.java +++ b/src/com/tallerpepe/Taller.java @@ -13,14 +13,28 @@ public class Taller { private List listaReparables; - private Map almacenRepuestos; + private static Map almacenRepuestos; private List hojasTrabajo; + public final static Comparator COMPARADOR_TURNO_REPARACION = new Comparator() { + + @Override + public int compare(Reparable reparable1, Reparable reparable2) { + int resultado = comprobarFaltantesRepuestos(reparable1) - comprobarFaltantesRepuestos(reparable2); + if (resultado == 0) { + resultado = reparable1.getFechaEntrada().compareTo(reparable2.getFechaEntrada()); + } + if (resultado == 0) { + resultado = (int) (calcularTiempoReparacion(reparable1) - calcularTiempoReparacion(reparable2)); + } + return resultado; + } + }; public List getListaReparables() { return listaReparables; } - public Map getAlmacenRepuestos() { + public static Map getAlmacenRepuestos() { return almacenRepuestos; } @@ -46,7 +60,7 @@ public Taller(List listaReparables, Map almacenRep List hojasTrabajo) { super(); this.listaReparables = listaReparables; - this.almacenRepuestos = almacenRepuestos; + Taller.almacenRepuestos = almacenRepuestos; this.hojasTrabajo = hojasTrabajo; } @@ -57,55 +71,48 @@ public String toString() { } public List calcularTurnoReparacion(List reparables) { - Collections.sort(reparables, new Comparator() { - - @Override - public int compare(Reparable reparable1, Reparable reparable2) { - int resultado = comprobarFaltantesRepuestos(reparable1) - comprobarFaltantesRepuestos(reparable2); - if (resultado == 0) { - resultado = reparable1.getFechaEntrada().compareTo(reparable2.getFechaEntrada()); - } - if (resultado == 0) { - resultado = calcularTiempoReparacion(reparable1) - calcularTiempoReparacion(reparable2); - } - return resultado; - } - }); + Collections.sort(reparables, COMPARADOR_TURNO_REPARACION); return reparables; } - public int calcularTiempoReparacion(Reparable reparable) { - int tiempo = 0; - for (Reparacion reparacion : reparable.getReparacionesPendientes()) { - tiempo += reparacion.getHorasManoObra(); - } - return tiempo; + static double calcularTiempoReparacion(Reparable reparable) { +// float tiempo = 0.0f; +// for (Reparacion reparacion : reparable.getReparacionesPendientes()) { +// tiempo += reparacion.getHorasManoObra(); +// } +// return tiempo; + return reparable.getReparacionesPendientes().stream().mapToDouble(Reparacion::getHorasManoObra).sum(); } - public int comprobarFaltantesRepuestos(Reparable reparable) { + static int comprobarFaltantesRepuestos(Reparable reparable) { int contador = 0; for (Reparacion reparacion : reparable.getReparacionesPendientes()) { - for (Repuesto repuesto : reparacion.getRepuestos()) { - if (!comprobarRepuestosAlmacen(repuesto)) { + for (Map.Entry entry : reparacion.getRepuestos().entrySet()) { + if (comprobarRepuestosAlmacen(entry.getKey(), entry.getValue())) { contador++; } } +// for (Repuesto repuesto : reparacion.getRepuestos()) { +// if (!comprobarRepuestosAlmacen(repuesto)) { +// contador++; +// } +// } } return contador; } - public boolean comprobarRepuestosAlmacen(Repuesto repuesto) { - return (getAlmacenRepuestos().get(repuesto) > 0); + static boolean comprobarRepuestosAlmacen(Repuesto repuesto, int valor) { + return (getAlmacenRepuestos().get(repuesto) < valor); } - + public boolean comprobarMalUso(Reparacion reparacion) { boolean resultado = false; - if (reparacion.isMalUso()) { - resultado = true; + if (reparacion.isMalUso()) { + resultado = true; } return resultado; } - + public boolean comprobarGarantiaReparacion(Reparacion reparacion) { boolean resultado = false; if (reparacion.getFechaFinGarantiaReparacion().isAfter(LocalDate.now())) { @@ -113,16 +120,15 @@ public boolean comprobarGarantiaReparacion(Reparacion reparacion) { } return resultado; } - + public float calcularPrecioReparaciones(Reparable reparable) { float precioReparaciones = 0; Presupuesto presupuesto = new Presupuesto(reparable); for (Reparacion reparacion : reparable.getReparacionesPendientes()) { if (!comprobarGarantiaReparacion(reparacion) || comprobarMalUso(reparacion)) { - precioReparaciones+= presupuesto.getPrecioTotal(10.50f); + precioReparaciones += presupuesto.getPrecioTotal(10f); } } return precioReparaciones; } - } From bdae872ffde2e7baad69f49b48dde5ba4b9ba1b6 Mon Sep 17 00:00:00 2001 From: Miguel Prada Date: Sat, 9 Jan 2021 20:43:33 +0100 Subject: [PATCH 09/10] =?UTF-8?q?"A=C3=B1adiendo=20hojas=20trabajo=20en=20?= =?UTF-8?q?APP"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/app/App.java | 11 +++++++++-- src/com/tallerpepe/HojaTrabajo.java | 9 +++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/com/app/App.java b/src/com/app/App.java index 54356b2..633c350 100644 --- a/src/com/app/App.java +++ b/src/com/app/App.java @@ -1,6 +1,8 @@ package com.app; import java.time.LocalDate; + +import com.tallerpepe.HojaTrabajo; import com.tallerpepe.Presupuesto; import com.tallerpepe.Reparacion; import com.tallerpepe.Repuesto; @@ -99,7 +101,12 @@ public static void main(String[] args) { .println("\nEl precio de la reparacion del Coche es: " + String.format("%.2f€", precioReparacionCoche)); System.out.println( "\nEl precio de la reparacion de la harley es: " + String.format("%.2f€", precioReparacionHarley)); - + HojaTrabajo hojaTrabajoCoche = new HojaTrabajo(cocheRenault, LocalDate.of(2021, 01, 12), revision1, + cambioRuedasCoche); + HojaTrabajo hojaTrabajoHarley = new HojaTrabajo(harley1, LocalDate.of(2021, 01, 11), revision2, + cambioRuedasHarley); + System.out.println("\nImpresion de Hojas de Trabajo:"); + System.out.println(hojaTrabajoCoche); + System.out.println(hojaTrabajoHarley); } - } diff --git a/src/com/tallerpepe/HojaTrabajo.java b/src/com/tallerpepe/HojaTrabajo.java index 8e02889..477e5da 100644 --- a/src/com/tallerpepe/HojaTrabajo.java +++ b/src/com/tallerpepe/HojaTrabajo.java @@ -1,6 +1,7 @@ package com.tallerpepe; import java.time.LocalDate; +import java.util.Arrays; import java.util.Collection; public class HojaTrabajo { @@ -21,17 +22,17 @@ public Collection getTrabajosTerminados() { return trabajosTerminados; } - public HojaTrabajo(Reparable reparable, LocalDate fechaFin, Collection trabajosTerminados) { + public HojaTrabajo(Reparable reparable, LocalDate fechaFin, Reparacion... trabajosTerminados) { super(); this.reparable = reparable; this.fechaFin = fechaFin; - this.trabajosTerminados = trabajosTerminados; + this.trabajosTerminados = Arrays.asList(trabajosTerminados); } @Override public String toString() { - return "\nHojaTrabajo:\n" + getReparable() + ", Fecha de Finalización: " + getFechaFin() - + ", Trabajos Terminados: " + getTrabajosTerminados() + "]"; + return "\nHojaTrabajo:\n" + getReparable() + "\nFecha de Finalización: " + getFechaFin() + + "\nTrabajos Terminados: " + getTrabajosTerminados() + "]"; } } From 4911dae515c2728d5b92bdc1d4801350cb15a633 Mon Sep 17 00:00:00 2001 From: Miguel Prada Date: Sun, 10 Jan 2021 12:22:37 +0100 Subject: [PATCH 10/10] =?UTF-8?q?"A=C3=B1=C3=A1diendo=20horas=20totales=20?= =?UTF-8?q?mano=20de=20obra=20en=20presupuesto"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/tallerpepe/Presupuesto.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/tallerpepe/Presupuesto.java b/src/com/tallerpepe/Presupuesto.java index 0cef9ed..eea77f9 100644 --- a/src/com/tallerpepe/Presupuesto.java +++ b/src/com/tallerpepe/Presupuesto.java @@ -60,13 +60,16 @@ private static float getPrecioPara(Map repuestos) { } public String calcularTextoPresupuesto(float precioManoObra) { + float horasTotalesManoObra = 0; String texto = "\nPresupuesto para:\n"; texto += getReparable(); // Ahora pongo cara reparacion en una linea for (Reparacion reparacion : getReparaciones()) { texto += "\n" + reparacion; // "\n" para salto de linea + horasTotalesManoObra += reparacion.getHorasManoObra(); } - texto += "\nPrecio Total: " + String.format("%.2f €", getPrecioTotal(precioManoObra)); + texto += "\nPrecio Total: " + String.format("%.2f €", getPrecioTotal(precioManoObra)) + + String.format("\nHoras totales de mano de obra: %.2f horas", horasTotalesManoObra); return texto; }