VideoClub java
Alquiler de películas en un vídeo-club
Supongamos que tenemos que desarrollar una aplicación
que gestione los alquileres de DVDs en un vídeo-club.
Inicialmente, nuestro diagrama de clases sería similar al siguiente:
public class DVD
{
// Constantes simbólicas
public static final int INFANTIL = 2;
public static final int NORMAL
= 0;
public static final int NOVEDAD= 1;
// Variables de instancia
private String _titulo;
private int
_tipo;
// Constructor
public DVD (String titulo, int tipo)
{
_titulo = titulo;
_tipo
= tipo;
}
OOP - Caso práctico: Vídeo-club
-1-
© Fernando Berzal
// Acceso a las variables de instancia
public int getTipo()
{
return _tipo;
}
public void setTipo (int tipo)
{
_tipo = tipo;
}
public String getTitulo (){
return _titulo;
}
}
public class Alquiler
{
private DVD _dvd;
private int _tiempo;
public Alquiler (DVD dvd, int tiempo)
{
_dvd = dvd;
_tiempo = tiempo;
}
public int getTiempo()
{
return _tiempo;
}
public DVD getDVD()
{
return _dvd;
}
}
OOP - Caso práctico: Vídeo-club
-2-
© Fernando Berzal
import java.util.Vector;
public class Cliente
{
// Variables deinstancia
private String _nombre;
private Vector _alquileres =new Vector();
// Constructor
public Cliente (String nombre)
{
_nombre = nombre;
}
// Acceso a las variables de instancia
public String getNombre()
{
return _nombre;
}
// Registrar alquiler
public void nuevoAlquiler (Alquiler alquiler)
{
_alquileres.add(alquiler);
}
// Emitir un informe del cliente
public String
{double
double
int
int
Alquiler
String
informe()
total;
importe;
puntos;
i;
alquiler;
salida;
total = 0;
puntos = 0;
salida = "Informe para " + getNombre() + "\n";
OOP - Caso práctico: Vídeo-club
-3-
© Fernando Berzal
// Recorrido del vector de alquileres
for (i=0; i2)
importe += (alquiler.getTiempo()-2)*1.5;
break;
case DVD.NOVEDAD:
importe += alquiler.getTiempo()* 3;
break;
case DVD.INFANTIL:
importe += 1.5;
if (alquiler.getTiempo()>3)
importe += (alquiler.getTiempo()-3)*1.5;
break;
}
// Programa de puntos
puntos++;
if ( (alquiler.getDVD().getTipo()==DVD.NOVEDAD)
&& (alquiler.getTiempo()>1) )
puntos++;
// Bonificación
// Mostrar detalles del alquiler
salida += "\t" + alquiler.getDVD().getTitulo()
+ "\t" + String.valueOf(importe) + " \n";
// Acumular total
total += importe;
}
OOP - Caso práctico: Vídeo-club
-4-
© Fernando Berzal
// Pie del informe
salida += "IMPORTE TOTAL = "
+ String.valueOf(total) + "
\n";
salida += "Dispone de "
+ String.valueOf(puntos) + " puntos\n";
return salida;
}
}
Paso 1: Extraer método de informe()
El método informe es excesivamente largo…
public class Cliente…public double precio (Alquiler alquiler)
{
double importe = 0;
switch (alquiler.getDVD().getTipo()) {
case DVD.NORMAL:
importe += 2;
if (alquiler.getTiempo()>2)
importe += (alquiler.getTiempo()-2)*1.5;
break;
case DVD.NOVEDAD:
importe += alquiler.getTiempo() * 3;
break;
case DVD.INFANTIL:
importe += 1.5;
if (alquiler.getTiempo()>3)
importe += (alquiler.getTiempo()-3)*1.5;
break;
}return importe;
}
OOP - Caso práctico: Vídeo-club
-5-
© Fernando Berzal
public String
{
double
double
int
int
Alquiler
String
informe()
total;
importe;
puntos;
i;
alquiler;
salida;
total = 0;
puntos = 0;
salida = "Informe para " + getNombre() +
"\n";
for (i=0; i1))
puntos++;
// Bonificación
// Mostrar detalles del alquiler
salida += "\t" +alquiler.getDVD().getTitulo()
+ "\t" + String.valueOf(importe) + " \n";
// Acumular total
total += importe;
}
// Pie del recibo
salida += "IMPORTE TOTAL = "
+ String.valueOf(total) + "
\n";
salida += "Dispone de "
+ String.valueOf(puntos) + " puntos\n";
return salida;
}
OOP - Caso práctico: Vídeo-club
-6-
© Fernando Berzal
Debemos comprobar que calculamos correctamente...
Regístrate para leer el documento completo.