Date post: | 05-Dec-2014 |
Category: |
Technology |
Upload: | johnny-ordonez |
View: | 1,223 times |
Download: | 3 times |
A qué huele tu código?Code Smells y SOLID
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?
http://www.flickr.com/photos/futureshape/4000128011/
Desarrollo de Software Tradicional
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Mucho software actual se comporta como un juego de Jenga
Un pequeño
cambio…
http://amistadcuauti.files.wordpress.com/2008/08/jenga.jpg
http://design-crit.com/blog/images/jenga.jpg
Provocaefectos por
todaspartes...
Necesitamos un cambio en el
sistema…
http://raulpiriz.files.wordpress.com/2010/09/alg_jefe.jpg
http://blog.rwbenwick.com/wp-content/uploads/2009/12/Reason-For-Leaving-iStock_000008369823Medium.jpg
Produce temor…
http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
http://photos.pcpro.co.uk/blogs/wp-content/uploads/2010/10/frustrated.jpg
Pasamos más tiempo
leyendo código que
escribiéndolo
Costo de poseer código “No Mantenible”
Ellos podrán ayudarnos?
http://www.catosplace.net/blogs/personal/wp-content/uploads/2011/04/developers.jpg
Ustedes!!
“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
Actitud http://www.flickr.com/photos/designd15/4220055968/in/photostream/
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
Dónde puedo encontrar la información que necesito?
Cómo detectar si lo estoy haciendo mal?
Qué patrones resuelven este problema?
Qué puedo aplicar y qué no?
y muchos más…
Cómo detectar un código mal oliente?
Code Smells
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.
Viscosidad
http://photos.runic.com/photos/syrup1.jpg
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.
http://www.fondospantallagratis.com/wp-content/uploads/2009/03/fichas_de_domino.jpg
Repetición innecesaria
Repetición innecesaria es cuando el código posee
estructuras repetidas que pueden ser unificadas bajo
una sola abstracción.
http://img.fotocommunity.com/photos/11575434.jpg
Opacidad
Opacidad es la tendencia que posee un módulo a ser
difícil de leer y comprender.
A qué huele tu código?
http://fotos0.mundofotos.net/2008/19_11_2008/nostalgica1227105482/perrito-oliendo-flores.jpg
Un buen desarrollador
tiene un olfato fino
http://vinos.viaresto.com.ar/sites/default/files/Foto-aroma.jpg?1308074199
Si Usted posee…
http://www.shrink4men.com/wp-content/uploads/2010/12/pointing-finger.jpg
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
Refactorizar
http://www.zonelibere.net/images/stories/zenstones.jpg
Cambiar la estructura interna del código…
http://4.bp.blogspot.com/-RhAnCDMlvts/Tptjf9pQcZI/AAAAAAAAAUU/lJSYMataDOM/s1600/mecanismo-reloj.jpg
Cambiar la estructura interna…
http://4.bp.blogspot.com/-RhAnCDMlvts/Tptjf9pQcZI/AAAAAAAAAUU/lJSYMataDOM/s1600/mecanismo-reloj.jpg
Sin alterar su comportamiento visible…
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.
S.O.L.I.D
http://theicebergfestival.ca/wp-content/gallery/iceberg-photos-2009/iceberg2.jpg
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 CodeSmells y Tips
para corregirlos
Tomado de:
http://www.slideshare.net/rubenbp/a-qu-huele-tu-cdigo-afinando-nuestro-olfato-7400175