Vous êtes sur la page 1sur 20

Refactoring

Copyright Cenfotec S.A. 2005

Refactoring de dnde viene?


Mdulo 1

Mdulo 2 FACTORING

Mdulo 3

Entonces REfactoring, es reacomodar las clases y sus elementos constituyentes

Copyright Cenfotec S.A. 2005

Refactoring
Qu es? Es hacer cambios a un cdigo fuente para mejorar su estructura interna sin modificar su estructura externa(sic)
-Martin Fowler

Mejorar el diseo una vez que ha sido escrito Es un proceso disciplinado, e incluso cajonero,pero que requiere mucha atencin al detalle y una comprensin profunda del cdigo. La gestin de configuracin es crtica.

Copyright Cenfotec S.A. 2005

Refactoring Por qu?


Se mejora la calidad del diseo del software y se previene su decaimiento Se mejora la inteligibilidad del software Ayuda a encontrar errores Permite programar ms rpidamente

Copyright Cenfotec S.A. 2005

Refactoring Porqu?
Los sistemas casi siempre con el tiempo, se vuelven ms confusos

La arquitectura se pieeeeerdeeee.
Copyright Cenfotec S.A. 2005

Las leyes de Lehman


Todos los programas resuelven problemas del mundo real, basados en una especificacin E que delimita un dominio para construir el programa PE. Ante los cambios en el mundo real, la especificacin E de un programa PE, obliga al cambio El software que no cambia, se vuelve inservible

Copyright Cenfotec S.A. 2005

Refactoring Cundo hacerlo?


Antes de agregar funcionalidades Antes de arreglar una pulga Cuando se revisa el cdigo Los efectos inmediatos de este proceso se ven en: Mejora en la mantenibilidad Es ms fcil hacer tunning del sistema

Copyright Cenfotec S.A. 2005

Refactoring Cundo NO hacerlo?


Cuando es mejor empezar de cero Cuando se est cerca de un deadline Cuando el cdigo est mal y simplemente no funciona En tricky code

Copyright Cenfotec S.A. 2005

Refactorizacin
Es requisito imprescindible para realizar refactoring, tener Pruebas preparadas para realizar sobre los elementos que se van a refactorizar

Sin pruebas, no se puede hacer refactoring.

Copyright Cenfotec S.A. 2005

Ejemplos de Refactoring

Copyright Cenfotec S.A. 2005

Extraiga un mtodo
Convierta un fragmento de cdigo en un mtodo que explique el propsito del mismo. Si tiene un conjunto de operaciones repetidas en varios mtodos, convirtalas en un nuevo mtodo privado dentro del objeto.

Copyright Cenfotec S.A. 2005

Extraiga un mtodo (antes)


public void imprimeX() { ClaseX x = obtieneX(); System.out.println ("Nombre: " + x.nombre); System.out.println (Cantidad: " + x.cantidad); }

public void imprimeY() { ClaseY y = obtieneY(); System.out.println ("Nombre: " + y.toString); System.out.println (Cantidad: " + y.getMiembros); }

Copyright Cenfotec S.A. 2005

Extraiga un mtodo (despus)


public void imprimeX() { ClaseX x = obtieneX(); this.imprimirDatos(x.nombre, x.cantidad); } public void imprimeY() { ClaseY y = obtieneY(); this.imprimirDatos(y.toString, y.getMiembros()); } private void imprimirDatos(String nombre, int cantidad) { System.out.println ("Nombre: " + nombre); System.out.println (Cantidad: " + cantidad); }
Copyright Cenfotec S.A. 2005

Esquema general de Refactoring


Asegrese de la existencia de los respaldos apropiados Obtenga las pruebas que necesita aplicar. Identifique los puntos de cambio. Realice los cambios Pruebe Remueva las partes de cdigo ahora innecesarias

Copyright Cenfotec S.A. 2005

Refactoring (Ejemplos)
Remplace el mtodo con un Objeto Si tiene un mtodo extenso que usa varias variables locales,convirtalo en un objeto y descomponga el mtodo dentro del objeto Crea una nueva clase con el nombre del mtodo. La clase tendr como atributos los parmetros del mtodo (recuerde ocultamiento de informacin). Estos campos deben inicializarse en el constructor. Crea un mtodo pblico llamado CalcularXXX RealizarXXX. Sustituya el mtodo en el cdigo por la creacin del objeto + el llamado al mtodo.

Copyright Cenfotec S.A. 2005

Refactoring (Ejemplos)
Remplace los if anidados con clausulas individuales.
If (condicin) then return X else If (condicin2) then return Y else If (condicion3) then return Z end If If (condicin) Then return X End If If (condicin2)Then return Y End If If (condicion3)Then return Z End If

Copyright Cenfotec S.A. 2005

Refatoring (Ejemplos)
Si tiene un condicional que escoge distintas conductas dependiendo del tipo de objeto, haga que cada opcin corresponda a una subclase que implemente cada conducta usando mtodos abstractos. (Normalmente lo primero tiene que ver con un mal diseo).

Copyright Cenfotec S.A. 2005

Refactoring (Ejemplos)
Esconda un mtodo Si un mtodo pblico no es usado por ninguna otra clase, hgalo privado o protegido. Cambie las excepciones por chequeos: Si tiene una excepcin que pudo testear antes con un if, hgalo.

Copyright Cenfotec S.A. 2005

Bad Smells (Malos olores)


Cdigo duplicado Mtodos muy largos (ms de 25 lneas) Clases muy largas Hay varias instancias de una clase para realizar distintas tareas. Larga lista de parmetros Una clase es sujeto de cambios consistentemente en el tiempo Se hacen varios cambios relacionados con algo en varias partes del sistema Datos relacionados distribuidos en varias clases Sentencias case switch .
Copyright Cenfotec S.A. 2005

Porqu a cuesta refactorizar?


Los programadores no entienden el refactoring No tiene sentido si los beneficios son a largo plazo Se cree que puede ser peligroso para el sistema Es una actividad de retrabajo.. Es un overhead

Copyright Cenfotec S.A. 2005

Vous aimerez peut-être aussi