Java - Ejercicio herencia y creación de clases

 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 20 puestos en Java (en relación al último mes)
Gráfica de Java

Ejercicio herencia y creación de clases

Publicado por aka (2 intervenciones) el 20/01/2019 11:52:33
Hola, tengo este ejercicio y estoy teniendo problemas a la hora de realizar la clase BilleteDeIdaYVuelta. También me gustaría que me dieran un repaso al resto de clases que pongo y si esta bien realizada la herencia. Otra cosa que no me gusta (y por eso pongo todo el codigo) es que BilleteAbierto, no me deja llamar a super() sin argumentos, para luego asignarlo manualmente. Ahora mismo lo he parcheado para que si no recibe un null, lance una excepcion.


En una compañia de buses para viajes interprovinciales los billetes tienen una fecha y hora asi como un inicio y un de trayecto que indican la ciudad de salida y la ciudad de llegada respectivamente. Estos datos se establecen al crearse el billete y no son modificables posteriormente. Para estos billetes puede consultarse su precio asi
como obtener un String con los datos que caracterizan el billete (metodo toString).

La compañia desea añadir soporte para diferentes tipo de billetes. A partir de la clase Billete que ya se tiene, y sin realizar modificaciones a dicha clase, se desea añadir el soporte para billetes infantiles, billetes abiertos y billetes de ida y vuelta. Todas los nuevos tipos de billete responderan al mensaje toString con los datos que caracterizan a cada tipo de billete. Tambien todos los tipos de billetes responderan a la consulta sobre el precio del billete teniendo en cuenta lo siguiente.

En el caso de los billetes infantiles se aplica un descuento del 50 % sobre el precio del billete normal. Los billetes infantiles requieren registrar datos sobre el viajero porque tanto para poder emitir el billete debería comprobarse que el viajero tiene menos de 12 años, y esa misma informacion es util para el momento de viajar comprobar que quien viaja con ese billete es el niño para el que se emitio.

Los billetes abiertos permiten tener la fecha y hora del billete sin determinar. Estos billetes por su exibilidad aplican un incremento del 10 % sobre el precio del billete normal a menos que se tenga identicado al viajero en cuyo caso no se produce ningun incremento de precio.

Los billetes de ida y vuelta deben estar formados por dos billetes del mismo tipo (normal, infantil, abierto). En un billete de ida y vuelta debe cumplirse que el inicio de trayecto del primer billete es igual al fin de trayecto del segundo billete mientras que el fin de trayecto del primer billete es igual al inicio de trayecto del segundo
billete. Para los billetes de ida y vuelta la compañia aplica un descuento del 15 % sobre el precio conjunto de la ida y de la vuelta.

Se cuenta con una clase Persona que tiene un metodo public int getEdad().

Dada la clase Billete, como se muestra a continuacion, implemente las clases BilleteInfantil, BilleteAbierto y
BilleteDeIdaYVuelta.


La clase Billete me la dan por defecto y no puedo modificarla:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.time.LocalDateTime;
 
public class Billete {
    private LocalDateTime fechaYhora;
    private String inicioTrayecto;
    private String finTrayecto;
 
    public Billete(LocalDateTime fechaYhora, String inicioTrayecto,
            String finTrayecto) {
        assert (isFechaYHoraCorrecta(fechaYhora));
        assert (isTrayectoCorrecto(inicioTrayecto, finTrayecto));
    }
 
    public double getPrecio() {
    }
 
    @Override
    public String toString() {
 
    }
 
    public String getInicioTrayecto() {
 
    }
 
    public String getFinTrayecto() {
 
    }
 
    public LocalDateTime getFechaYHora() {
 
    }
 
    public boolean isFechaYHoraCorrecta(LocalDateTime fechaYhora) {
        return fechaYHora != null && fechaYhora.isAfter(LocalDateTime.now());
    }
 
    public boolean isTrayectoCorrecto(String inicioTrayecto, String finTrayecto) {
        return inicioTrayecto != null && finTrayecto != null
                && !inicioTrayecto.isEmpty() && !finTrayecto.isEmpty()
                && !inicioTrayecto.equals(finTrayecto);
    }
}



Persona

1
2
3
4
5
6
7
8
9
10
public class Persona {
 
	public Persona(){
 
	}
 
	public int getEdad(){
 
	}
}



BilleteInfantil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class BilleteInfantil extends Billete {
 
	private Persona persona;
 
	public BilleteInfantil(LocalDateTime fechaYhora, String inicioTrayecto,
			String finTrayecto, Persona persona) {
		super(fechaYhora, inicioTrayecto, finTrayecto);
 
		if (persona.getEdad() > 13) {
			throw new IllegalStateException(
				"No es menor de 12 y no es de la misma persona");
		}
		this.persona = persona;
 
	}
 
	@Override
	public String toString() {
		return "El billete es de tipo infantil, con inicio trayecto "
				+ super.getInicioTrayecto() + " y fin de trayecto "
				+ super.getFinTrayecto() + " con un precio de " + getPrecio();
	}
 
	@Override
	public double getPrecio() {
		return super.getPrecio() * 0.5;
	}
}



BilleteAbierto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class BilleteAbierto extends Billete {
 
	private LocalDateTime fechaYhora;
	private boolean localizada;
 
	public BilleteAbierto(LocalDateTime fechaYhora, String inicioTrayecto,
	String finTrayecto, Persona persona) {
 
		super(fechaYhora, inicioTrayecto, finTrayecto);
		localizada = true;
		this.fechaYhora = fechaYhora;
		if (fechaYhora != null) {
			throw new IllegalArgumentException("No es billete abierto");
		}
		if (persona == null) {
			setLocalizada(false);
		}
 
	}
 
	@Override
	public double getPrecio() {
		if (getLocalizada()) {
			return super.getPrecio();
		} else {
			return super.getPrecio() * 1.1;
		}
	}
 
	public boolean getLocalizada() {
		return localizada;
	}
 
	public void setLocalizada(boolean localizada) {
		this.localizada = localizada;
	}
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder