Skip to content
Snippets Groups Projects
Commit 44f714cb authored by carmuno's avatar carmuno :tennis:
Browse files

yania

parent 9c610844
No related branches found
No related tags found
No related merge requests found
enunciados/IMAGE 2020-01-11 23:50:23.jpg

112 KiB

package barcos;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
/**
* Clase que implementa un alquiler en un puerto. En el puerto
* se amarran barcos en un punto dado.
* @author yania
*
*/
public class Alquiler {
private Persona cliente;
private Barco barco;
private LocalDate fechaInicial;
private LocalDate fechaFinal;
private int puntoDeAmarre;
/**
* Valor fijo que se aplica al computar el precio del alquiler
*/
public static final int FIJO = 6;
/**
* Inicialización de un alquiler con los datos necesarios
* @param cliente, referencia a quien realiza el alquiler, no puede ser null
* @param barco, referencia al barco que se amarra en el puerto, no puede ser null
* @param fechaInicial, fecha de inicio del alquiler, no puede ser null, debe ser anterior a fechaFinal
* @param fechaFinal, fecha de finalización prevista del alquiler, no puede ser null, debe ser posterior a fechaInicial
* @param puntoDeAmarre, identifica el punto en el que se amarra el barco, deben ser números no negativos
* @throws IllegalArgumentException cuando <br> {@code barco==null} o <br> {@code cliente==null} o <br>
* {@code fechaInicial==null} o {@code fechaFinal==null} o {@code fechaFinal.isBefore(fechaInicial)} o <br>
* {@code puntoDeAmarre<0}
*/
public Alquiler(Persona cliente,
Barco barco,
LocalDate fechaInicial,
LocalDate fechaFinal,
int puntoDeAmarre) {
setBarco(barco);
setCliente(cliente);
setFechaInicial(fechaInicial);
setFechaFinal(fechaFinal);
setPuntoDeAmarre(puntoDeAmarre);
}
/**
* Consulta el cliente que realiza el alquiler
* @return el resultado siempre válidamente conectado, referencia (no copia)
*/
public Persona getCliente() {
return cliente;
}
/**
* Consulta el barco que se amarra en alquiler
* @return el resultado siempre válidamente conectado, referencia (no copia)
*/
public Barco getBarco() {
return barco;
}
/**
* Consulta la fecha en la que comienza el alquiler
* @return el resultado siempre válidamente conectado y anterior a la fecha de finalización del alquiler
*/
public LocalDate getFechaInicial() {
return fechaInicial;
}
/**
* Consulta la fecha en la que finaliza el alquiler
* @return el resultado siempre válidamente conectado y posterior a la fecha de comienzo del alquiler
*/
public LocalDate getFechaFinal() {
return fechaFinal;
}
/**
* Consulta el punto en el que se amarra el barco en alquiler
* @return el resultado identifica el punto de amarre en el puerto y es no negativo
*/
public int getPuntoDeAmarre() {
return puntoDeAmarre;
}
/**
* Modifica el cliente. Solo en inicialización
*@param cliente, referencia a quien realiza el alquiler, no puede ser null
* @throws IllegalArgumentException cuando {@code cliente==null}
*/
private void setCliente(Persona cliente) {
if (cliente==null)
throw new IllegalArgumentException("El cliente no puede ser null");
this.cliente = cliente;
}
/**
* Modifica el barco. Solo en inicialización
* @param barco, referencia al barco que se amarra en el puerto, no puede ser null
* @throws IllegalArgumentException cuando {@code barco==null}
*/
private void setBarco(Barco barco) {
if (barco==null)
throw new IllegalArgumentException("El barco no puede ser null");
this.barco = barco;
}
/**
* Modifica la fecha de inicio del alquiler. Solo en Inicialización.
* @param fechaInicial, fecha de inicio del alquiler, no puede ser null, debe ser anterior a la fecha final si ya se ha inicializado
* @throws IllegalArgumentException cuando {@code fechaInicial==null} o {@code fechaFinal!=null && fechaInicial.isAfter(fechaFinal)}
*/
private void setFechaInicial(LocalDate fechaInicial) {
if (fechaInicial==null)
throw new IllegalArgumentException("La fecha inicial no puede ser null");
if (fechaFinal!=null && fechaInicial.isAfter(fechaFinal))
throw new IllegalArgumentException("La fecha inicial no puede ser posterior a la fecha final");
this.fechaInicial = fechaInicial;
}
/**
* Modifica la fecha de fin del alquiler. Solo en Inicialización.
* @param fechaFinal, fecha de finalización del alquiler, no puede ser null, debe ser posterior a la fecha de inicio si ya se ha inicializado
* @throws IllegalArgumentException cuando {@code fechaFinal==null} o {@code fechaInicial!=null && fechaFinal.isBefore(fechaInicial)}
*/
public void setFechaFinal(LocalDate fechaFinal) {
if (fechaFinal==null)
throw new IllegalArgumentException("La fecha final no puede ser null");
if (fechaInicial!=null && fechaFinal.isBefore(fechaInicial))
throw new IllegalArgumentException("La fecha final no puede ser anterior a la fecha inicial");
this.fechaFinal = fechaFinal;
}
/**
* Modifica el punto de amarre. Solo en inicialización.
* @param puntoDeAmarre, identifica el punto en el que se amarra el barco, deben ser números no negativos
* @throws IllegalArgumentException cuando {@code puntoDeAmarre<0}
*/
private void setPuntoDeAmarre(int puntoDeAmarre) {
if (puntoDeAmarre<0)
throw new IllegalArgumentException("Los puntos de amarre deben ser números no negativos");
this.puntoDeAmarre = puntoDeAmarre;
}
/**
* Consulta la cantidad de días desde el comienzo hasta la finalizaciónd del alquiler
* @return el resultado siempre es mayor que cero
*/
public long getCantidadDeDiasEnAlquiler() {
return fechaInicial.until(fechaFinal, ChronoUnit.DAYS);
//return ChronoUnit.DAYS.between(fechaInicial, fechaFinal);
}
/**
* Consulta el el precio que habría que pagar por este alquiler
* @return el resultado siempre es mayor que cero, el resultado
* se calcula multiplicando el numero de días de alquiler
* por un módulo en función de cada barco y por un valor fijo (@see #FIJO)
*/
public double getPrecioAlquiler() {
return FIJO*getCantidadDeDiasEnAlquiler()*barco.getModulo();
}
}
package barcos;
/**
* Clase que implementa un tipo general de barcos
* @author yania
*
*/
public class Barco {
/**
* Factor que se aplica a los metros de eslora para calcular el módulo del barco
*/
public static final int FACTOR_DE_MODULO = 10;
/**
* Año por debajo del cual no se aceptan barcos en alquiler al considerarse una antigüedad
*/
public static final int MUSEABLE = 1900;
private int añoFabricación;
private String matricula;
private double metrosDeEslora;
/**
* Inicialización de objeto barco con los datos necesarios
* @param añoFabricación, se requiere que no sea una antigüedad
* @param matricula, se requiere (a falta de otra especificación) que no sea null o vacía
* @param metrosDeEslora, se requiere que sea positiva
* @throws IllegalArgumentException cuando {@code añoFabricación<=MUSEABLE} o
* {@code matricula==null} o {@code matricula.isEmpty()} o {@code metrosDeEslora<=0}
*/
public Barco(int añoFabricación,
String matricula,
double metrosDeEslora) {
setAñoFabricación(añoFabricación);
setMatricula(matricula);
setMetrosDeEslora(metrosDeEslora);
}
/**
* Consulta el año de fabricación del barco
* @return el resultado siempre es {@code > MUSEABLE}
*/
public int getAñoFabricación() {
return añoFabricación;
}
/**
* Consulta la matrícula del barco
* @return el resultado siempre es distinto de null y no vacío
*/
public String getMatricula() {
return matricula;
}
/**
* Consulta los metros de eslora del barco
* @return el resultado siempre es positivo
*/
public double getMetrosDeEslora() {
return metrosDeEslora;
}
/**
* Modificar el año de fabricación. Solamente desde inicialización.
* @param añoFabricación, se requiere que no sea una antigüedad
* @throws IllegalArgumentException cuando {@code añoFabricación<=MUSEABLE}
*/
private void setAñoFabricación(int añoFabricación) {
if (añoFabricación<=MUSEABLE)
throw new IllegalArgumentException("No se admiten barcos antiguos, requiere seguro especial.");
this.añoFabricación = añoFabricación;
}
/**
* Modificar la matrícula. Solamente desde inicialización.
* @param matricula, se requiere (a falta de otra especificación) que no sea null o vacía
* @throws IllegalArgumentException cuando {@code matricula==null} o {@code matricula.isEmpty()}
*/
private void setMatricula(String matricula) {
if (matricula==null)
throw new IllegalArgumentException("La matrícula no puede ser null.");
if (matricula.isEmpty())
throw new IllegalArgumentException("La matrícula no puede ser cadena vacía.");
this.matricula = matricula;
}
/**
* Modificar los metros de eslora. Solamente desde inicialización.
* @param @param metrosDeEslora, se requiere que sea positiva
* @throws IllegalArgumentException cuando {@code metrosDeEslora<=0}
*/
private void setMetrosDeEslora(double metrosDeEslora) {
if (metrosDeEslora<=0)
throw new IllegalArgumentException("La medida de eslora debe ser positiva");
this.metrosDeEslora = metrosDeEslora;
}
/**
* Consulta el módulo del barco consiste en tener en cuenta los metros de eslora por un factor (@see #FACTOR)
* @return el resultado siempre es positivo
*/
public double getModulo() {
return FACTOR_DE_MODULO*metrosDeEslora;
}
}
}
package barcos;
public class EmbarcacionAMotor {
/**
* Clase que implementa un tipo especial de barco que
* funciona a motor.
* @author yania
*
*/
public class EmbarcacionAMotor extends Barco {
private double potenciaMotorEnCV;
/**
* Inicialización del barco a motor
* @param añoFabricación @see Barco#Barco
* @param matricula @see Barco#Barco
* @param metrosDeEslora @see Barco#Barco
* @param potenciaMotorEnCV es la potencia del motor en CV, debe ser un valor positivo
* @throws IllegalArgumentException cuando {@code potenciaMotorEnCV<=0} <br>
* y en las situaciones descritas en @see Barco#Barco
*/
public EmbarcacionAMotor(int añoFabricación,
String matricula,
double metrosDeEslora,
double potenciaMotorEnCV) {
super(añoFabricación, matricula, metrosDeEslora);
setPotenciaMotorEnCV(potenciaMotorEnCV);
}
/**
* Consulta la potencia del motor en CV
* @return el resultado se garantiza positivo
*/
public double getPotenciaMotorEnCV() {
return potenciaMotorEnCV;
}
/**
* Modifica el valor de la potencia del motor. Solo en Inicialización
* @param potenciaMotorEnCV es la potencia del motor en CV, debe ser un valor positivo
* @throws IllegalArgumentException cuando {@code potenciaMotorEnCV<=0}
*/
private void setPotenciaMotorEnCV(double potenciaMotorEnCV) {
if (potenciaMotorEnCV<=0)
throw new IllegalArgumentException("La potencia del motor debe ser una cantidad positiva");
this.potenciaMotorEnCV = potenciaMotorEnCV;
}
/**
* Consulta el módulo para este tipo de embarcación en particular
* añade la potencia del motor al módulo que se describe en @see Barco#getModulo()
*/
@Override
public double getModulo() {
return super.getModulo() + getPotenciaMotorEnCV();
}
}
package barcos;
import java.time.LocalDate;
public class Persona {
private String nombre;
private String dni;
private LocalDate fechaNacimiento;
public Persona(String nombre, String dni, LocalDate fechaNacimiento) {
this.nombre = nombre;
this.dni = dni;
this.fechaNacimiento = fechaNacimiento;
}
public String getNombre() {
return nombre;
}
public String getDni() {
return dni;
}
public LocalDate getFechaNacimiento() {
return fechaNacimiento;
}
}
package barcos;
public class Velero {
/**
* Clase que implementa un tipo especial de barco que
* funciona a velas.
* @author yania
*
*/
public class Velero extends Barco {
private int numeroDeMastiles;
/**
* Inicialización del barco a motor
* @param añoFabricación @see Barco#Barco
* @param matricula @see Barco#Barco
* @param metrosDeEslora @see Barco#Barco
* @param numeroDeMastiles es la cantidad de mástiles que tiene el velero, tiene que ser un valor positivo
* @throws IllegalArgumentException cuando {@code numeroDeMastiles<=0} <br>
* y en las situaciones descritas en @see Barco#Barco
*/
public Velero(int añoFabricación,
String matricula,
double metrosDeEslora,
int numeroDeMastiles) {
super(añoFabricación, matricula, metrosDeEslora);
setNumeroDeMastiles(numeroDeMastiles);
}
/**
* Consulta el número de mástiles del velero
* @return el resultado se garantiza positivo
*/
public int getNumeroDeMastiles() {
return numeroDeMastiles;
}
/**
* Modifica el número de mástiles del velero. Solo en Inicialización
* @param numeroDeMastiles es número de mástiles del velero, debe ser un valor positivo
* @throws IllegalArgumentException cuando {@code numeroDeMastiles<=0}
*/
private void setNumeroDeMastiles(int numeroDeMastiles) {
if (numeroDeMastiles<=0)
throw new IllegalArgumentException("El número de mástiles debe ser una cantidad positiva");
this.numeroDeMastiles = numeroDeMastiles;
}
/**
* Consulta el módulo para los veleros en particular
* añade la cantidad de mástiles al módulo que se describe en @see Barco#getModulo()
*/
@Override
public double getModulo() {
return super.getModulo() + getNumeroDeMastiles();
}
}
package barcos;
public class Yate {
/**
* Clase que implementa un tipo especial de embarcación a motor que
* tiene camarotes.
* @author yania
*/
public class Yate extends EmbarcacionAMotor {
private int numeroCamarotes;
/**
* Inicialización del yate
* @param añoFabricación @see EmbarcacionAMotor#EmbarcacionAMotor
* @param matricula @see EmbarcacionAMotor#EmbarcacionAMotor
* @param metrosDeEslora @see EmbarcacionAMotor#EmbarcacionAMotor
* @param potenciaMotorEnCV @see EmbarcacionAMotor#EmbarcacionAMotor
* @param numeroCamarotes es la cantidad de camarotes del yate, debe ser un valor positivo
* @throws IllegalArgumentException cuando {@code numeroCamarotes<=0} <br>
* y en las situaciones descritas en @see EmbarcacionAMotor#EmbarcacionAMotor
*/
public Yate(int añoFabricación,
String matricula,
double metrosDeEslora,
double potenciaMotorEnCV,
int numeroCamarotes) {
super(añoFabricación, matricula, metrosDeEslora, potenciaMotorEnCV);
setNumeroCamarotes(numeroCamarotes);
}
/**
* Consulta la cantidad de camarotes que tiene el yate
* @return el resultado se garantiza positivo
*/
public int getNumeroCamarotes() {
return numeroCamarotes;
}
/**
* Modifica el número de camarotes del yate. Solo en Inicialización
* @param numeroCamarotes es el número de camarotes, debe ser un valor positivo
* @throws IllegalArgumentException cuando {@code numeroCamarotes<=0}
*/
private void setNumeroCamarotes(int numeroCamarotes) {
if (numeroCamarotes<=0)
throw new IllegalArgumentException("");
this.numeroCamarotes = numeroCamarotes;
}
/**
* Consulta el módulo para los yates en particular
* añade la cantidad de camarotes al módulo que se describe en @see EmbarcacionAMotor#getModulo()
*/
@Override
public double getModulo() {
return super.getModulo() + getNumeroCamarotes();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment