code smells y solid: a qué huele tu código?

Post on 05-Dec-2014

1.224 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

A qué huele tu código? Cómo detectar olores en mi código? Una mirada hacia las buenas prácticas de programación y la forma de detectar y corregir problemas frecuentes para de esta forma crear un código de calidad aplicando los principios SOLID.

TRANSCRIPT

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

top related