SlideShare una empresa de Scribd logo
1 de 29
Refactoring Martín Salías http://www.flickr.com/photos/yomostro/2972523219/
Cualquier tonto puede escribir código que entienda una computadora.Los buenos programadores escriben código que puedan entender los humanos. Foto: Miguel Saez–Alt.Net Meeting – Redmond, 2008
Diseño Diseñando puedo pensar muy rápido, pero mi razonamiento está lleno de agujeritos. http://www.flickr.com/photos/hackerchick/4547529858/
Malos olores Si apesta, hay que cambiarlo. La abuela Beck,  sobre la crianza de bebes. http://www.flickr.com/photos/brian-burke/266468336/
Código duplicado El principio de todos los males Refactorings: Extraer método Extraer clase Subir campo Método plantilla
Método largo Uno de los clásicos Refactorings: Extraer método Reemplazar temporal por consulta Reemplazar método por Objeto método Descomponer condición
Clase muy grande Otro clásico Refactorings: Extraer Clase Extraer Subclase Extraer Interfaz Reemplazar valor de datos con Objeto
Lista de parámetros muy larga Un vicio popular Refactorings: Reemplazar parámetro con Método Introducir Objeto parámetro Preservar Objeto completo
Cambios divergentes Falla al buscar responsabilidades Refactoring: Extraer clase
Cirugía con escopeta Los cambios afectan por doquier Refactorings: Mover método Mover campo Clase en una línea
Envidia de características Clases que usan más los miembros ajenos que los propios Refactorings: Mover método Mover campo Extraer método
Datos en yunta Grupitos inseparables Refactorings: Extraer clase Introducir Objeto parámetro Preservar Objeto completo
Obsesión primitiva Desperdiciar los tipos extendidos Refactorings: Reemplazar valor de datos con Objeto Extraer clase Introducir Objeto parámetro Reemplazar array con objeto Reemplazar tipo con clase Reemplazar tipo con subclases Reemplazar tipos con estado/estrategia
Sentencias switch Desperdiciar el poder del polimorfismo Refactorings: Reemplazar condicional con polimorfismo Reemplazar tipo con subclases Reemplazar tipo con estado/estrategia Reemplazar parámetro con métodos explícitos Introducir objeto nulo
Jerarquías de herencia paralelas Un caso especial de cirugía con escopeta Cada vez que se modifica algo en una jerarquía, debemos modificar la otra. Refactorings: Mover método Mover campo
Clase vaga Clases que no cubren su costo Refactorings: Clase en una línea Colapsar jerarquía
Generalidad especulativa No hace falta todavía, pero puede ser que… Refactorings: Colapsar jerarquía Clase en una línea Quitar parámetro Renombrar método
Campo temporal Los campos (o variables locales) deben justificarse Refactorings: Extraer clase Introducir objeto nulo
Cadenas de mensajes Demasiados saltos sin una buena razón Refactoring: Esconder delegado
Intermediario Métodos que todo lo delegan Refactorings: Quitar Intermediario Método en una línea Reemplazar delegación con herencia
Intimidad inapropiada Conociendo otras clases demasiado de cerca Refactorings: Mover método Mover campo Cambiar asociación bidireccional a unidireccional Reemplazar herencia con delegación Esconder delegado
Clases alternativas con interfaces diferentes Quiebres en el polimorfismo y probables fallas de jerarquías Refactorings: Renombrar método Mover método
Biblioteca de clases incompleta Extendiendo clases sin tener las fuentes Refactorings: Introducir método foráneo Introducir extensión local
Legado rechazado Interrumpiendo las leyes de la herencia Refactoring: Reemplazar herencia por delegación
Comentarios No, no está mal poner comentarios, pero… Refactorings: Extraer método Introducir aserción
Evitando problemas con tests Una de las maneras más seguras de hacer refactoring sin romper lo que ya funciona es utilizar Unit Testing. Se escribe un test (si no existe previamente) antes de hacer cualquier cambio, y se verifica que siga pasándolo luego del refactoring.
Herramientas de Refactoring Refactoring Browser (Smalltalk) Eclipse (Java) Visual Studio / MonoDevelop (básicas) ReSharper / Code Rush
Bibliografía Joshua Kerievsky Martin Fowler William Wake www.refactoring.com
martin@salias.com.ar CodeAndBeyond.org http://www.flickr.com/photos/-bast-/349497988/

Más contenido relacionado

Similar a Refactoring

Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Sesion2 Php Oo Y Mysql
Sesion2 Php Oo Y MysqlSesion2 Php Oo Y Mysql
Sesion2 Php Oo Y MysqlHugo Flores
 
Jerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismoJerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismoEdwin Loayza
 
Capitulo 7 moving features between objects
Capitulo 7  moving features between objectsCapitulo 7  moving features between objects
Capitulo 7 moving features between objectsJ Pablo Rivera
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnetjhordy2000
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosale8819
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC lissette_torrealba
 
Iniciando en java en www.fiec.espol.edu.ec
Iniciando en java  en www.fiec.espol.edu.ecIniciando en java  en www.fiec.espol.edu.ec
Iniciando en java en www.fiec.espol.edu.ecSilvana Vargas
 

Similar a Refactoring (18)

08 Herencia
08   Herencia08   Herencia
08 Herencia
 
Poo
PooPoo
Poo
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Tema7 herencia
Tema7 herenciaTema7 herencia
Tema7 herencia
 
Sesion2 Php Oo Y Mysql
Sesion2 Php Oo Y MysqlSesion2 Php Oo Y Mysql
Sesion2 Php Oo Y Mysql
 
Poo3 java-0910
Poo3 java-0910Poo3 java-0910
Poo3 java-0910
 
Jerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismoJerarquía de clases, herencia, polimorfismo
Jerarquía de clases, herencia, polimorfismo
 
Unidad II_1.pptx
Unidad II_1.pptxUnidad II_1.pptx
Unidad II_1.pptx
 
Capitulo 7 moving features between objects
Capitulo 7  moving features between objectsCapitulo 7  moving features between objects
Capitulo 7 moving features between objects
 
Net1 oop vbnet
Net1 oop vbnetNet1 oop vbnet
Net1 oop vbnet
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
Guía Herencia PO_O
Guía Herencia PO_OGuía Herencia PO_O
Guía Herencia PO_O
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC
 
Iniciando en java en www.fiec.espol.edu.ec
Iniciando en java  en www.fiec.espol.edu.ecIniciando en java  en www.fiec.espol.edu.ec
Iniciando en java en www.fiec.espol.edu.ec
 
PROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOSPROGRAMACIÓN ORIENTADA A OBJETOS
PROGRAMACIÓN ORIENTADA A OBJETOS
 
JAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIAJAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIA
 
03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
Laboratorio clase abstract
Laboratorio clase abstractLaboratorio clase abstract
Laboratorio clase abstract
 

Más de Martin Salias

Restricciones para la Creatividad
Restricciones para la CreatividadRestricciones para la Creatividad
Restricciones para la CreatividadMartin Salias
 
Arquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida ÁgilArquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida ÁgilMartin Salias
 
Organizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo ÁgilesOrganizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo ÁgilesMartin Salias
 
Implementation Patterns
Implementation PatternsImplementation Patterns
Implementation PatternsMartin Salias
 
Building Hybrid Applications
Building Hybrid ApplicationsBuilding Hybrid Applications
Building Hybrid ApplicationsMartin Salias
 
Antipatrones de Software
Antipatrones de SoftwareAntipatrones de Software
Antipatrones de SoftwareMartin Salias
 
Introduccion a la Arquitectura de Software
Introduccion a la Arquitectura de SoftwareIntroduccion a la Arquitectura de Software
Introduccion a la Arquitectura de SoftwareMartin Salias
 
Arquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la prácticaArquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la prácticaMartin Salias
 
High Maturity Agile Practice
High Maturity Agile PracticeHigh Maturity Agile Practice
High Maturity Agile PracticeMartin Salias
 
Explosión de Lenguajes
Explosión de LenguajesExplosión de Lenguajes
Explosión de LenguajesMartin Salias
 

Más de Martin Salias (18)

Restricciones para la Creatividad
Restricciones para la CreatividadRestricciones para la Creatividad
Restricciones para la Creatividad
 
LeSS Intro
LeSS IntroLeSS Intro
LeSS Intro
 
Arquitectura Ágil
Arquitectura ÁgilArquitectura Ágil
Arquitectura Ágil
 
Arquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida ÁgilArquitectura de Software en el Ciclo de Vida Ágil
Arquitectura de Software en el Ciclo de Vida Ágil
 
Organizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo ÁgilesOrganizaciones y Liderazgo Ágiles
Organizaciones y Liderazgo Ágiles
 
Implementation Patterns
Implementation PatternsImplementation Patterns
Implementation Patterns
 
Diseño Agile
Diseño AgileDiseño Agile
Diseño Agile
 
Why JavaScript
Why JavaScriptWhy JavaScript
Why JavaScript
 
Building Hybrid Applications
Building Hybrid ApplicationsBuilding Hybrid Applications
Building Hybrid Applications
 
Jas 2012 keynote
Jas 2012 keynoteJas 2012 keynote
Jas 2012 keynote
 
Antipatrones de Software
Antipatrones de SoftwareAntipatrones de Software
Antipatrones de Software
 
Introduccion a la Arquitectura de Software
Introduccion a la Arquitectura de SoftwareIntroduccion a la Arquitectura de Software
Introduccion a la Arquitectura de Software
 
Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Arquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la prácticaArquitectura y ciclo de vida ágil en la práctica
Arquitectura y ciclo de vida ágil en la práctica
 
TDD Workshop
TDD WorkshopTDD Workshop
TDD Workshop
 
High Maturity Agile Practice
High Maturity Agile PracticeHigh Maturity Agile Practice
High Maturity Agile Practice
 
Explosión de Lenguajes
Explosión de LenguajesExplosión de Lenguajes
Explosión de Lenguajes
 

Último

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
 
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
 
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
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
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
 
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
 
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
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
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
 
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
 
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
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
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
 
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
 
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
 
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
 
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
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
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
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 

Último (20)

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
 
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
 
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
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .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...
 
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
 
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
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
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
 
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
 
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
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
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
 
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
 
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.
 
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
 
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
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
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
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 

Refactoring

  • 1. Refactoring Martín Salías http://www.flickr.com/photos/yomostro/2972523219/
  • 2. Cualquier tonto puede escribir código que entienda una computadora.Los buenos programadores escriben código que puedan entender los humanos. Foto: Miguel Saez–Alt.Net Meeting – Redmond, 2008
  • 3. Diseño Diseñando puedo pensar muy rápido, pero mi razonamiento está lleno de agujeritos. http://www.flickr.com/photos/hackerchick/4547529858/
  • 4. Malos olores Si apesta, hay que cambiarlo. La abuela Beck, sobre la crianza de bebes. http://www.flickr.com/photos/brian-burke/266468336/
  • 5. Código duplicado El principio de todos los males Refactorings: Extraer método Extraer clase Subir campo Método plantilla
  • 6. Método largo Uno de los clásicos Refactorings: Extraer método Reemplazar temporal por consulta Reemplazar método por Objeto método Descomponer condición
  • 7. Clase muy grande Otro clásico Refactorings: Extraer Clase Extraer Subclase Extraer Interfaz Reemplazar valor de datos con Objeto
  • 8. Lista de parámetros muy larga Un vicio popular Refactorings: Reemplazar parámetro con Método Introducir Objeto parámetro Preservar Objeto completo
  • 9. Cambios divergentes Falla al buscar responsabilidades Refactoring: Extraer clase
  • 10. Cirugía con escopeta Los cambios afectan por doquier Refactorings: Mover método Mover campo Clase en una línea
  • 11. Envidia de características Clases que usan más los miembros ajenos que los propios Refactorings: Mover método Mover campo Extraer método
  • 12. Datos en yunta Grupitos inseparables Refactorings: Extraer clase Introducir Objeto parámetro Preservar Objeto completo
  • 13. Obsesión primitiva Desperdiciar los tipos extendidos Refactorings: Reemplazar valor de datos con Objeto Extraer clase Introducir Objeto parámetro Reemplazar array con objeto Reemplazar tipo con clase Reemplazar tipo con subclases Reemplazar tipos con estado/estrategia
  • 14. Sentencias switch Desperdiciar el poder del polimorfismo Refactorings: Reemplazar condicional con polimorfismo Reemplazar tipo con subclases Reemplazar tipo con estado/estrategia Reemplazar parámetro con métodos explícitos Introducir objeto nulo
  • 15. Jerarquías de herencia paralelas Un caso especial de cirugía con escopeta Cada vez que se modifica algo en una jerarquía, debemos modificar la otra. Refactorings: Mover método Mover campo
  • 16. Clase vaga Clases que no cubren su costo Refactorings: Clase en una línea Colapsar jerarquía
  • 17. Generalidad especulativa No hace falta todavía, pero puede ser que… Refactorings: Colapsar jerarquía Clase en una línea Quitar parámetro Renombrar método
  • 18. Campo temporal Los campos (o variables locales) deben justificarse Refactorings: Extraer clase Introducir objeto nulo
  • 19. Cadenas de mensajes Demasiados saltos sin una buena razón Refactoring: Esconder delegado
  • 20. Intermediario Métodos que todo lo delegan Refactorings: Quitar Intermediario Método en una línea Reemplazar delegación con herencia
  • 21. Intimidad inapropiada Conociendo otras clases demasiado de cerca Refactorings: Mover método Mover campo Cambiar asociación bidireccional a unidireccional Reemplazar herencia con delegación Esconder delegado
  • 22. Clases alternativas con interfaces diferentes Quiebres en el polimorfismo y probables fallas de jerarquías Refactorings: Renombrar método Mover método
  • 23. Biblioteca de clases incompleta Extendiendo clases sin tener las fuentes Refactorings: Introducir método foráneo Introducir extensión local
  • 24. Legado rechazado Interrumpiendo las leyes de la herencia Refactoring: Reemplazar herencia por delegación
  • 25. Comentarios No, no está mal poner comentarios, pero… Refactorings: Extraer método Introducir aserción
  • 26. Evitando problemas con tests Una de las maneras más seguras de hacer refactoring sin romper lo que ya funciona es utilizar Unit Testing. Se escribe un test (si no existe previamente) antes de hacer cualquier cambio, y se verifica que siga pasándolo luego del refactoring.
  • 27. Herramientas de Refactoring Refactoring Browser (Smalltalk) Eclipse (Java) Visual Studio / MonoDevelop (básicas) ReSharper / Code Rush
  • 28. Bibliografía Joshua Kerievsky Martin Fowler William Wake www.refactoring.com

Notas del editor

  1. Refactoring (verbo) – Refactoring (sustantivo)ObjetivosMejorar el diseño del softwareHacer que el código sea más entendibleAyuda a encontrar bugs ocultosAumentar la productividad (¡en serio!)
  2. En lugar de diseñar, bosquejar y hacer refactoring.Aumentar niveles de indirecciónCompartir más la lógicaExplicar por separado intención de implementaciónAislar los cambiosEsconder lógica condicionalQuitar indirección parásita (¡fuera!)
  3. Los olores en el código son síntomas evidentes de que la hora del refactoring llegó.Martin Fowler y Kent Beck catalogaron una cierta cantidad de olores y los refactoring apropiados para remediarlos.