Java - Ayuda con este ejercicio

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

Ayuda con este ejercicio

Publicado por aka (2 intervenciones) el 19/01/2019 16:40:12
Hola, tengo este ejercicio en el cual no puedo modificar la clase "Factura" y me está dando quebraderos de cabeza. No se si alguien podría ayudarme. Tengo la clase "Premium", pero se que esta mal por que llama a métodos del padre para calcular el total() y de ahi me coge el del pagoMusica() y no el de la clase hija (con el problema que tengo que no se su funcionamiento). Con el resto de clases me pasa lo mismo

Una empresa comercializa desde hace tiempo contenidos digitales en pago por visión. Para la gestión de las facturas de los clientes disponen de una clase Factura a cuyo código no podemos accedes, pero la que conocemos la siguiente información:

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
public class Factura {
 
	public Factura(Cliente cliente){
 
		// Anota el pago de un contenido musical
		public void pagoMusica(Contenido c, double cantidad){
 
		}
		// Anota el pago de un capitulo de una serie
		public void pagoSerie(Contenido c, double cantidad){
 
		}
		// Anota el pago de un contenido de cine
		public void pagoPelicula(Contenido c, double cantidad){
 
		}
		// Importe total de la factura en este momento 
		public double total(){
 
		}
		// Aclaraciones sobre la factura
		public String observaciones(){
 
		}
		// Pone a cero la factura
		public void reset(){
 
		}
 
	}
 
}
Ahora se desea lanzar ofertas para algunos clientes. En concreto

Premium. Dirigida para los grandes consumidores de música. En ella, a cambio de un incremento fijo en la factura, 3 en la actualidad, todos los contenidos musicales consumidos se facturan a coste cero, El resto de los conceptos se facturan normalmente.

SerieAdictos. De cada dos episodios, el primero se factura normalmente, el segundo a coste cero, El resto de los conceptos se facturan normalmente.

CineCien. En cada periodo de facturación, las primeras cien películas consumidas se facturan a coste cero, con un incremento de la factura que es negociado con cada uno de los clientes (5 en general), El resto de la factura los contenidos se facturan normalmente.

Ademas se ha insistido en, salvo los precios modificados y una linea adicional en observaciones que indica el tipo de oferta que se esta aplicando, los contenidos de una factura deben ser las mismas que hasta ahora.

Elabore las clases que resuelven el problema, considerando que no podemos modificar la clase Factura ni hacer hipótesis de si funcionamiento
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con este ejercicio

Publicado por Kabuto (1381 intervenciones) el 19/01/2019 20:39:59
Hola.

Efectivamente tienes que coger los métodos de la clase padre y, sin saber como funcionan, agregar la funcionalidad necesaria para cumplir las condiciones de cada tipo de oferta.
No solo los métodos, necesitarás nuevos atributos y tal vez ampliar algún constructor.

Si no me equivoco, creo que quedaría resuelto de este modo:

Clase Premium
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Premium extends Factura{
 
	final int INCREMENTO = 3; //El incremento es fijo e inalterable
 
	public Premium(Cliente c) {
		super(c);
	}
 
	@Override
	public void pagoMusica(Contenido c, double cantidad){
		super.pagoMusica(c, 0); //La musica tiene coste cero
	}
 
	@Override
	public double total(){
		return super.total() + INCREMENTO; //Incluimos el incremento por el tipo de oferta
	}
 
	@Override
	public String observaciones(){
		return super.observaciones() + "\nTipo de oferta aplicada: Premium";
	}
 
}

Clase SerieAdictos
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
public class SerieAdictos extends Factura{
 
	private int contadorEpisodios = 0; //Contamos cada episodio visualizado por el cliente
 
	public SerieAdictos(Cliente c) {
		super(c);
	}
 
	@Override
	public void pagoSerie(Contenido c, double cantidad){
 
		contadorEpisodios++;
		//Si solo se factura un episodio de cada dos...
		//podemos decir que solo facturamos los episodios impares
		//que va anotando el contador
		if (contadorEpisodios % 2 == 0)
			super.pagoSerie(c, 0); //Par, tiene coste cero
		else
			super.pagoSerie(c, cantidad); //Impar, se factura normal
	}
 
	@Override
	public String observaciones(){
		return super.observaciones() + "\nTipo de oferta aplicada: SerieAdictos";
	}
 
}

Clase CineCien
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
public class CineCien extends Factura{
 
	private int cuentaPeliculas = 0; //Contamos cada pelicula visionada
	private int incremento; //El incremento es negociable, nos darán su valor en el constructor
 
	public CineCien(Cliente c, int incremento) {
		super(c);
		this.incremento = incremento;
	}
 
	@Override
	public void pagoPelicula(Contenido c, double cantidad){
 
		cuentaPeliculas++;
		if (cuentaPeliculas <= 100)
			super.pagoPelicula(c, 0);
		else
			super.pagoPelicula(c, cantidad); //Tras visionar 100 pelis, se factura normal
	}
 
	@Override
	public double total(){
		return super.total() + incremento; //Añadimos el incremento aplicable a esta oferta
	}
 
	@Override
	public void reset(){
		super.reset();
		cuentaPeliculas = 0; //Reset implica nuevo periodo de facturacion, asi que el contador vuelve a cero
	}
 
	@Override
	public String observaciones(){
		return super.observaciones() + "\nTipo de oferta aplicada: CineCien";
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar