SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Refactorización en

  Benito Cid Míllara     Samuel Rodríguez Cid
 Diego Blanco Estévez   Ismael González Suárez
Tomás Guerra Cámara
Refactorización en eclipse
• Refactorización: técnica de la ingeniería de software para
  reestructurar un código fuente, alterando su estructura
  interna sin cambiar su comportamiento externo.

• Limpiar el código → mejorar la consistencia interna y la
  claridad.

• Mantenimiento del código
  • No arregla errores
  • No añade funcionalidad

• Se pueden realizar fácilmente cambios en el código.

• Probar trozos de código.
                                                               2
• Código limpio y altamente modularizado.
Opciones de refactorización
• Rename                       • Extract Superclass
• Move                         • Extract Method
• Extract Local Variable       • Inline
• Extract Constant             • Change Method Signature
• Convert Local Variable to    • Infer Generic Type
  Field                          Arguments
• Convert Anonymous Class to   • Migrate JAR File
  Nested
                               • Refactoring Scripts
• Member Type to Top Level                                 3

• Extract Interface
1. Rename
• Opción más utilizada.

• Cambia el nombre de variables, clases, métodos, paquetes,
  directorios y casi cualquier identificador Java.

• Tras la refactorización, se modifican las referencias a ese
  identificador.

• Refactor > Rename...

• Alt + Shift + R

                                                                4
2. Move
• Mover una clase de un paquete a otro.
  • Se mueve el archivo .java a la carpeta.
  • Se cambian todas las referencias.

• Arrastrar y soltar una clase a un nuevo paquete.
  • Refactorización automática.

• Refactor > Move...

• Alt + Shift + V

                                                     5
3. Extract Local Variable
• Asignar expresión a variable local.
• Tras la refactorización, cualquier referencia a la expresión en el
  ámbito local se sustituye por la variable.
• La misma expresión en otro método no se modifica.
              public class ExtractLocalVariable {

                      public static void main(String[] args) {
                          System.out.println("Hello World!");
                      }
              }




              public class ExtractLocalVariable {

                      public static void main(String[] args) {         6
                          String string = "Hello World!";
                          System.out.println(string);
                  }
              }
4. Extract Constant
• Convierte un número o cadena literal en una constante.
• Tras la refactorización, todos los usos del literal se sustituyen
  por esa constante.
• Objetivo: Modificar el valor del literal en un único lugar.
              public class ExtractConstant {
                  public static void main(String[] args) {
                      System.out.println("Hello World!");
                  }
              }




      public class ExtractConstant {

          private static final String HELLO_WORLD = "Hello World!";

          public static void main(String[] args) {
                                                                      7
              System.out.println(HELLO_WORLD);
          }
      }
5. Convert Local Variable to Field
• Convierte una variable local en un atributo privado de la clase.
• Tras la refactorización, todos los usos de la variable local se
  sustituyen por ese atributo.
             public class ConvertLocalVariable {

                 public static void main(String[] args) {
                     String msg = "Hello World!";
                     System.out.println(msg);
                 }
             }




             public class ConvertLocalVariable {

                 private static String msg;

                 public static void main(String[] args) {            8
                     msg = "Hello World!";
                     System.out.println(msg);
                 }
             }
6. Convert Anonymous Class to Nested
• Clase anónima
  • Clase sin nombre de la que sólo se crea un único objeto.
  • No se pueden definir constructores.

• Se utilizan con frecuencia para definir clases y objetos que
  gestionen los eventos de los distintos componentes de la
  interfaz de usuario.

• Maneras de definir una clase anónima:
  • Palabra new seguida de la definición de la clase anónima, entre
    llaves {...}.
  • Palabra new seguida del nombre de la clase de la que hereda (sin
    extends) y la definición de la clase entre llaves {...}.
  • Palabra new seguida del nombre de la interfaz (sin implements) y   9
    la definición de la clase anónima entre llaves {...}.
6. Convert Anonymous Class to Nested
  • Convierte una clase anónima en una clase anidada de la clase
    contenedora.


import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;

public class ConvertAnonymousClass {
    public void createPool() {
        Object threadPool = Executors.newFixedThreadPool(1, new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
                Thread t = new Thread(r);
                t.setName("Worker thread");
                t.setPriority(Thread.MIN_PRIORITY);
                t.setDaemon(true);
                return t;
            }
        });
    }
}
                                                                                    10
6. Convert Anonymous Class to Nested
    • Asignar nombre de la clase, los modificadores de acceso
      (public, private, protected) y el tipo (static, final).
    • Refactorización → código más limpio
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;

public class ConvertAnonymousClass {

     private final class MyThreadFactory implements ThreadFactory {
         @Override
         public Thread newThread(Runnable r) {
             Thread t = new Thread(r);
             t.setName("Worker thread");
             t.setPriority(Thread.MIN_PRIORITY);
             t.setDaemon(true);
             return t;
         }
     }

     public void createPool() {
                                                                                11
         threadPool = Executors.newFixedThreadPool(1, new MyThreadFactory());
     }
}
7. Member Type to Top Level
• Convierte una clase
  anidada en una clase de
  nivel superior con su
  propio archivo de java.

• Si la clase es estática, la
  refactorización es
  inmediata.

• Si no es estática nos
  pide un nombre para
  declarar el nombre de
  la clase que mantendrá
                                12
  la referencia con la
  clase inicial.
8. Extract Interface
• Se crea una interfaz con los métodos de una clase.

• Nos permite escoger que métodos de la clase, formarán parte
  de la interfaz.




                                                                13
9. Extract Superclass
• Extrae una superclase en lugar de una interfaz.

• Si la clase ya utilizaba una superclase, la recién creada pasará a
  ser su superclase.

• Se pueden seleccionar los métodos que formaran parte de la
  superclase.

• Diferencia: En la superclase, los métodos están actualmente
  allí, así que si hay referencias a campos de clase original, habrá
  fallos de compilación.

                                                                       14
10. Extract Method
• Nos permite seleccionar un bloque de código y convertirlo en
  un método.

• Eclipse ajustará automáticamente los parámetros y el retorno
  de la función.

• Aplicaciones
  • Un método es muy extenso y lo queremos subdividir en
    diferentes métodos.
  • Un trozo de código se utiliza en diferentes métodos.


                                                                 15
10. Extract Method
• Seleccionamos el bloque de código que queremos refactorizar.
  @Override
  public Object get(Object key) {
      TimedKey timedKey = new TimedKey(System.currentTimeMillis(), key);
      Object object = map.get(timedKey);
      if (object != null) {
          /**
            * if this was removed after the 'get' call by the worker thread
            * put it back in
            */
          map.put(timedKey, object);
          return object;
      }
      return null;
  }

• Seleccionamos la opción “Extract Method” (alt+shift+M).
• Configuramos nuestro nuevo método indicando:
  • Nombre                                                                    16
  • Visibilidad (Public , Private, Protected)
  • Tipo de retorno
10. Extract Method
• Resultado:

  @Override
  public Object get(Object key) {
      TimedKey timedKey = new TimedKey(System.currentTimeMillis(), key);
      Object object = map.get(timedKey);
      return putIfNotNull(timedKey, object);
  }

  private Object putIfNotNull(TimedKey timedKey, Object object) {
      if (object != null) {
          /**
            * if this was removed after the 'get' call by the worker thread
            * put it back in
            */
          map.put(timedKey, object);
          return object;
      }
      return null;
  }
                                                                              17
11. Inline
• Nos permite ajustar una referencia a una variable o método
  con la línea en la que se utiliza y conseguir así una única línea
  de código.

• Cuando se utiliza, se sustituye la referencia a la variable o
  método con el valor asignado a la variable o la aplicación del
  método, respectivamente.

• Esto puede ser útil para limpiar nuestro código en diversas
  situaciones:
  • Cuando un método es llamado una sola vez por otro
    método, y tiene más sentido como un bloque de código.
                                                                      18
  • Cuando una expresión se ve más limpia en una sola línea.
11. Inline
• Código a refactorizar con inline:

   public Object put(Object key, Object value) {
       TimedKey timedKey = new TimedKey(System.currentTimeMillis(), key);
       return map.put(timedKey, value);
   }




• Posicionamos el cursor en la referencia al método o variable.
• Seleccionamos la opción “Inline” (alt+shift+i).

• Resultado:
   @Override
   public Object put(Object key, Object value) {
       return map.put(new TimedKey(System.currentTimeMillis(), key), value);   19
   }
12. Change Method Signature
• Esta función nos permitirá cambiar la firma de un método. La
  firma de un método es única y está compuesta por:
  • Nombre
  • Parámetros

• De forma automática se actualizarán todas las dependencias y
  llamadas a este en nuestro proyecto.

• Nota: Si añadimos parámetros o cambiamos el tipo de retorno
  a nuestro método lógicamente nos dará errores de
  compilación en las llamadas a este, por lo que debemos
  modificarlos manualmente.
                                                                 20
12. Change Method Signature
• Seleccionamos la opción “Change method signature”.
• Nos presentará una ventana donde podremos cambiar la firma
  del método.




                                                               21
13. Infer Generic Type Arguments
• La refactorización de Eclipse permite inferir los tipos correctos
  de los argumentos para clases.

• Esta utilidad es especialmente utilizada para convertir código
  de versiones anteriores a Java 5 a esta versión y superiores.

• Podemos llamar a esta funcionalidad desde el explorer de
  Eclipse. Haciendo boton derecho en el proyecto, paquete o
  clase y seleccionando Refactor > Infer Generic Type
  Arguments. Veamos un ejemplo:

                                                                      22
13. Infer Generic Type Arguments
• El código del siguiente ejemplo muestra la función
  ConcurrentHashMap que puede recibir tipos de argumentos
  genéricos, aunque no especifique el tipo de los parámetros.

  private final ConcurrentHashMap map = new ConcurrentHashMap();




• Tras la refactorización, Eclipse determita el tipo correcto de los
  parámetros y produce lo siguiente:
  private final ConcurrentHashMap<TimedKey, Object> map =
      new ConcurrentHashMap<TimedKey, Object>();


                                                                       23
14. Migrate JAR File
• La migración de un fichero JAR permite actualizarlo
  directamente dentro de la ruta de un proyecto de versión
  superior. El proceso antes sería el siguiente:
  1.   En las propiedades del proyecto, se elimina el anterior JAR de la
       ruta del proyecto.
  2.   Posteriormente, se elimina de la carpeta manualmente.
  3.   Se copia el nuevo JAR con el nombre a través del cual es
       referenciado en los scripts codificados.
  4.   Se añade el nuevo JAR a la ruta del proyecto manualmente.


                                                                           24
14. Migrate JAR File
• Con la refactorización, podemos hacerlo todo de manera más
  sencilla:
  1.   Se selecciona Refactor > Migrate Jars.
  2.   En el diálogo que se abre, se selecciona la localización del
       nuevo archivo JAR.
  3.   En la barra de exploración se selecciona el JAR desde el
       proyecto que se quiere actualizar a una nueva versión.
       Seleccionando Replace Jar file contents but preserve existing
       filename, el nuevo JAR adquiere el nombre del archivo, sin
       romper las referencias hacia ese nombre.

• En cualquier caso, al pulsar Finish, el JAR anterior se elimina y
  el nuevo es copiado a la ruta del proyecto pasando a ser             25
  utilizado como principal por el proyecto.
15. Refactoring scripts
• Permite exportar y compartir acciones de refactorización.

• La refactorización de scripts es muy útil cuando se va a
  distribuir una versión de una aplicación que puede producir
  errores en quienes ejecuten versiones anteriores.

• Entregando scripts con refactorización y sus librerías, los
  usuarios que corren versiones anteriores pueden hacer uso de
  los scripts en sus proyectos con las nuevas versiones de las
  librerías.


                                                                 26
15. Refactoring scripts
• Para crear un script de
  refactorización:
  • Refactor > Create Script.

  • Se mostrará el listado de
    refactorizaciones.

  • Se seleccionan las
    refactorizaciones, se
    introduce una ruta, y se
    pulsa Create para
    generarlo.

                                27
15. Refactoring scripts
• Para aplicar un script de refactorización existente, se
  selecciona Refactor > Apply Script.

• En el cuadro de diálogo se selecciona la localización. Se pulsa
  Next para ver las refactorizaciones que se van a aplicar y con
  Finish se aplican.

• Ejemplo:
  • En nuestra primera versión del JAR tenemos la clase com.A, y en
    la segunda, es renombrada a com.B. Quienes usen la versión 1 y
    actualicen alguna librería, tendrán errores en el código.

  • Distribuyendo un script de refactorización que renombre las
    clases junto con el JAR, permitirá que se pueda pasar de la       28
    versión 1 a la 2 fácilmente.

Más contenido relacionado

La actualidad más candente

Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8LivePerson
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.David Gómez García
 
Strings in Java
Strings in Java Strings in Java
Strings in Java Hitesh-Java
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre ObjetosEmilio Aviles Avila
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced JavascriptAdieu
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismonestor_moren
 
Java Collection framework
Java Collection frameworkJava Collection framework
Java Collection frameworkankitgarg_er
 
Explain Delegates step by step.
Explain Delegates step by step.Explain Delegates step by step.
Explain Delegates step by step.Questpond
 
Cubo y cuadrado java
Cubo y cuadrado javaCubo y cuadrado java
Cubo y cuadrado javaRobert Wolf
 
New operator and methods.15
New operator and methods.15New operator and methods.15
New operator and methods.15myrajendra
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api streamEudris Cabrera
 

La actualidad más candente (20)

Functional programming with Java 8
Functional programming with Java 8Functional programming with Java 8
Functional programming with Java 8
 
Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.Java 8 Stream API. A different way to process collections.
Java 8 Stream API. A different way to process collections.
 
Strings in Java
Strings in Java Strings in Java
Strings in Java
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre Objetos
 
Advanced Javascript
Advanced JavascriptAdvanced Javascript
Advanced Javascript
 
Herencia y Polimorfismo
Herencia y PolimorfismoHerencia y Polimorfismo
Herencia y Polimorfismo
 
Delegetes in c#
Delegetes in c#Delegetes in c#
Delegetes in c#
 
8 introduccion colecciones
8 introduccion colecciones8 introduccion colecciones
8 introduccion colecciones
 
Methods in java
Methods in javaMethods in java
Methods in java
 
Java Collection framework
Java Collection frameworkJava Collection framework
Java Collection framework
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Java Basics
Java BasicsJava Basics
Java Basics
 
6. static keyword
6. static keyword6. static keyword
6. static keyword
 
Explain Delegates step by step.
Explain Delegates step by step.Explain Delegates step by step.
Explain Delegates step by step.
 
C++ Interview Questions
C++ Interview QuestionsC++ Interview Questions
C++ Interview Questions
 
Cubo y cuadrado java
Cubo y cuadrado javaCubo y cuadrado java
Cubo y cuadrado java
 
Java 8 Workshop
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
 
Java 8 streams
Java 8 streamsJava 8 streams
Java 8 streams
 
New operator and methods.15
New operator and methods.15New operator and methods.15
New operator and methods.15
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api stream
 

Similar a Eclipse refactoring

Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosJosé Antonio Sandoval Acosta
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónFabiolaCastilloCanci
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraArisbethBernalSalina
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2mellcv
 
Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacionJechu2013
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)Manuel Ch.
 
Información básica Java
Información básica JavaInformación básica Java
Información básica JavaFordBull2er
 
Clases metodos y atributos
Clases metodos y atributosClases metodos y atributos
Clases metodos y atributosRobert Wolf
 
Curso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-TouchCurso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-Touchfrr149
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1mellcv
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en JavaAlelt2890
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesecodereck
 
Colecciones de Orden Superior en Java
Colecciones de Orden Superior en JavaColecciones de Orden Superior en Java
Colecciones de Orden Superior en JavaÓscar Andrés López
 

Similar a Eclipse refactoring (20)

02 tda1 t2018
02 tda1 t201802 tda1 t2018
02 tda1 t2018
 
Programación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetosProgramación Orientada a Objetos - Unidad 2: clases y objetos
Programación Orientada a Objetos - Unidad 2: clases y objetos
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una mira
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
Java struts2 - 03 componentes de la aplicacion
Java   struts2 - 03 componentes de la aplicacionJava   struts2 - 03 componentes de la aplicacion
Java struts2 - 03 componentes de la aplicacion
 
Clase viii
Clase viiiClase viii
Clase viii
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)
 
Introducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a ObjetosIntroducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a Objetos
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Clases metodos y atributos
Clases metodos y atributosClases metodos y atributos
Clases metodos y atributos
 
Curso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-TouchCurso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-Touch
 
S6-Contenedores
S6-ContenedoresS6-Contenedores
S6-Contenedores
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
 
Constructores en Java
Constructores en JavaConstructores en Java
Constructores en Java
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clases
 
Unidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIASUnidad 3 CLASES, OBJETOS E INTSANCIAS
Unidad 3 CLASES, OBJETOS E INTSANCIAS
 
7-Unidad 2. Elementos de una Clase
7-Unidad 2. Elementos de una Clase7-Unidad 2. Elementos de una Clase
7-Unidad 2. Elementos de una Clase
 
Colecciones de Orden Superior en Java
Colecciones de Orden Superior en JavaColecciones de Orden Superior en Java
Colecciones de Orden Superior en Java
 
03 Oop
03   Oop03   Oop
03 Oop
 

Último

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 

Último (20)

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 

Eclipse refactoring

  • 1. Refactorización en Benito Cid Míllara Samuel Rodríguez Cid Diego Blanco Estévez Ismael González Suárez Tomás Guerra Cámara
  • 2. Refactorización en eclipse • Refactorización: técnica de la ingeniería de software para reestructurar un código fuente, alterando su estructura interna sin cambiar su comportamiento externo. • Limpiar el código → mejorar la consistencia interna y la claridad. • Mantenimiento del código • No arregla errores • No añade funcionalidad • Se pueden realizar fácilmente cambios en el código. • Probar trozos de código. 2 • Código limpio y altamente modularizado.
  • 3. Opciones de refactorización • Rename • Extract Superclass • Move • Extract Method • Extract Local Variable • Inline • Extract Constant • Change Method Signature • Convert Local Variable to • Infer Generic Type Field Arguments • Convert Anonymous Class to • Migrate JAR File Nested • Refactoring Scripts • Member Type to Top Level 3 • Extract Interface
  • 4. 1. Rename • Opción más utilizada. • Cambia el nombre de variables, clases, métodos, paquetes, directorios y casi cualquier identificador Java. • Tras la refactorización, se modifican las referencias a ese identificador. • Refactor > Rename... • Alt + Shift + R 4
  • 5. 2. Move • Mover una clase de un paquete a otro. • Se mueve el archivo .java a la carpeta. • Se cambian todas las referencias. • Arrastrar y soltar una clase a un nuevo paquete. • Refactorización automática. • Refactor > Move... • Alt + Shift + V 5
  • 6. 3. Extract Local Variable • Asignar expresión a variable local. • Tras la refactorización, cualquier referencia a la expresión en el ámbito local se sustituye por la variable. • La misma expresión en otro método no se modifica. public class ExtractLocalVariable { public static void main(String[] args) { System.out.println("Hello World!"); } } public class ExtractLocalVariable { public static void main(String[] args) { 6 String string = "Hello World!"; System.out.println(string); } }
  • 7. 4. Extract Constant • Convierte un número o cadena literal en una constante. • Tras la refactorización, todos los usos del literal se sustituyen por esa constante. • Objetivo: Modificar el valor del literal en un único lugar. public class ExtractConstant { public static void main(String[] args) { System.out.println("Hello World!"); } } public class ExtractConstant { private static final String HELLO_WORLD = "Hello World!"; public static void main(String[] args) { 7 System.out.println(HELLO_WORLD); } }
  • 8. 5. Convert Local Variable to Field • Convierte una variable local en un atributo privado de la clase. • Tras la refactorización, todos los usos de la variable local se sustituyen por ese atributo. public class ConvertLocalVariable { public static void main(String[] args) { String msg = "Hello World!"; System.out.println(msg); } } public class ConvertLocalVariable { private static String msg; public static void main(String[] args) { 8 msg = "Hello World!"; System.out.println(msg); } }
  • 9. 6. Convert Anonymous Class to Nested • Clase anónima • Clase sin nombre de la que sólo se crea un único objeto. • No se pueden definir constructores. • Se utilizan con frecuencia para definir clases y objetos que gestionen los eventos de los distintos componentes de la interfaz de usuario. • Maneras de definir una clase anónima: • Palabra new seguida de la definición de la clase anónima, entre llaves {...}. • Palabra new seguida del nombre de la clase de la que hereda (sin extends) y la definición de la clase entre llaves {...}. • Palabra new seguida del nombre de la interfaz (sin implements) y 9 la definición de la clase anónima entre llaves {...}.
  • 10. 6. Convert Anonymous Class to Nested • Convierte una clase anónima en una clase anidada de la clase contenedora. import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; public class ConvertAnonymousClass { public void createPool() { Object threadPool = Executors.newFixedThreadPool(1, new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r); t.setName("Worker thread"); t.setPriority(Thread.MIN_PRIORITY); t.setDaemon(true); return t; } }); } } 10
  • 11. 6. Convert Anonymous Class to Nested • Asignar nombre de la clase, los modificadores de acceso (public, private, protected) y el tipo (static, final). • Refactorización → código más limpio import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; public class ConvertAnonymousClass { private final class MyThreadFactory implements ThreadFactory { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r); t.setName("Worker thread"); t.setPriority(Thread.MIN_PRIORITY); t.setDaemon(true); return t; } } public void createPool() { 11 threadPool = Executors.newFixedThreadPool(1, new MyThreadFactory()); } }
  • 12. 7. Member Type to Top Level • Convierte una clase anidada en una clase de nivel superior con su propio archivo de java. • Si la clase es estática, la refactorización es inmediata. • Si no es estática nos pide un nombre para declarar el nombre de la clase que mantendrá 12 la referencia con la clase inicial.
  • 13. 8. Extract Interface • Se crea una interfaz con los métodos de una clase. • Nos permite escoger que métodos de la clase, formarán parte de la interfaz. 13
  • 14. 9. Extract Superclass • Extrae una superclase en lugar de una interfaz. • Si la clase ya utilizaba una superclase, la recién creada pasará a ser su superclase. • Se pueden seleccionar los métodos que formaran parte de la superclase. • Diferencia: En la superclase, los métodos están actualmente allí, así que si hay referencias a campos de clase original, habrá fallos de compilación. 14
  • 15. 10. Extract Method • Nos permite seleccionar un bloque de código y convertirlo en un método. • Eclipse ajustará automáticamente los parámetros y el retorno de la función. • Aplicaciones • Un método es muy extenso y lo queremos subdividir en diferentes métodos. • Un trozo de código se utiliza en diferentes métodos. 15
  • 16. 10. Extract Method • Seleccionamos el bloque de código que queremos refactorizar. @Override public Object get(Object key) { TimedKey timedKey = new TimedKey(System.currentTimeMillis(), key); Object object = map.get(timedKey); if (object != null) { /** * if this was removed after the 'get' call by the worker thread * put it back in */ map.put(timedKey, object); return object; } return null; } • Seleccionamos la opción “Extract Method” (alt+shift+M). • Configuramos nuestro nuevo método indicando: • Nombre 16 • Visibilidad (Public , Private, Protected) • Tipo de retorno
  • 17. 10. Extract Method • Resultado: @Override public Object get(Object key) { TimedKey timedKey = new TimedKey(System.currentTimeMillis(), key); Object object = map.get(timedKey); return putIfNotNull(timedKey, object); } private Object putIfNotNull(TimedKey timedKey, Object object) { if (object != null) { /** * if this was removed after the 'get' call by the worker thread * put it back in */ map.put(timedKey, object); return object; } return null; } 17
  • 18. 11. Inline • Nos permite ajustar una referencia a una variable o método con la línea en la que se utiliza y conseguir así una única línea de código. • Cuando se utiliza, se sustituye la referencia a la variable o método con el valor asignado a la variable o la aplicación del método, respectivamente. • Esto puede ser útil para limpiar nuestro código en diversas situaciones: • Cuando un método es llamado una sola vez por otro método, y tiene más sentido como un bloque de código. 18 • Cuando una expresión se ve más limpia en una sola línea.
  • 19. 11. Inline • Código a refactorizar con inline: public Object put(Object key, Object value) { TimedKey timedKey = new TimedKey(System.currentTimeMillis(), key); return map.put(timedKey, value); } • Posicionamos el cursor en la referencia al método o variable. • Seleccionamos la opción “Inline” (alt+shift+i). • Resultado: @Override public Object put(Object key, Object value) { return map.put(new TimedKey(System.currentTimeMillis(), key), value); 19 }
  • 20. 12. Change Method Signature • Esta función nos permitirá cambiar la firma de un método. La firma de un método es única y está compuesta por: • Nombre • Parámetros • De forma automática se actualizarán todas las dependencias y llamadas a este en nuestro proyecto. • Nota: Si añadimos parámetros o cambiamos el tipo de retorno a nuestro método lógicamente nos dará errores de compilación en las llamadas a este, por lo que debemos modificarlos manualmente. 20
  • 21. 12. Change Method Signature • Seleccionamos la opción “Change method signature”. • Nos presentará una ventana donde podremos cambiar la firma del método. 21
  • 22. 13. Infer Generic Type Arguments • La refactorización de Eclipse permite inferir los tipos correctos de los argumentos para clases. • Esta utilidad es especialmente utilizada para convertir código de versiones anteriores a Java 5 a esta versión y superiores. • Podemos llamar a esta funcionalidad desde el explorer de Eclipse. Haciendo boton derecho en el proyecto, paquete o clase y seleccionando Refactor > Infer Generic Type Arguments. Veamos un ejemplo: 22
  • 23. 13. Infer Generic Type Arguments • El código del siguiente ejemplo muestra la función ConcurrentHashMap que puede recibir tipos de argumentos genéricos, aunque no especifique el tipo de los parámetros. private final ConcurrentHashMap map = new ConcurrentHashMap(); • Tras la refactorización, Eclipse determita el tipo correcto de los parámetros y produce lo siguiente: private final ConcurrentHashMap<TimedKey, Object> map = new ConcurrentHashMap<TimedKey, Object>(); 23
  • 24. 14. Migrate JAR File • La migración de un fichero JAR permite actualizarlo directamente dentro de la ruta de un proyecto de versión superior. El proceso antes sería el siguiente: 1. En las propiedades del proyecto, se elimina el anterior JAR de la ruta del proyecto. 2. Posteriormente, se elimina de la carpeta manualmente. 3. Se copia el nuevo JAR con el nombre a través del cual es referenciado en los scripts codificados. 4. Se añade el nuevo JAR a la ruta del proyecto manualmente. 24
  • 25. 14. Migrate JAR File • Con la refactorización, podemos hacerlo todo de manera más sencilla: 1. Se selecciona Refactor > Migrate Jars. 2. En el diálogo que se abre, se selecciona la localización del nuevo archivo JAR. 3. En la barra de exploración se selecciona el JAR desde el proyecto que se quiere actualizar a una nueva versión. Seleccionando Replace Jar file contents but preserve existing filename, el nuevo JAR adquiere el nombre del archivo, sin romper las referencias hacia ese nombre. • En cualquier caso, al pulsar Finish, el JAR anterior se elimina y el nuevo es copiado a la ruta del proyecto pasando a ser 25 utilizado como principal por el proyecto.
  • 26. 15. Refactoring scripts • Permite exportar y compartir acciones de refactorización. • La refactorización de scripts es muy útil cuando se va a distribuir una versión de una aplicación que puede producir errores en quienes ejecuten versiones anteriores. • Entregando scripts con refactorización y sus librerías, los usuarios que corren versiones anteriores pueden hacer uso de los scripts en sus proyectos con las nuevas versiones de las librerías. 26
  • 27. 15. Refactoring scripts • Para crear un script de refactorización: • Refactor > Create Script. • Se mostrará el listado de refactorizaciones. • Se seleccionan las refactorizaciones, se introduce una ruta, y se pulsa Create para generarlo. 27
  • 28. 15. Refactoring scripts • Para aplicar un script de refactorización existente, se selecciona Refactor > Apply Script. • En el cuadro de diálogo se selecciona la localización. Se pulsa Next para ver las refactorizaciones que se van a aplicar y con Finish se aplican. • Ejemplo: • En nuestra primera versión del JAR tenemos la clase com.A, y en la segunda, es renombrada a com.B. Quienes usen la versión 1 y actualicen alguna librería, tendrán errores en el código. • Distribuyendo un script de refactorización que renombre las clases junto con el JAR, permitirá que se pueda pasar de la 28 versión 1 a la 2 fácilmente.