Refactoring

Páginas: 17 (4137 palabras) Publicado: 7 de diciembre de 2012
Refactorización - Refactoring

Refactoring
Tabla de contenidos
 Introducción: un ejemplo de refactoring
 Principios en refactoring
 Definiciones y orígenes
 ¿Por qué y cuando refactorizar?
 Problemas con las refactorizaciones

 Misceláneo:





Herramientas
Metodologías ágiles
Definición de nuevas refactorizaciones (Big – Low)
Conclusiones

 Bibliografía
Fowler, Refactoring: Improving the Design of Existing Code, AddisonWesley, 1999
1

Refactorización - Refactoring

Introducción
Definición
Refactoring son una serie de pequeñas transformaciones, cada uno de
las cuales cambia la estructura interna del programa sin cambiar su
comportamiento externo.

Verificación del comportamiento externo
 Testing – Prueba
 Análisis formal decódigo dirigido por herramientas

Refactoring
 Se parte de código existente y con el diseño subyacente en él
 Limpia el código para minimizar el coste de los cambios
 Mejora el diseño del código una vez que este ha sido escrito

2

Refactorización - Refactoring

Introducción: un ejemplo de refactoring
Contexto





Calculo e impresión de los alquileres en un Videoclub
Elcoste del alquiler depende del tiempo de alquiler y tipo de película.
Tipos de películas: regular, children, new-release.
El coste de alquiler también depende de los puntos de frecuencia en el
alquiler que dependen del tipo de película.

Movie
priceCode: int

Rental

1


daysRented: int

Customer


1

statement()

3

Refactorización - Refactoring

Class Movie
publicclass Movie {
public static final int
public static final int
public static final int

CHILDRENS = 2;
REGULAR = 0;
NEW_RELEASE = 1;

private String _title;
private int _priceCode;
public Movie(String title, int priceCode) {
_title = title;
_priceCode = priceCode;
}

public int getPriceCode() {
return _priceCode;
}

public void setPriceCode(int arg) {
_priceCode = arg;
}public String getTitle () {
return _title;
}
}

4

Refactorización - Refactoring

Class Rental

public class Rental {
private Movie _movie;
private int _daysRented;
public Rental(Movie movie, int daysRented) {
_movie = movie;
_daysRented = daysRented;
}
public int getDaysRented() {
return _daysRented;
}
public Movie getMovie() {
return _movie;
}
}

5 Refactorización - Refactoring

Class Customer
public class Customer {
private String _name;
private Vector _rentals = new Vector();
public Customer (String name)
{
_name = name;
};
public void addRental(Rental arg) {
_rentals.addElement(arg);
}
public String getName ()
{
return _name;
};
public String statement()…
1

6

Refactorización - Refactoring

Customer.statement()
public Stringstatement() {
1
double totalAmount = 0;
int frequentRenterPoints = 0;
Enumeration rentals = _rentals.elements();
String result = "Rental Record for " + getName() + "\n";
while (rentals.hasMoreElements()) {
double thisAmount = 0;
Rental each = (Rental) rentals.nextElement();
//determine amounts for each line
switch (each.getMovie().getPriceCode()) {
case Movie.REGULAR:
thisAmount +=2;
if (each.getDaysRented() > 2)
thisAmount += (each.getDaysRented() - 2) * 1.5;
break;
case Movie.NEW_RELEASE:
thisAmount += each.getDaysRented() * 3;
break;
case Movie.CHILDRENS:
thisAmount += 1.5;
if (each.getDaysRented() > 3)
thisAmount += (each.getDaysRented() - 3) * 1.5;
break;
}…

2

7

Refactorización - Refactoring

Customer.statement()
2
// add frequent renterpoints
frequentRenterPoints ++;
// add bonus for a two day new release rental
if ((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
each.getDaysRented() > 1)
frequentRenterPoints ++;
//show figures for this rental
result += "\t" + each.getMovie().getTitle()+ "\t" +
String.valueOf(thisAmount) + "\n";
totalAmount += thisAmount;
}
//add footer lines
result += "Amount owed is " +...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Reingeniería y Refactoring de C-NUTRA v2.0
  • Refactoring

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS