Refactoring con Netbeans

Documentos relacionados
TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Métodos CON valor de retorno

Derechos de Acceso: COMPOSICION

Java Optional ifpresent y como utilizarlo

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

HOJA DE EJERCICIOS 3 HERENCIA ENTRE CLASES Y POLIMORFISMO DE MÉTODOS

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C.

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

INTERFACE ITERATOR DEL API JAVA. MÉTODO REMOVE PARA BORRAR OBJETOS EN COLECCIONES. EJERCICIOS Y EJEMPLO RESUELTO. (CU00919C)

Tema 7.- Fundamentos de la Programación Orientada a Objetos

12. Tipos de atributos

UNADM. Estructura de datos. Guillermo Duran Garcia AL Actividad 2. Identificación de errores en métodos de ordenación

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

Guía práctica de estudio 07: Herencia

Estructuras de control selectivas

Prueba N o 1. Programación II

VI Promedio de temperaturas

Examen Teórico Convocatoria de Junio de 2012

Clases abstractas e interfaces en Java

INGENIERÍA EN SISTEMAS COMPUTACIONALES

HOJA DE EJERCICIOS 4 INTERFACES Y CLASES ABSTRACTAS EN JAVA Y C++

LISTAS CIRCULARES. // Métodos private CElemento() {} // constructor. ultimo

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

INTERFACE LIST. CLASE LINKEDLIST DEL API JAVA. EJERCICIO RESUELTO Y DIFERENCIAS ENTRE ARRAYLIST Y LINKEDLIST (CU00921C)

Estructura de datos y Programación

PROYECTO FIGURAS DIAGRAMA DE FLUJO

CLASE 9 -HERENCIA Y POLIMORFISMO

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Pasos requeridos para establecer el manejo de eventos para un componente de GUI.

Práctica 5c. Práctica 5c. José M. Ordax

Programación Orientada a Objetos en Java

Clases y herencia. FJP Unidad 8. Diseño de clases

APÉNDICE A: ACCESO A UNA BASE DE DATOS CON JDBC

Ejercicio 1 (proyecto prlistas, paquete listas)

Documentación en Java: Javadoc

PROGRAMACIÓN GENÉRICA

Práctica No. 5. Estructuras con Memoria Dinámica

2:30 horas clase I. OBJETIVOS. II. INTRODUCCI?N.

Manual de pizarra * Claudia Garcia 1 INSTRUCCIONES BÁSICAS PARA LA SMART BOARD 2 PUESTA EN FUNCIONAMIENTO. 3 Notebook

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

Curso de Java POO: Programación orientada a objetos

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Programación Orientada a Objetos en Java

FUNCIONES O MÉTODOS. Algoritmia y Programación

Tutorial Java con acceso a datos

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote METODOS CONSTRUCTORES Y LA REFERENCIA THIS

Examen. Programación II

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Programación orientada a objetos (I)

Java Interfaces y el concepto de simplicidad

Examen de Programación II (Ingeniería Informática)

Entiendo los métodos de Java equals y hashcode

LISTAS ENLAZADAS DOBLES C++

3.4 Clases y Objetos 05/04/2004. Conceptos Generales. Modificadores de la Clase. Estructura de una Clase. Variables Miembros

18. Interfaces Declaración de una interfaz

Herencia. Implementación en Java

Principios de Computadoras II

Práctica 10a. Práctica 10a. José M. Ordax

Programación en Lenguaje Java

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

Tema 4- Representación Enlazada

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Programación II Tipos Abstractos de Datos(TAD)

Construir una Interfaz Gráfica

SOBREESCRIBIR MÉTODOS EN JAVA: TOSTRING, EQUALS. EJEMPLOS Y EJERCICIOS RESUELTOS. COMPARAR OBJETOS. (CU00694B)

Relaciones entre clases

Bloque II. Elementos del lenguaje de programación Java

Instituto Tecnológico de Zacatecas. Departamento de Sistemas y Computación. Licenciatura en Informática. Organización de Datos

MANUAL DEL SOLICITANTE

Programación M.I. Gerardo Avilés Rosas Tercer Examen Parcial

Curso de Java POO: Programación orientada a objetos

HERENCIA. Problema: Reparar el el coche. Jesús (Valencia) Luis, Mecánico (Valencia) Antonio, Servicio Técnico Ferrari (Madrid)

Transcripción:

OpenStax-CNX module: m17586 1 Refactoring con Netbeans Miguel-Angel Sicilia This work is produced by OpenStax-CNX and licensed under the Creative Commons Attribution License 2.0 Abstract Aplicación de Refactoring a Netbeans. Breve descripción y caso práctico. Refactoring es el proceso de llevar a cabo cambios en su código sin afectar el comportamiento de la aplicación. 1 Caso práctico de Refactoring Tengo una aplicación bancaria que ya fue correctamente implementada, esta aplicación usa extensivamente una clase llamada Transacción, la cual posee una operación cuya rma es: public void asignarctacorriente(cuentacorriente cc); Esta operación es invocada una gran cantidad de veces por distintas operaciones en nuestra aplicación. El programa es que se debe cambiar la rma de la operación para homogenizar el estándar de nomenclatura establecido por la empresa que desarrolló la aplicación. La nueva rma debería ser: public void asignarcuentacorriente(cuentacorriente cc); ¾Cuál es la solución? Debemos iniciar el proceso de refactoring en nuestra aplicación para reejar este cambio. Modicaremos la rma en la clase Transacción y luego modicar en todo el proyecto cada una de las invocaciones. Si la aplicación es realmente grande, implicará un gran esfuerzo llevar a cabo este cambio manualmente. Probablemente se introduzcan errores en la aplicación. 2 Refactoring en NetBeans 5.5 A medida que se desarrolla una aplicación con NetBeans, de forma transparente para el programador se genera un repositorio de metadata del código que el programador genera. La metadata se podría denir brevemente como datos que describen otros datos, por lo cual NetBeans puede contar con esta información para realizar cambios sobre los fuentes automáticamente. Gracias a este repositorio de metadata que NetBeans mantiene es posible automatizar muchas tareas de refactoring, por ejemplo, en el caso que describimos anteriormente, NetBeans se encarga de cambiar la rma de la operación de la clase Cuenta, buscar todas las invocaciones y modicarlas. Adicionalmente NetBeans provee un informe del impacto que tendrá el proceso de refactoring, para permitir al programador tomar decisiones respecto a este proceso. Luego de desplegado dicho informe se puede iniciar el proceso de refactoring de acuerdo a las decisiones tomadas por el programador. Version 1.3: Jan 14, 2009 5:19 am -0600 http://creativecommons.org/licenses/by/2.0/

OpenStax-CNX module: m17586 2 3 Menú de Refactoring en NetBeans Teniendo las siguientes clases de Java en nuestro proyecto NetBeans (proyecto llamado PruebaCirculo): Circulo.java public class Circulo private int x; private int y; private double radio; public Circulo() // constructor public Circulo( int valorx, int valory, double valorradio ) x = valorx; y = valory; establecerradio( valorradio ); public void establecerx( int valorx ) x = valorx; public int obtenerx() return x;

OpenStax-CNX module: m17586 3 public void establecery( int valory ) y = valory; public int obtenery() return y; public void establecerradio( double valorradio ) radio = ( valorradio < 0.0? 0.0 : valorradio ); public double obtenerradio() return radio; public double obtenerdiametro() return 2 * radio; public double obtenercircunferencia()

OpenStax-CNX module: m17586 4 return Math.PI * obtenerdiametro(); public double obtenerarea() return Math.PI * radio * radio; public String tostring() return "Centro = [" + x + ", " + y + "]; Radio = " + radio; PruebaCirculo.java import java.text.decimalformat; import javax.swing.joptionpane; public class PruebaCirculo public static void main( String[] args ) Circulo circulo = new Circulo( 37, 43, 2.5 ); String salida = "La coordenada X es " + circulo.obtenerx() + "\nla coordenada Y es " + circulo.obtenery() + "\nel radio es " + circulo.obtenerradio(); circulo.establecerx( 35 ); circulo.establecery( 20 ); circulo.establecerradio( 4.25 ); salida += "\n\nla nueva ubicación y el radio del círculo son\n" + circulo.tostring();

OpenStax-CNX module: m17586 5 DecimalFormat dosdigitos = new DecimalFormat( "0.00" ); salida += "\nel diámetro es " + dosdigitos.format( circulo.obtenerdiametro() ); salida += "\nla circunferencia es " + dosdigitos.format( circulo.obtenercircunferencia() ); salida += "\nel área es " + dosdigitos.format( circulo.obtenerarea() ); JOptionPane.showMessageDialog( null, salida ); System.exit( 0 ); // fin de main // fin de la clase PruebaCirculo La estructura de nuestras carpetas en el proyecto NetBeans será la siguiente: Figure 1

OpenStax-CNX module: m17586 6 Figura 1. Visión del proyecto NetBeans con las clases java Si nos situamos en cualquiera de nuestras clases y botón derecho, obtenemos el siguiente menú, donde podemos observar que tenemos la opción refactorizar: Figure 2 Figura 2. Menú de Refactorizar A continuación, se encuentra una breve descripción de las diferentes opciones del menú: Renombrar Cambia el nombre de una clase, variable o método. Adicionalmente modica todo el código del proyecto para referenciar al nuevo nombre.

OpenStax-CNX module: m17586 7 Figure 3 Figura 3. Opción renombrar Cambiamos el nombre Circulo por Circulitos y observamos los cambios en el código que donde ponía Circulo ahora pone Circulitos: Figure 4

OpenStax-CNX module: m17586 8 Figura 4. Cambios al aplicar Renombrar Cambiar parámetros de un método Permite agregar, eliminar, modicar o cambiar el orden de los parámetros de un método, al igual que su modicador de acceso (private o public). Encapsular campos Es muy común tener que acceder a los campos de una clase por medio de operaciones del tipo: public set<nombre del campo>(...) public get<nombre del campo>() Es una tarea muy tediosa, por lo cual esta operación permite que el programador solo deba implementar los campos, delegando a NetBeans la tarea de encapsularlos. También es posible que todo código del proyecto que accede directamente al campo, pase automáticamente a utilizar el setter o el getter determinado. Ascender métodos o campos Permite subir un método o campo a otra clase de la cual hereda la clase que contiene al método o campo que deseamos subir. Descender clases anidadas, métodos o campos Permite bajar una clase anidada, método o campo a otra clase la cual hereda de la clase que contiene a la clase anidada, método o campo que deseamos bajar. Mover una clase Mueve una clase a otro package o dentro de otra clase. Adicionalmente modica todo el código del proyecto para referenciar al nuevo lugar donde se movió la clase. Figure 5 Figura 5. Opción Mover clase Convertir una clase anónima anidada a una clase anidada Crea una nueva clase anidada, la cual tendrá un nombre y un constructor. La clase anónima anidada será sustituida por esta nueva clase anidada.

OpenStax-CNX module: m17586 9 Extraer una interfase Permite seleccionar cuales métodos públicos no estáticos de una clase o interfase, irán a parar a una nueva interfase. La clase de la cual fue extraída la interfase implementará la nueva interfase creada. La interfase de la cual fue extraída la interfase extenderá la nueva interfase. Figure 6 Figura 6. Opción Extraer interfaz Extraer una superclase Despliega al programador los métodos y campos que se pueden mover a una superclase. El programador selecciona cuales desea mover y NetBeans creará una nueva clase abstracta que contendrá dichos campos y métodos, también hará que la clase refactorizada la extienda.

OpenStax-CNX module: m17586 10 Figure 7 Figura 7. Opción Extraer superclase Usar supertipo cuando sea posible Despliega al programador todas las clases que extiende la clase actual. El programador seleccionará una, y NetBeans buscará en todo el proyecto referencias a la clase que se quiere refactorizar, si encuentra referencias, determinará si es posible utilizar la superclase seleccionada.

OpenStax-CNX module: m17586 11 Figure 8 Figura 8. Opción Usar supertipo cuando sea posible Eliminación seguro Cuando eliminamos un método o clase, debemos garantizarnos de que nadie más lo utilice en el proyecto. Esta operación verica y notica las referencias encontradas, proveyendo de mecanismos para que fácilmente el programador pueda eliminar una a una las referencias, para nalmente llevar a cabo la operación de borrado de modo seguro.

OpenStax-CNX module: m17586 12 Figure 9 Figura 9. Opción Eliminación segura Introducir constantes, variables, campos o métodos El programador selecciona un fragmento de código, y luego presiona las teclas <alt>+<enter>. NetBeans desplegará varias opciones útiles, como encapsular ese fragmento en un método y referenciar al método, anidarse en while, if, etc. Siempre que sea posible, utilizar las herramientas de refactoring que NetBeans provee, de este modo no solo será mucho más sencillo este tipo de procedimiento, sino que además ejecutaremos un proceso seguro mediante el cual no introduciremos errores humanos.