Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• Genéricas
• Pasos de la reestructuración
• Problemas de la reestructuración
Evidencias
• 10% Importancia de la Reestructuración de
códigos
• 25% Prácticas
• 60% Examen
Refactoring
• ¿Si su software fuera un edificio, se parecería
mas a uno de la izquierda o de la derecha?
Definición
• Refactoring (Reestructuración) es modificar el
comportamiento interno (generalmente código
fuente) sin modificar su comportamiento
externo (apariencia, funcionalidad).
• “Código mutante”
• “Diseño roto”
• El código es antiguo y muy grande
• Falta de planeación y documentación
• No tiene duplicación
• Óptimas:
• Atributos: ancho, alto: int
• Origen: punto
• Caso1:
double calcRngMaxPer() {
.... }
• Caso 2:
double calcularRangoMaximoPermitido() {
....
Ejemplo 3 Renombrar Métodos
• ¿Por qué?
• Cómo puede observarse en algunas
situaciones las recomendaciones de refactoring
pueden ser algo subjetivas.
class CalculoSimple {
public static double CalcularCincunferencia
(double diametro)
{ return 3.14 * diametro; }
}
Ejemplo 4 números mágicos
• ¿Cómo debe de quedar la reestructuración?
class CalculoSimple {
public const double PI = 3.14;
public static double CalcularCincunferencia
(double diametro)
{ return PI * diametro; }
}
• Para reducir:
– Decadencia /Envejecimiento del software
– Complejidad del software
– Costos de mantenimiento
• Para incrementar
– Comprensión del software
• Reestructuración de Documentos
• INGENIERÍA INVERSA
• Reestructuración de Códigos
• Reestructuración de Datos
• Ingeniería directa
Ingeniería Inversa
• Se aplica para obtener un modelo detallado de
análisis, ingeniería de requerimientos, diseño y
en algunos casos implementación teniendo una
solución, la cual es una actividad consumidora
de tiempo.
• Java
– Xrefactory, RefactorIT, jFactor, IntelliJ IDEA
• C++
– CppRefactory, Xrefactory
• C#
– C# Refactoring Tool, C# Refactory
Herramientas de Refactoring
• Los principales IDE’s las contienen de forma
natica
• NetBeans: RefactorIT
• Oracle Jdeveloper: RefactorIT
• Borland Jbuilder: RefactorIT
REFACTORIZACIÓN PATRONES DE
DISEÑO
Solución al Refactoring
• Los patrones están especificados siguiendo un formato
estándar:
1. Nombre
2. Tambien conocido como
3. Propiedades—Tipo, Nivel
4. Propósito ---¿Para que sirve?
5. Presentación --- Problema que soluciona (con ejemplos)
6. Aplicabilidad --- Cuando y por qué debería usarse
7. Descripción --- Que hace y como se comporta de forma detallada
8. Implementación ---¿Cómo implementarlo?
9. Ventajas e inconvenientes
10.Variantes
11.Patrones relacionados
12.Ejemplo
Solución al Refactoring
• Los patrones suponen una evolución en
abstracción y reutilización del software.
• @author nombre_desarrollador
• @deprecated descripción //indica un método
que no se utiliza su uso
Javadoc
• @param nombre descripción
• @return descripción //no se debe utilizar con
métodos void.
• @see referencia //asocia con otro elemento el
cual puede ser: #método(); clase#método();
paquete#método(); paquete.clase#método().
• @throws clase descripcion
• @version versión
Javadoc
• La documentación se crea de la siguiente
forma: javadoc archivo.java
• Sugerencias de refactoring:
• Generales:
• Basadas en la Granularidad
– Primitivas VS Compuestas
– Pequeñas VS Grandes
Categorías de “Refabricación”
• Basadas en el Lenguaje de Programación
– Lenguajes específicos (Java, Smalltalk, …)
– Independientes del Lenguaje
• Basadas en el grado de Formalidad
– Formal
– No Formal
– Semi-formal
• Basadas en el grado de Automatización
– Totalmente automatizadas
– Interactivas
– Totalmente manuales
Catálogo de Ref. de NetBeans
• Renombrar (Rename)
– Cambia el nombre de una clase
• Mover (move)
– Mueve de forma segura una clase a otra ubicación
• Copiar (copy)
– Copia una clase a otra ubicación
A
A
m this.n
m
n
B C D B C D
m m n n super.n
Categorías de Refactoring
• Optimización de Jerarquía de Clases: Mejorar
la estructura jerárquica de la clase por medio
de descomponer una clase compleja y grande,
en varias clases pequeñas.
• Reemplazar
Refactorización Pequeña
• Descomposición de Métodos
• Introducir variables de Explicación
– Cuando tienes una expresión compleja, introduce el
resultado de la expresión (o partes de ella) en una
variable temporal que explique el propósito..
– PARA QUE??? Reducir la complejidad de las
expresiones para mayor claridad en el código.
Refactorización Pequeña
• Descomposición de métodos
• Fraccionar variables temporales
– Cuando se asigna una variable temporal más de
una vez, pero no es una variable de control (de
ciclo) ni tampoco una variable de alguna colección
(estructura), se debe fraccionar la variable
haciendo una variable diferente para cada
asignación.
– POR QUE??? Utilizar variables temporales más de
una vez (para mas de una cosa) es confuso.
Refactorización Pequeña
• Descomposición de métodos
• Fraccionar variables temporales
Const. cod. sobre cod. Des.
• En el conpceto tradicional de Refactoring se
necesita que haya código existente
previamente (software legado).
• int NNOMBREINVALIDO;
• int nNombre_Incorrecto;
Notación Húngara
• Las funciones o subrutinas no se les agrega
abreviaciones, se recomiendan tengan un
nombre descriptivo.