From aa9099d5abfd395f481f420a4062cb8c1b9759bc Mon Sep 17 00:00:00 2001 From: Javier Calvo <javiercalvoporro@gmail.com> Date: Tue, 17 Dec 2024 21:14:11 +0100 Subject: [PATCH] Trayectos creados. Falta consultar lo de varios trayectos en packs --- src/es/markse/TBarco.java | 36 ++++++++++++++++++++ src/es/markse/TCamion.java | 37 ++++++++++++++++++++ src/es/markse/TPackCamionBarco.java | 47 +++++++++++++++++++++++++ src/es/markse/TPackCamionTren.java | 45 ++++++++++++++++++++++++ src/es/markse/TTren.java | 37 ++++++++++++++++++++ src/es/markse/Trayecto.java | 51 ++++++++++------------------ src/es/markse/TrayectoCombinado.java | 31 +++++++++++++++++ src/es/markse/TrayectoSimple.java | 41 ++++++++++++++++++++++ uses/es/markse/TrayectoTest.java | 5 ++- 9 files changed, 294 insertions(+), 36 deletions(-) create mode 100644 src/es/markse/TBarco.java create mode 100644 src/es/markse/TCamion.java create mode 100644 src/es/markse/TPackCamionBarco.java create mode 100644 src/es/markse/TPackCamionTren.java create mode 100644 src/es/markse/TTren.java create mode 100644 src/es/markse/TrayectoCombinado.java create mode 100644 src/es/markse/TrayectoSimple.java diff --git a/src/es/markse/TBarco.java b/src/es/markse/TBarco.java new file mode 100644 index 0000000..564cab5 --- /dev/null +++ b/src/es/markse/TBarco.java @@ -0,0 +1,36 @@ +/** + * Copyright Universidad de Valladolid 2024 + */ +package es.markse; + +/** + * Implementacion de la clase TBarco, que representa un trayecto por barco. + * @author javcalv + * @author victorm + */ +public class TBarco extends TrayectoSimple { + private static final double COSTE_DIARIO = 4000; + + /** + * Constructor de la clase TBarco + * @param muelleOrigen Muelle desde el que empieza el Trayecto + * @param puertoOrigen Puerto desde el que empieza el Trayecto + * @param fechaInicioTrayecto Fecha en la que comienza el Trayecto + * @param muelleDestino Muelle en el que finaliza un Trayecto + * @param puertoDestino Puerto en el que finaliza un Trayecto + * @param fechaFinTrayecto Fecha en la que finaliza un Trayecto + */ + public TBarco(Muelle muelleOrigen, Puerto puertoOrigen, Fecha fechaInicioTrayecto, Muelle muelleDestino, Puerto puertoDestino, Fecha fechaFinTrayecto) { + super(muelleOrigen, puertoOrigen, fechaInicioTrayecto, muelleDestino, puertoDestino, fechaFinTrayecto); + } + + /** + * Método que calcula el coste del trayecto por barco + * @return Coste del trayecto en euros + */ + @Override + public double costeTrayecto() { + int dias = numeroDeDiasDeTrayecto(); + return dias * COSTE_DIARIO; + } +} \ No newline at end of file diff --git a/src/es/markse/TCamion.java b/src/es/markse/TCamion.java new file mode 100644 index 0000000..96535c8 --- /dev/null +++ b/src/es/markse/TCamion.java @@ -0,0 +1,37 @@ +/** + * Copyright Universidad de Valladolid 2024 + */ +package es.markse; + +/** + * Implementacion de la clase TCamion, que representa un trayecto por camión. + * @author javcalv + * @author victorm + */ +public class TCamion extends TrayectoSimple { + + private static final double COSTE_FIJO = 200; + private static final double COSTE_POR_KILOMETRO = 4.5; + + /** + * Constructor de la clase TCamion + * @param muelleOrigen Muelle desde el que empieza el Trayecto + * @param puertoOrigen Puerto desde el que empieza el Trayecto + * @param fechaInicioTrayecto Fecha en la que comienza el Trayecto + * @param muelleDestino Muelle en el que finaliza un Trayecto + * @param puertoDestino Puerto en el que finaliza un Trayecto + * @param fechaFinTrayecto Fecha en la que finaliza un Trayecto + */ + public TCamion(Muelle muelleOrigen, Puerto puertoOrigen, Fecha fechaInicioTrayecto, Muelle muelleDestino, Puerto puertoDestino, Fecha fechaFinTrayecto) { + super(muelleOrigen, puertoOrigen, fechaInicioTrayecto, muelleDestino, puertoDestino, fechaFinTrayecto); + } + + /** + * Método que calcula el coste del trayecto por camión + * @return Coste del trayecto en euros + */ + @Override + public double costeTrayecto() { + return COSTE_FIJO + (this.distanciaKilometros * COSTE_POR_KILOMETRO); + } +} \ No newline at end of file diff --git a/src/es/markse/TPackCamionBarco.java b/src/es/markse/TPackCamionBarco.java new file mode 100644 index 0000000..bb6046c --- /dev/null +++ b/src/es/markse/TPackCamionBarco.java @@ -0,0 +1,47 @@ +/** + * Copyright Universidad de Valladolid 2024 + */ +package es.markse; + +/** + * Implementacion de la clase PackCamionBarco, que representa un trayecto combinado de camión y barco. + * @author javcalv + * @author victorm + */ +public class TPackCamionBarco extends TrayectoCombinado { + + //POSIBLE CAMBIO --> PUEDEN SER VARIOS TRAYECTOS DE BARCOS Y VARIOS DE CAMIONES + private TCamion camion; + private TBarco barco; + private final double DESCUENTO = 0.85; + + /** + * Constructor de la clase PackCamionBarco + * @param muelleOrigen Muelle desde el que empieza el Trayecto + * @param puertoOrigen Puerto desde el que empieza el Trayecto + * @param fechaInicioTrayecto Fecha en la que comienza el Trayecto + * @param muelleDestino Muelle en el que finaliza un Trayecto + * @param puertoDestino Puerto en el que finaliza un Trayecto + * @param fechaFinTrayecto Fecha en la que finaliza un Trayecto + * @param camion Trayecto de camión + * @param barco Trayecto de barco + */ + public TPackCamionBarco(Muelle muelleOrigen, Puerto puertoOrigen, Fecha fechaInicioTrayecto, Muelle muelleDestino, Puerto puertoDestino, Fecha fechaFinTrayecto, TCamion camion, TBarco barco) { + super(muelleOrigen, puertoOrigen, fechaInicioTrayecto, muelleDestino, puertoDestino, fechaFinTrayecto); + this.camion = camion; + this.barco = barco; + this.trayectosSimples.add(camion); + this.trayectosSimples.add(barco); + } + + /** + * Método que calcula el coste del trayecto combinado de camión y barco + * @return Coste del trayecto en euros + */ + @Override + public double costeTrayecto() { + double costeBarco = this.barco.costeTrayecto() * DESCUENTO; + double costeCamion = this.camion.costeTrayecto(); + return costeBarco + costeCamion; + } +} \ No newline at end of file diff --git a/src/es/markse/TPackCamionTren.java b/src/es/markse/TPackCamionTren.java new file mode 100644 index 0000000..731d9bc --- /dev/null +++ b/src/es/markse/TPackCamionTren.java @@ -0,0 +1,45 @@ +/** + * Copyright Universidad de Valladolid 2024 + */ +package es.markse; + +/** + * Implementacion de la clase PackCamionTren, que representa un trayecto combinado de camión y tren. + * @author javcalv + * @author victorm + */ +public class TPackCamionTren extends TrayectoCombinado { + + //POSIBLES CAMBIOS --> Arraylist de trayectos ??? Cosultar + private TCamion camion; + private TTren tren; + + /** + * Constructor de la clase PackCamionTren + * @param muelleOrigen Muelle desde el que empieza el Trayecto + * @param puertoOrigen Puerto desde el que empieza el Trayecto + * @param fechaInicioTrayecto Fecha en la que comienza el Trayecto + * @param muelleDestino Muelle en el que finaliza un Trayecto + * @param puertoDestino Puerto en el que finaliza un Trayecto + * @param fechaFinTrayecto Fecha en la que finaliza un Trayecto + * @param camion Trayecto de camión + * @param tren Trayecto de tren + */ + public TPackCamionTren(Muelle muelleOrigen, Puerto puertoOrigen, Fecha fechaInicioTrayecto, Muelle muelleDestino, Puerto puertoDestino, Fecha fechaFinTrayecto, TCamion camion, TTren tren) { + super(muelleOrigen, puertoOrigen, fechaInicioTrayecto, muelleDestino, puertoDestino, fechaFinTrayecto); + this.camion = camion; + this.tren = tren; + trayectosSimples.add(camion); + trayectosSimples.add(tren); + } + + /** + * Método que calcula el coste del trayecto combinado de camión y tren + * @return Coste del trayecto en euros + */ + @Override + public double costeTrayecto() { + double distanciaTotal = camion.distanciaKilometros + tren.distanciaKilometros; + return distanciaTotal * 10; + } +} \ No newline at end of file diff --git a/src/es/markse/TTren.java b/src/es/markse/TTren.java new file mode 100644 index 0000000..a642a09 --- /dev/null +++ b/src/es/markse/TTren.java @@ -0,0 +1,37 @@ +/** + * Copyright Universidad de Valladolid 2024 + */ +package es.markse; + +/** + * Implementacion de la clase TTren, que representa un trayecto por tren. + * @author javcalv + * @author victorm + */ +public class TTren extends TrayectoSimple { + + private static final double COSTE_FIJO = 20; + private static final double COSTE_POR_KILOMETRO = 12.5; + + /** + * Constructor de la clase TTren + * @param muelleOrigen Muelle desde el que empieza el Trayecto + * @param puertoOrigen Puerto desde el que empieza el Trayecto + * @param fechaInicioTrayecto Fecha en la que comienza el Trayecto + * @param muelleDestino Muelle en el que finaliza un Trayecto + * @param puertoDestino Puerto en el que finaliza un Trayecto + * @param fechaFinTrayecto Fecha en la que finaliza un Trayecto + */ + public TTren(Muelle muelleOrigen, Puerto puertoOrigen, Fecha fechaInicioTrayecto, Muelle muelleDestino, Puerto puertoDestino, Fecha fechaFinTrayecto) { + super(muelleOrigen, puertoOrigen, fechaInicioTrayecto, muelleDestino, puertoDestino, fechaFinTrayecto); + } + + /** + * Método que calcula el coste del trayecto por tren + * @return Coste del trayecto en euros + */ + @Override + public double costeTrayecto() { + return COSTE_FIJO + (this.distanciaKilometros * COSTE_POR_KILOMETRO); + } +} \ No newline at end of file diff --git a/src/es/markse/Trayecto.java b/src/es/markse/Trayecto.java index d136592..ba3f09e 100644 --- a/src/es/markse/Trayecto.java +++ b/src/es/markse/Trayecto.java @@ -3,20 +3,20 @@ */ package es.markse; -import java.io.Serializable; - /** * Implementacion de la clase Trayecto * @author vicmtorm * @author javcalv */ -public class Trayecto { +public abstract class Trayecto{ + private Muelle muelleOrigen; private Puerto puertoOrigen; private Fecha fechaInicioTrayecto; private Muelle muelleDestino; private Puerto puertoDestino; private Fecha fechaFinTrayecto; + /** * Constructor del objeto Trayecto. * @param muelleOrigen Muelle desde el que se e mpieza el Trayecto @@ -43,9 +43,9 @@ public class Trayecto { //Comprobamos si los muelles pertenecen al puerto if (!puertoOrigen.comprobarMuelleEnPuerto(muelleOrigen)) - throw new MuelleNoPerteneceAlPuertoException("El muelle no pertenece al puerto"); + throw new IllegalStateException("El muelle no pertenece al puerto"); if (!puertoDestino.comprobarMuelleEnPuerto(muelleDestino)) - throw new MuelleNoPerteneceAlPuertoException("El muelle no pertenece al puerto"); + throw new IllegalStateException("El muelle no pertenece al puerto"); if (!comprobacionMuellesDistintos(muelleOrigen, muelleDestino, puertoOrigen, puertoDestino)) throw new IllegalArgumentException("El muelle de origen no puede ser igual al de destino"); @@ -93,22 +93,18 @@ public class Trayecto { /** * 1.1.22. Metodo que, introduciendo el coste diario y el coste por milla, devuelve el precio calculado en Euros de un Trayecto - * @param costeDiarioTrayecto Valor en Euros del Coste Diario de un Trayecto - * @param costePorMilla Valor en Euros del Coste por Milla de un Trayecto * @return Precio del Trayecto Calculado en Euros */ - public double precioTrayectoEnEuros(double costeDiarioTrayecto, double costePorMilla) { - if (costeDiarioTrayecto <= 0) { - throw new IllegalArgumentException ("El Coste Diario del Trayecto no es válido"); - } - else if(costePorMilla <= 0) { - throw new IllegalArgumentException ("El Coste por Milla del Trayecto no es válido"); - } - int dias = numeroDeDiasDeTrayceto(); - double dist = distanciaMillasMarinas(); - return ((dias*costeDiarioTrayecto)+(dist*costePorMilla)); + public double precioTrayectoEnEuros() { + return this.costeTrayecto(); } + /** + * Metodo abstracto para calcular el nuevo coste de + * @return + */ + public abstract double costeTrayecto(); + /** * 1.1.23 Método que devuelve la Distancia calculada en Millas Marinas entre 2 Muelles Distintos * @return Distancia entre 2 Muelles Distintos calculada en Millas Marinas @@ -130,7 +126,8 @@ public class Trayecto { String FechaFin = this.fechaFinTrayecto.aCadena(); return"INFORMACION SOBRE EL ORIGEN: \nCiudad Origen: "+ciudadOrig+"\nPais Origen: "+paisOrig+"\nInicio del Trayecto: "+FechaInicio+ "\n\nINFORMACION SOBRE EL DESTINO: \nCiudad Destino: "+ciudadDest+"\nPais Destino: "+paisDest+"\nFin del Trayecto: "+FechaFin+"\n"; - } + } + /************************* * OTRAS FUNCIONALIDADES * @@ -139,9 +136,9 @@ public class Trayecto { /** * Metodo que devuelve el numero de dias de un trayecto */ - private int numeroDeDiasDeTrayceto(){ - return (this.fechaFinTrayecto.getDiasDesdeEpoch()- this.fechaInicioTrayecto.getDiasDesdeEpoch()) +1; - } + public int numeroDeDiasDeTrayecto() { + return (this.fechaFinTrayecto.getDiasDesdeEpoch() - this.fechaInicioTrayecto.getDiasDesdeEpoch()) + 1; + } /** * Método que Devuelve el Muelle de Origen @@ -189,16 +186,4 @@ public class Trayecto { public Fecha getFechaFinTrayecto() { return this.fechaFinTrayecto; } - - /** - * Excpcion lanzada para indicar que un muelle no pertenece al puerto - * @author javcalv - * @author victorm - */ - public class MuelleNoPerteneceAlPuertoException extends RuntimeException implements Serializable{ - private static final long serialVersionUID = 1L; - public MuelleNoPerteneceAlPuertoException(String m) { - super(m); - } - } } \ No newline at end of file diff --git a/src/es/markse/TrayectoCombinado.java b/src/es/markse/TrayectoCombinado.java new file mode 100644 index 0000000..9481516 --- /dev/null +++ b/src/es/markse/TrayectoCombinado.java @@ -0,0 +1,31 @@ +/** + * Copyright Universidad de Valladolid 2024 + */ +package es.markse; +import java.util.ArrayList; + +/** + * Implementacion de la clase abstracta TrayectoSimple + * @author javcalv + * @author victorm + */ +public abstract class TrayectoCombinado extends Trayecto { + + //POSIBLE CAMBIO --> ARRAYLIST DE ARRAYLISTS + protected final ArrayList<TrayectoSimple> trayectosSimples; + + /** + * Constructor de la clase abstracta TrayectoCombinado + * @param muelleOrigen Muelle desde el que empieza el Trayecto + * @param puertoOrigen Puerto desde el que empieza el Trayecto + * @param fechaInicioTrayecto Fecha en la que comienza el Trayecto + * @param muelleDestino Muelle en el que finaliza un Trayecto + * @param puertoDestino Puerto en el que finaliza un Trayecto + * @param fechaFinTrayecto Fecha en la que finaliza un Trayecto + */ + public TrayectoCombinado(Muelle muelleOrigen, Puerto puertoOrigen, Fecha fechaInicioTrayecto, Muelle muelleDestino, Puerto puertoDestino, Fecha fechaFinTrayecto) { + super(muelleOrigen, puertoOrigen, fechaInicioTrayecto, muelleDestino, puertoDestino, fechaFinTrayecto); + + this.trayectosSimples = new ArrayList<>(); + } +} diff --git a/src/es/markse/TrayectoSimple.java b/src/es/markse/TrayectoSimple.java new file mode 100644 index 0000000..4a5af2e --- /dev/null +++ b/src/es/markse/TrayectoSimple.java @@ -0,0 +1,41 @@ +/** + * Copyright Universidad de Valladolid 2024 + */ +package es.markse; + +/** + * Implementacion de la clase abstracta TrayectoSimple + * @author javcalv + * @author victorm + */ +public abstract class TrayectoSimple extends Trayecto { + + protected double distanciaKilometros; + private final float MILLAS_A_KILOMETROS = 1.852f; + + /** + * Constructor del TrayectoSimple + * @param muelleOrigen Muelle desde el que empieza el Trayecto + * @param puertoOrigen Puerto desde el que empieza el Trayecto + * @param fechaInicioTrayecto Fecha en la que comienza el Trayecto + * @param muelleDestino Muelle en el que finaliza un Trayecto + * @param puertoDestino Puerto en el que finaliza un Trayecto + * @param fechaFinTrayecto Fecha en la que finaliza un Trayecto + */ + public TrayectoSimple(Muelle muelleOrigen, Puerto puertoOrigen, Fecha fechaInicioTrayecto, Muelle muelleDestino, Puerto puertoDestino, Fecha fechaFinTrayecto) { + super(muelleOrigen, puertoOrigen, fechaInicioTrayecto, muelleDestino, puertoDestino, fechaFinTrayecto); + + //Obtenemos la distancia en millas marinas del trayecto y las convertimos en kilometros + this.distanciaKilometros = convertirMillasAKilometros(distanciaMillasMarinas()); + } + + /** + * Metodo que sirve para convertir las Millas marinas a Kilometros + * @param millas Millas de un trayecto + * @return Kilometros de un trayecto + */ + private double convertirMillasAKilometros(double millas) { + return millas * this.MILLAS_A_KILOMETROS; + } +} + diff --git a/uses/es/markse/TrayectoTest.java b/uses/es/markse/TrayectoTest.java index bd40ad4..e0a73e6 100644 --- a/uses/es/markse/TrayectoTest.java +++ b/uses/es/markse/TrayectoTest.java @@ -3,7 +3,6 @@ package es.markse; import static org.junit.Assert.*; import org.junit.Test; import es.markse.Muelle.estado; -import es.markse.Trayecto.MuelleNoPerteneceAlPuertoException; import es.uva.inf.poo.maps.GPSCoordinate; public class TrayectoTest { @@ -110,7 +109,7 @@ public class TrayectoTest { new Trayecto(m1,p1,f1,m2,p2,f2); } - @Test (expected = MuelleNoPerteneceAlPuertoException.class) + @Test (expected = IllegalStateException.class) public void testTrayectoMuelleOrigenNoEstaEnPuerto() { Puerto p1 = new Puerto("ES" , "BAR"); Puerto p2 = new Puerto("IT" , "NAP"); @@ -122,7 +121,7 @@ public class TrayectoTest { new Trayecto(m1,p1,f1,m2,p2,f2); } - @Test (expected = MuelleNoPerteneceAlPuertoException.class) + @Test (expected = IllegalStateException.class) public void testTrayectoMuelleDestinoNoEstaEnPuerto() { Puerto p1 = new Puerto("ES" , "BAR"); Puerto p2 = new Puerto("IT" , "NAP"); -- GitLab