Your SlideShare is downloading. ×
  • Like
Refactoring
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Refactoring

  • 1,122 views
Published

Reunión Virtual Alt.NET Hispano sobre Re

Reunión Virtual Alt.NET Hispano sobre Re

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,122
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
24
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • 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!)
  • 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!)
  • 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.

Transcript

  • 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
  • 29. martin@salias.com.ar
    CodeAndBeyond.org
    http://www.flickr.com/photos/-bast-/349497988/