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 Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with GroovyArturo Herrero
 
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Edureka!
 
Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)paramisoft
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJosé Paumard
 
Java EE vs Spring Framework
Java  EE vs Spring Framework Java  EE vs Spring Framework
Java EE vs Spring Framework Rohit Kelapure
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Edureka!
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling RewriterJustin Edelson
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Matt Raible
 

La actualidad más candente (20)

Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
Lambda Expressions in Java | Java Lambda Tutorial | Java Certification Traini...
 
Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)
 
Maven
MavenMaven
Maven
 
Introduction to TypeScript
Introduction to TypeScriptIntroduction to TypeScript
Introduction to TypeScript
 
Java 8-streams-collectors-patterns
Java 8-streams-collectors-patternsJava 8-streams-collectors-patterns
Java 8-streams-collectors-patterns
 
Expressjs
ExpressjsExpressjs
Expressjs
 
Comandos java
Comandos javaComandos java
Comandos java
 
Java 8 lambda
Java 8 lambdaJava 8 lambda
Java 8 lambda
 
Java EE vs Spring Framework
Java  EE vs Spring Framework Java  EE vs Spring Framework
Java EE vs Spring Framework
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
Java Collections | Collections Framework in Java | Java Tutorial For Beginner...
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling Rewriter
 
Java8 features
Java8 featuresJava8 features
Java8 features
 
Java script
Java scriptJava script
Java script
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
 
Java 8 Workshop
Java 8 WorkshopJava 8 Workshop
Java 8 Workshop
 
Que Es Java
Que Es JavaQue Es Java
Que Es Java
 
Java Collections Framework
Java Collections FrameworkJava Collections Framework
Java Collections Framework
 
Generics in java
Generics in javaGenerics in java
Generics in java
 

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
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
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
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
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
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 

Ú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
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
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.
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
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
 
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...
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
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
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
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
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 

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.