Code Smells y SOLID
A qué huele tu código?




http://village.blogs.pressdemocrat.com/10315/recap-whos-ready-for-summer/?tc=ar
Comencemos!!




http://lifesabusiness.files.wordpress.com/2011/05/lets-start.jpg?w=600&h=400
Porqué es
necesario
escribir un
buen código?
Desarrollo de Software Tradicional
http://www.flickr.com/photos/futureshape/4000128011/
Mucho software
actual se
comporta como
un juego de Jenga
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Unpequeño


                                                             cambio…


http://amistadcuauti.files.wordpress.com/2008/08/jenga.jpg
Provoca
efectos por
      todas
   partes...




http://design-crit.com/blog/images/jenga.jpg
Necesitamos un
  cambio en el
      sistema…




  http://raulpiriz.files.wordpress.com/2010/09/alg_jefe.jpg
Produce
  temor…




http://blog.rwbenwick.com/wp-content/uploads/2009/12/Reason-For-Leaving-iStock_000008369823Medium.jpg
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Pasamos más
                                                                                     tiempo
                                                                            leyendo código
                                                                                        que
                                                                              escribiéndolo




http://photos.pcpro.co.uk/blogs/wp-content/uploads/2010/10/frustrated.jpg
Costo de poseer código “No Mantenible”
Ellos podrán ayudarnos?
Ustedes!!




http://www.catosplace.net/blogs/personal/wp-content/uploads/2011/04/developers.jpg
Actitud                  http://www.flickr.com/photos/designd15/4220055968/in/photostream/




“Escribir código que entienda la computadora es una
técnica; escribir código que entienda un ser humano
           es un Arte” – Robert ‘Uncle Bob’ Martin
Entonces, ¿Por
                                                                              qué es
                                                                        importante
                                                                      escribir mejor
                                                                            código?

http://www.websoftwareqa.com/wp-content/uploads/2010/07/Computer-Code.jpg
Fácil de Entender



Fácil de Cambiar



      Barato de Mantener
Cómo detectar
Dónde puedo       si lo estoy
encontrar la      haciendo mal?
información que
necesito?
                  Qué puedo
                  aplicar y qué
Qué patrones      no?
resuelven este
problema?
y muchos más…
Code Smells




Cómo detectar un
código mal oliente?
Qué son los Code Smells?
     Son todos los síntomas que
podemos encontrar en el código
       fuente de un sistema que
indican que muy probablemente
         existan problemas más
 profundos de calidad de código,
          de diseño o de ambos.
Rigidez




          http://www.naturecabins.com/solar/images_600x400/20080525_steel_beam_closeup.JPG
Rigidez es la tendencia que
  posee el software a ser
 difícil de cambiar, incluso
    en formas sencillas o
     cambios mínimos.
Fragilidad




http://www.flickr.com/photos/tsvadivel/4780317627/
Fragilidad es la tendencia
 que posee un programa
para romperse en muchos
lugares cuando un simple
   cambio es realizado.
Inamovilidad




http://4.bp.blogspot.com/_b5RFglsqS4k/Rm2_uGVsxuI/AAAAAAAACfY/CkpR-E0HsV0/s400/sumo.jpg
Inamovilidad es la
 dificultad de separar el
sistema en componentes
      que pueden ser
   reutilizados en otros
         sistemas.
http://photos.runic.com/photos/syrup1.jpg




Viscosidad
Viscosidad se presenta
 cuando hacer las cosas
incorrectamente es más
  fácil que hacerlas del
     modo correcto.
Ambiente de desarrollo lento e
ineficiente

Tiempos muy largos de compilación

Subir el código toma horas

Hacer el deploy toma varios
minutos
Complejidad
                                                                      innecesaria




http://www.funglode.org/Portals/0/images/Sala_de_Prensa/2010/Marzo/Complejidad%20interior.jpg
Complejidad innecesaria
existe cuando hay muchos
      elementos que
actualmente no son útiles.
Repetición
                                                                          innecesaria




http://www.fondospantallagratis.com/wp-content/uploads/2009/03/fichas_de_domino.jpg
Repetición innecesaria es
 cuando el código posee
estructuras repetidas que
pueden ser unificadas bajo
  una sola abstracción.
Opacidad




http://img.fotocommunity.com/photos/11575434.jpg
Opacidad es la tendencia
que posee un módulo a ser
     difícil de leer y
      comprender.
http://fotos0.mundofotos.net/2008/19_11_2008/nostalgica1227105482/perrito-oliendo-flores.jpg




A qué huele tu código?
Un buen
                                                                             desarrollador
                                                                                  tiene un
                                                                                olfato fino




http://vinos.viaresto.com.ar/sites/default/files/Foto-aroma.jpg?1308074199
http://www.shrink4men.com/wp-content/uploads/2010/12/pointing-finger.jpg




Si Usted posee…
Código ilegible




http://3.bp.blogspot.com/_-XV87BeCV9Y/SwLqj5UzO8I/AAAAAAAAA4g/hzaxblNx1jw/s1600/IMG_2385.JPG
Código duplicado




http://www.matrix-explained.com/photopost/data/512/39100hugo3.jpg
Métodos muy Laaaargos!!




http://1.bp.blogspot.com/-
VqyZkA5M2eU/T35ixp0dD_I/AAAAAAAAAN4/pppIVZSeHbQ/s1600/548383_393176807378912_329870347042892_1399267_792609564_n.jpg
Clases muy                       grandes




http://cache2.allpostersimages.com/p/LRG/21/2163/18ACD00Z/posters/miller-john-huge-tyres-big-foot-customised-car-usa.jpg
http://www.zonelibere.net/images/stories/zenstones.jpg




                                                         Refactorizar
http://4.bp.blogspot.com/-RhAnCDMlvts/Tptjf9pQcZI/AAAAAAAAAUU/lJSYMataDOM/s1600/mecanismo-reloj.jpg




Cambiar la estructura interna del
código…
http://4.bp.blogspot.com/-RhAnCDMlvts/Tptjf9pQcZI/AAAAAAAAAUU/lJSYMataDOM/s1600/mecanismo-reloj.jpg


Sin alterar su comportamiento visible…




 Cambiar la estructura interna…
http://img.alibaba.com/wsphoto/v0/390462787/6pcs-lot-free-
shipping-2011-new-arrival-vintage-pocket-watch-necklaces.jpg
Obtener un código más
          simple.

  La refactorización enseña
técnicas para descubrir código
  de mala calidad y técnicas
       para cambiarlo.
http://theicebergfestival.ca/wp-content/gallery/iceberg-photos-2009/iceberg2.jpg




S.O.L.I.D
Single Responsibility Principle
Open / Close Principle
Liskov Substitution Principle
Interface Segregation Principle
Dependency Inversion Principle
Bueno, manos a la obra!!
Single Responsibility Principle
                      “Cada objeto debe tener
                        una responsabilidad
                            única, y esta
                        responsabilidad debe
                        estar completamente
                       encapsulada dentro de
                               la clase”
      “Las clases deben tener una única
     responsabilidad, una única razón de
                   cambio”
Open / Close Principle
               “Una clase debe
              estar abierta para
                extensión pero
                 cerrada para
                modificación”
Liskov Substitution Principle




  “Las clases derivadas deben ser
  sustituidas por sus clases base”
Interface Segregation Principle
                  “Mantenga interfaces
                    finas a un nivel de
                granularidad que el cliente
                         necesita.

                 Los clientes no deben ser
                  forzados a depender de
                interfaces que no utilizan.”
Dependency Inversion Principle
                     “Clases de alto nivel
                     no deben depender
                      de clases de bajo
                     nivel. Ambas deben
                       depender de sus
                        abstracciones”

     “Dependa de abstracciones, no de
           objetos concretos”
SOLID hace
que tu código
   huela bien
Gracias!

           @JohnnyOrdonez
Referencias

 • Clean Code: A Handbook of Agile Software Craftsmanship,
   Robert C. Martin (Aug 11, 2008) http://www.amazon.com/Clean-Code-
   Handbook-Software-Craftsmanship/dp/0132350882


 • Agile Software Development, Principles, Patterns, and
   Practices, Robert C. Martin (Oct 25, 2002) http://www.amazon.com/Software-
   Development-Principles-Patterns-Practices/dp/0135974445

 • Code Smells, Louhekon (2010) http://www.louhekon.fi/2010/02/code-
   smells/

 • A Taxonomy for "Bad Code Smells ", Mika Mäntylä (2010)
   http://www.soberit.hut.fi/mmantyla/BadCodeSmellsTaxonomy.htm
Referencias

 • A Taxonomy for "Bad Code Smells ", Mika Mäntylä (2010)
   http://www.soberit.hut.fi/mmantyla/BadCodeSmellsTaxonomy.htm


 • SOLID Software Design, AbbasRaza (2012)
   http://www.slideshare.net/theceo/solid-software-design


 • SOLID OO Principles, Andreas Enbohm (2011)
   http://www.slideshare.net/enbohm/solid-design-principles-9016117


 • The SOLID Principles in C#, Leon van Bokhorst (2012)
   http://www.remondo.net/solid-principles-csharp-single-responsibility/


 • A qué huele tu código?, Rubén Bernárdez (2011)
   http://www.slideshare.net/rubenbp/a-qu-huele-tu-cdigo-afinando-nuestro-
   olfato-7400175
Más Code
       Smells y Tips
     para corregirlos


                                                                         Tomado de:

http://www.slideshare.net/rubenbp/a-qu-huele-tu-cdigo-afinando-nuestro-olfato-7400175
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?
Code Smells y SOLID: A qué huele tu código?

Code Smells y SOLID: A qué huele tu código?