SlideShare a Scribd company logo
1 of 46
S.O.L.I.D.
 ¿Cómo lo aplico en mi código?
#codepassion_pe




    @JuanjoFuchs   @RaybertParedes
http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx
Que pasa
  cuando nos
  toca modificar
  código?


http://www.albertelli.com/photoarchive/Random_2003/lawn_jenga0002.jpeg
Da miedo…




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
Quien nos podrá ayudar?




                                                                 Pues….
http://browse.deviantart.com/?qh=&section=&q=avengers#/d41k54l
Tampoco….
http://www.pharmatek.com/developers/developers.htm
Nosotros




http://www.catosplace.net/blogs/personal/wp-content/uploads/2011/04/developers.jpg
Pero como??




http://4.bp.blogspot.com/-wLWxI2BZTEo/TbP44yGHHXI/AAAAAAAACMA/ck1BVzrucHo/s1600/bg_doubt.jpg
Aprendiendo un poco de…




                          Etc…
En donde???




              Y otros mas…
Bueno, manos a la ubre!!




           Perdón, a la obra…. ;)
Entonces, ¿Qué es S.O.L.I.D.?
Es un acrónimo de:
• Siempre
• Olvido
• Lo
• Interesante del
• Desarrollo
Mentira, S.O.L.I.D. es un acrónimo de:

• Single Responsibility
• Open Closed
• Liskov Substitution
• Interface Segregation
• Dependency Inversion
Single Responsibility Principle
      Una clase jamás debería tener más
       de una razón por la cual cambiar

• Responsabilidad == Razón para cambiar
• Si una clase asume más de una
  responsabilidad, entonces tendrá más de una
  razón para cambiar.
• Acoplamiento de responsabilidades.
Single Responsibility Principle
Cohesión:                         Acoplamiento:

     Qué tan fuertemente             El grado en el cual cada
relacionadas y enfocadas están       módulo de un programa
las distintas responsabilidades    depende de cada uno de los
         de un módulo.                    otros módulos
Single Responsibility Principle
Single Responsibility Principle
https://github.com/JuanjoFuchs/SOLID/tree/master/SRP
       https://github.com/JuanjoFuchs/SOLID/tree/master/SRP%20-%20Refactorizado




Demo
Open Closed Principle
    Entidades de software (clases, módulos,
  funciones, etc.) deberían estar abiertas para
   extensión pero cerradas para modificación.

• Si 1 cambio impacta a varios módulos,
  entonces la aplicación no está bien diseñada.
• Debemos diseñar módulos que nunca
  cambien
Open Closed Principle
Abiertas para extensión       Cerradas para modificación

    Podemos hacer que la      No se necesita hacer cambios
  aplicación se comporte de    del código fuente de dicho
       distintas formas.                módulo.

     Extendiendo el
comportamiento del módulo.

                                 Pero cómo?

               Abstracción
Open Closed Principle




          https://gist.github.com/2896236#file_ocp_empleados.sin_refactorizar.cs
Open Closed Principle




https://gist.github.com/2896236#file_ocp_empleados.refactorizado.cs
https://github.com/JuanjoFuchs/SOLID/tree/master/OCP
       https://github.com/JuanjoFuchs/SOLID/tree/master/OCP%20-%20Refactorizado




Demo
Liskov Substitution Principle
  Funciones que usen punteros o referencias a
 clases base deben poder usar objetos de clases
              derivadas sin saberlo.

• Si tenemos una clase BASE y dos subclases
  SUB1 y SUB2, el código cliente siempre debe
  referirse a BASE.
• No decir: SUB1 es una BASE.
• En cambio decir: SUB1 es reemplazable por
  una BASE.
Liskov Substitution Principle




https://gist.github.com/2896064             https://gist.github.com/2896078
https://github.com/JuanjoFuchs/SOLID/tree/master/LSP




Demo
Interface Segregation Principle
    Los clientes no deberían estar forzados a
     depender de interfaces que no utilizan.

• Las interfaces “gordas” o “contaminadas”
  deben dividirse en varios grupos de funciones.
• Cada grupo será implementado por distintos
  tipos de clientes.
Interface Segregation Principle




                https://gist.github.com/2896112#file_lsp_animal.sin_refactorizar.cs
Interface Segregation Principle




                 https://gist.github.com/2896112#file_lsp_animal.refactorizado.cs
https://github.com/JuanjoFuchs/SOLID/tree/master/ISP




Demo
Dependency Inversion Principle
• Módulos de alto nivel no deben depender de
  módulos de bajo nivel. Ambos deben
  depender de abstracciones.
• Abstracciones no deben depender de detalles.
  Los detalles deben depender de
  abstracciones.

• Puede implementarse con:
  – Inyección de dependencias
  – IoC (Inversión del control)
DIP – Ejemplo 1




https://gist.github.com/2896132#file_dip_hola_mundo.sin_refactoriza   https://gist.github.com/2896132#file_dip_hola_mundo.refactorizado.
DIP – Ejemplo 2




https://gist.github.com/2896132#file_dip_volvo.sin_refactorizar.cs   https://gist.github.com/2896132#file_dip_volvo.refactorizado.cs
DIP – Arquitectura tradicional

                 UI

          Negocio




                                    Dependencia
Acceso a Datos        Componentes
DIP – Arquitectura invertida


Acceso a               Pruebas       Web
            UI
 Datos                 Unitarias   Services


           Capa de Negocio


                 Entidades
https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa
       https://github.com/JuanjoFuchs/SOLID/tree/master/DIP_Multicapa_Refactorizado




Demo
Referencias
• Posters motivacionales
   http://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/
• PluralSight – SOLID Principles of Object Oriented Design
   http://www.pluralsight-training.net/microsoft/Courses/TableOfContents?courseName=principles-oo-
   design
• Principios de DOO – Bob Martin
   http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
• Pablo’s SOLID Software Development
   http://lostechies.com/wp-content/uploads/2011/03/pablos_solid_ebook.pdf
• Principios SOLID con ejemplos reales
   http://blog.gauffin.org/2012/05/solid-principles-with-real-world-examples/
¿Preguntas?
SOLID - ¿Cómo lo aplico a mi código?

More Related Content

What's hot

Modelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de softwareModelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de software
Uriel Ramos
 

What's hot (20)

Estructura de datos pilas y colas
Estructura de datos pilas y colasEstructura de datos pilas y colas
Estructura de datos pilas y colas
 
Patrones GRASP
Patrones GRASPPatrones GRASP
Patrones GRASP
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
SOLID principles
SOLID principlesSOLID principles
SOLID principles
 
Learning solid principles using c#
Learning solid principles using c#Learning solid principles using c#
Learning solid principles using c#
 
Solid principles
Solid principlesSolid principles
Solid principles
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
Clases y objetos en Java
Clases y objetos en JavaClases y objetos en Java
Clases y objetos en Java
 
Solid Principles
Solid PrinciplesSolid Principles
Solid Principles
 
Patrones Grasp
Patrones GraspPatrones Grasp
Patrones Grasp
 
Metodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de softwareMetodologías agiles de desarrollo de software
Metodologías agiles de desarrollo de software
 
Encapsulamiento poo
Encapsulamiento pooEncapsulamiento poo
Encapsulamiento poo
 
4 objetos (caso de uso)
4 objetos  (caso de uso)4 objetos  (caso de uso)
4 objetos (caso de uso)
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
S.O.L.I.D. Principles for Software Architects
S.O.L.I.D. Principles for Software ArchitectsS.O.L.I.D. Principles for Software Architects
S.O.L.I.D. Principles for Software Architects
 
patrones-disenio_compress.pdf
patrones-disenio_compress.pdfpatrones-disenio_compress.pdf
patrones-disenio_compress.pdf
 
Modelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de softwareModelos de proceso de desarrollo de software
Modelos de proceso de desarrollo de software
 
Clean code: SOLID
Clean code: SOLIDClean code: SOLID
Clean code: SOLID
 
Solid principles
Solid principlesSolid principles
Solid principles
 

Similar to SOLID - ¿Cómo lo aplico a mi código?

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
Alfredo Chavez
 
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
Alfredo Chavez
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02
Kimiemi VJ
 
Directorio betabeers
Directorio betabeersDirectorio betabeers
Directorio betabeers
betabeers
 

Similar to SOLID - ¿Cómo lo aplico a mi código? (20)

Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
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?
 
Qué puede aprender Drupal de Plone
Qué puede aprender Drupal de PloneQué puede aprender Drupal de Plone
Qué puede aprender Drupal de Plone
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
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
 
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
 
El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8El universo JavaScript en Drupal 8
El universo JavaScript en Drupal 8
 
Developing for Android (The movie)
Developing for Android (The movie)Developing for Android (The movie)
Developing for Android (The movie)
 
Introducción a symfony
Introducción a symfonyIntroducción a symfony
Introducción a symfony
 
Evolución Android: Del Framework a la supervivencia del más fuerte
Evolución Android: Del Framework a la supervivencia del más fuerteEvolución Android: Del Framework a la supervivencia del más fuerte
Evolución Android: Del Framework a la supervivencia del más fuerte
 
El testing como impulsor del cambio hacia una cultura DevOps
El testing como impulsor del cambio hacia una cultura DevOpsEl testing como impulsor del cambio hacia una cultura DevOps
El testing como impulsor del cambio hacia una cultura DevOps
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02
 
Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...
 
Directorio betabeers
Directorio betabeersDirectorio betabeers
Directorio betabeers
 
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
SharePoint Saturday Barcelona. La importancia de JavaScript en nuestros desar...
 
Code Igniter
Code IgniterCode Igniter
Code Igniter
 
Herramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamenteHerramientas para desarrollar rápidamente
Herramientas para desarrollar rápidamente
 
Atix24
Atix24Atix24
Atix24
 

Recently uploaded

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Recently uploaded (10)

Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 

SOLID - ¿Cómo lo aplico a mi código?