videoclub

Páginas: 9 (2060 palabras) Publicado: 7 de junio de 2015
Caso práctico
Alquiler de películas en un vídeo-club

Adaptado de “ Refactoring” © Martin Fowler, 2000







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; publicstatic 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 de instancia

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 uninforme del cliente

public String informe()

{

double total;

double importe;

int puntos;

int i;

Alquiler alquiler;

String 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; i<_alquileres.size(); i++) {

importe = 0;
alquiler = (Alquiler) _alquileres.get(i);// Importe del alquiler

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;

}

// 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 informe()

{

double total;
double importe;

int puntos;
int i;

Alquiler alquiler;

String salida;

total = 0;puntos = 0;

salida = "Informe para " + getNombre() + "\n";

for (i=0; i<_alquileres.size(); i++) {

alquiler = (Alquiler) _alquileres.get(i); importe = precio(alquiler);

// 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"...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Videoclub
  • Sistema de videoclub
  • VideoClub java
  • Dfd de videoclub
  • Videoclub
  • Videoclub
  • Videoclub
  • Gestion de videoclub uml

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS