SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Principios de Diseño
adrianparedes82@gmail.com
@aparedes82
http://elblogdelfrasco.blogspot.com
Introducción
● Rigidez
○ Dificultad para implementar cambios
● Fragilidad
○ Tendencia a romperse con cada cambio
● Inmovilidad
○ Inhabilidad de reutilizar el código
● Viscosidad
○ Del Diseño: los hacks son muy sencillos
○ Del Ambiente: lento e ineficiente
Síntomas de un Diseño Podrido
● Cambios en los Requerimientos
○ Inicialmente no contemplados
● Administración de Dependencias
○ Es la arquitectura de dependencias la que
se va degradando
Causas que Aceleran la Entropía
y Principios Relacionados
SOLID
● Cualquier funcionalidad existente en un
programa debe existir de forma única
● Anti-principios:
○ WET: Write Everything Twice
○ WETTT: Write Everything Ten Throusand
Times
○ Copy & Paste
DRY (Don't Repeat Yourself)
● Todo componente debe tener una única
responsabilidad
● Una clase, al tener una única
responsabilidad, sólo debe ser alterada a
través de un cambio en dicha
responsabilidad
● No debe existir más de una razón para
cambiar una clase
SRP (Single Responsibility)
● Abierto a la Extensibilidad
● Cerrado a las Modificaciones
● Debemos poder añadir nueva
funcionalidad a la aplicación sin tener
que alterar el código ya construido
OCP (Open-Closed Principle)
● Las clases hijas deben poder ser tratadas
como las clases padre
● Diseño por Contrato (interfaces)
● Un usuario de una clase base debe
continuar funcionando apropiadamente en
el sistema independientemente de qué
clase derivada se utilice
● Podremos cambiar comportamiento creando
una nueva clase hija y sobreescribiendo
comportamiento
LSP (Liskov Substitution)
● Una clase cliente A que tiene una
dependencia con la clase B no debe verse
forzada a depender de métodos de la
clase B que no vaya a usar jamás
● Es preferible muchas interfaces con
pocos métodos a pocas interfaces con
muchos métodos
● Las interfaces son el contrato del
comportamiento (son declarativas)
ISP (Interface Segregation)
● El control de la construcción de los
objetos no recae en el desarrollador,
sino que es otra clase o conjunto de
clases las que se encargan de construir
los objetos que necesitamos
● Al trabajar con interfaces y no crear las
implementaciones, invertimos el control
de ejecución del código
● En camino a un Diseño Declarativo
IOC (Inversion of Control)
● Los componentes deben depender de
abstracciones, no de implementaciones
concretas
● Las dependencias que una clase tiene no
deben ser asignadas por ella misma sino
por un agente externo (Contenedor)
● Inyección de Dependencia
● Reflection, Spring, EJB, CDI
DIP (Dependency Inversion)
● Don't call us, we'll call you
● Relacionado con IoC y DIP
● Favorece el Bajo Acoplamiento
● Favorece la Alta Cohesión
Principio de Hollywood
● Antes de abordar el desarrollo, un
programador puede declarar una serie de
convenciones que le permiten asumir una
configuración por defecto del sistema
● Configuración por default
● Rapid Development
● Ruby on Rails, Seam, Spring Roo
COC (Convention Over Config)
● SRP: Single Responsibility Principle
● OCP: Open-Closed Principle
● LSP: Liskov Substitution Principle
● ISP: Interface Segregation Principle
● DIP: Dependency Inversion Principle
SOLID
Más allá de los Principios de Diseño
Conclusión
KISS (Keep It Simple, Stupid)
● Robert C. Martin (Uncle Bob)
● http://lostechies.
com/derickbailey/2009/02/11/solid-
development-principles-in-motivational-
pictures/
● Wikipedia
Bibliografía
Código Fuente
https://github.com/
elfrasco/design-principles
Solid

Más contenido relacionado

Destacado

Inyección de dependencia
Inyección de dependenciaInyección de dependencia
Inyección de dependenciaAdrián Paredes
 
Reutilizacion de Software
Reutilizacion de SoftwareReutilizacion de Software
Reutilizacion de SoftwareAntonio Moreno
 
Revisión de código fuente de manera ágil
Revisión de código fuente de manera ágilRevisión de código fuente de manera ágil
Revisión de código fuente de manera ágilJose Luis Bugarin Peche
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de softwareIker Canarias
 
Listado general de tiempos viii carrera ecologica dota
Listado general de tiempos viii carrera ecologica dotaListado general de tiempos viii carrera ecologica dota
Listado general de tiempos viii carrera ecologica dotaCarrera Ecológica Dota
 
Gestion basica de la informacion
Gestion basica de la informacionGestion basica de la informacion
Gestion basica de la informacionTättá Güerrero
 
David Sánchez-Tembleque: Principios de Contabilidad y Administración de Riesgos
David Sánchez-Tembleque: Principios de Contabilidad y Administración de RiesgosDavid Sánchez-Tembleque: Principios de Contabilidad y Administración de Riesgos
David Sánchez-Tembleque: Principios de Contabilidad y Administración de RiesgosDavid Sanchez-Tembleque
 
Guia de presentación de Proyecto Independiente
Guia de presentación de Proyecto IndependienteGuia de presentación de Proyecto Independiente
Guia de presentación de Proyecto IndependienteFelipe Real
 
Presentación proyectos de_aula_orqueta
Presentación proyectos de_aula_orquetaPresentación proyectos de_aula_orqueta
Presentación proyectos de_aula_orquetaprofeshacar
 
La enfermedad de el cabeceo
La enfermedad de el cabeceoLa enfermedad de el cabeceo
La enfermedad de el cabeceotonyelgordo1
 
Estefany becerra
Estefany becerraEstefany becerra
Estefany becerrazhingre
 
EL HABLA TORRECAMPEÑA
EL HABLA TORRECAMPEÑAEL HABLA TORRECAMPEÑA
EL HABLA TORRECAMPEÑAortegamoral
 
A cada obstáculo.epub
A cada obstáculo.epubA cada obstáculo.epub
A cada obstáculo.epubIsaac Luna
 

Destacado (20)

Inyección de dependencia
Inyección de dependenciaInyección de dependencia
Inyección de dependencia
 
Reutilizacion de Software
Reutilizacion de SoftwareReutilizacion de Software
Reutilizacion de Software
 
Revisión de código fuente de manera ágil
Revisión de código fuente de manera ágilRevisión de código fuente de manera ágil
Revisión de código fuente de manera ágil
 
Patrones de diseño de software
Patrones de diseño de softwarePatrones de diseño de software
Patrones de diseño de software
 
Matriz de valoración pid planificador
Matriz de valoración pid   planificadorMatriz de valoración pid   planificador
Matriz de valoración pid planificador
 
Presentación S.O.S Socorro al Rescate
Presentación S.O.S Socorro al RescatePresentación S.O.S Socorro al Rescate
Presentación S.O.S Socorro al Rescate
 
Listado general de tiempos viii carrera ecologica dota
Listado general de tiempos viii carrera ecologica dotaListado general de tiempos viii carrera ecologica dota
Listado general de tiempos viii carrera ecologica dota
 
Gestion basica de la informacion
Gestion basica de la informacionGestion basica de la informacion
Gestion basica de la informacion
 
David Sánchez-Tembleque: Principios de Contabilidad y Administración de Riesgos
David Sánchez-Tembleque: Principios de Contabilidad y Administración de RiesgosDavid Sánchez-Tembleque: Principios de Contabilidad y Administración de Riesgos
David Sánchez-Tembleque: Principios de Contabilidad y Administración de Riesgos
 
Guia de presentación de Proyecto Independiente
Guia de presentación de Proyecto IndependienteGuia de presentación de Proyecto Independiente
Guia de presentación de Proyecto Independiente
 
Presentación proyectos de_aula_orqueta
Presentación proyectos de_aula_orquetaPresentación proyectos de_aula_orqueta
Presentación proyectos de_aula_orqueta
 
Nuestros ..
Nuestros ..Nuestros ..
Nuestros ..
 
Info socio laboral 2013
Info socio laboral 2013Info socio laboral 2013
Info socio laboral 2013
 
Investigacion instructivo
Investigacion instructivoInvestigacion instructivo
Investigacion instructivo
 
La enfermedad de el cabeceo
La enfermedad de el cabeceoLa enfermedad de el cabeceo
La enfermedad de el cabeceo
 
Zipaquira
ZipaquiraZipaquira
Zipaquira
 
Estefany becerra
Estefany becerraEstefany becerra
Estefany becerra
 
Restructuración de los programas nacionales contra la PPC, Cuba, Haití y Repú...
Restructuración de los programas nacionales contra la PPC, Cuba, Haití y Repú...Restructuración de los programas nacionales contra la PPC, Cuba, Haití y Repú...
Restructuración de los programas nacionales contra la PPC, Cuba, Haití y Repú...
 
EL HABLA TORRECAMPEÑA
EL HABLA TORRECAMPEÑAEL HABLA TORRECAMPEÑA
EL HABLA TORRECAMPEÑA
 
A cada obstáculo.epub
A cada obstáculo.epubA cada obstáculo.epub
A cada obstáculo.epub
 

Similar a Solid

Como implementar MVP sin morir en el intento
Como implementar MVP sin morir en el intentoComo implementar MVP sin morir en el intento
Como implementar MVP sin morir en el intentoDavid Luque Quintana
 
05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdfAlbertoBaigorria
 
Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosJose E. Rodriguez Huerta
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilagilenavarra
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDLuis Alexander Aldazabal Gil
 
Android apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktoolAndroid apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktoolSalvador Mendoza
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweekCarlos Ble
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID RefactorAgile Spain
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoFinizens
 
Compartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de KanbanCompartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de Kanban233 Grados de TI
 
Barra libre en proyectos de software... pero sólo hasta media noche
Barra libre en proyectos de software... pero sólo hasta media noche Barra libre en proyectos de software... pero sólo hasta media noche
Barra libre en proyectos de software... pero sólo hasta media noche Sergio Fernández
 

Similar a Solid (20)

Como implementar MVP sin morir en el intento
Como implementar MVP sin morir en el intentoComo implementar MVP sin morir en el intento
Como implementar MVP sin morir en el intento
 
05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf
 
Principios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a ObjetosPrincipios SOLID de Diseño Orientado a Objetos
Principios SOLID de Diseño Orientado a Objetos
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
This is Drupal! (Basics)
This is Drupal! (Basics)This is Drupal! (Basics)
This is Drupal! (Basics)
 
Principios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLIDPrincipios de diseño de código orientado a objetos SOLID
Principios de diseño de código orientado a objetos SOLID
 
Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 
Una gota de elixir 2017
Una gota de elixir   2017Una gota de elixir   2017
Una gota de elixir 2017
 
Android apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktoolAndroid apps: un dia sin dex2jar y sin apktool
Android apps: un dia sin dex2jar y sin apktool
 
Principios de cloud native
Principios de cloud nativePrincipios de cloud native
Principios de cloud native
 
SIMUNROBOT
SIMUNROBOTSIMUNROBOT
SIMUNROBOT
 
Working with a design system
Working with a design systemWorking with a design system
Working with a design system
 
Apuntes #XPweek
Apuntes #XPweekApuntes #XPweek
Apuntes #XPweek
 
El ecosistema de Vue.js
El ecosistema de Vue.jsEl ecosistema de Vue.js
El ecosistema de Vue.js
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID Refactor
 
Desarrollo y diseño de software
Desarrollo y diseño de softwareDesarrollo y diseño de software
Desarrollo y diseño de software
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
 
Compartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de KanbanCompartiendo cómo trabajamos haciendo uso de Kanban
Compartiendo cómo trabajamos haciendo uso de Kanban
 
Barra libre en proyectos de software... pero sólo hasta media noche
Barra libre en proyectos de software... pero sólo hasta media noche Barra libre en proyectos de software... pero sólo hasta media noche
Barra libre en proyectos de software... pero sólo hasta media noche
 

Solid

  • 3. ● Rigidez ○ Dificultad para implementar cambios ● Fragilidad ○ Tendencia a romperse con cada cambio ● Inmovilidad ○ Inhabilidad de reutilizar el código ● Viscosidad ○ Del Diseño: los hacks son muy sencillos ○ Del Ambiente: lento e ineficiente Síntomas de un Diseño Podrido
  • 4. ● Cambios en los Requerimientos ○ Inicialmente no contemplados ● Administración de Dependencias ○ Es la arquitectura de dependencias la que se va degradando Causas que Aceleran la Entropía
  • 5.
  • 7.
  • 8. ● Cualquier funcionalidad existente en un programa debe existir de forma única ● Anti-principios: ○ WET: Write Everything Twice ○ WETTT: Write Everything Ten Throusand Times ○ Copy & Paste DRY (Don't Repeat Yourself)
  • 9.
  • 10. ● Todo componente debe tener una única responsabilidad ● Una clase, al tener una única responsabilidad, sólo debe ser alterada a través de un cambio en dicha responsabilidad ● No debe existir más de una razón para cambiar una clase SRP (Single Responsibility)
  • 11.
  • 12. ● Abierto a la Extensibilidad ● Cerrado a las Modificaciones ● Debemos poder añadir nueva funcionalidad a la aplicación sin tener que alterar el código ya construido OCP (Open-Closed Principle)
  • 13.
  • 14. ● Las clases hijas deben poder ser tratadas como las clases padre ● Diseño por Contrato (interfaces) ● Un usuario de una clase base debe continuar funcionando apropiadamente en el sistema independientemente de qué clase derivada se utilice ● Podremos cambiar comportamiento creando una nueva clase hija y sobreescribiendo comportamiento LSP (Liskov Substitution)
  • 15.
  • 16. ● Una clase cliente A que tiene una dependencia con la clase B no debe verse forzada a depender de métodos de la clase B que no vaya a usar jamás ● Es preferible muchas interfaces con pocos métodos a pocas interfaces con muchos métodos ● Las interfaces son el contrato del comportamiento (son declarativas) ISP (Interface Segregation)
  • 17. ● El control de la construcción de los objetos no recae en el desarrollador, sino que es otra clase o conjunto de clases las que se encargan de construir los objetos que necesitamos ● Al trabajar con interfaces y no crear las implementaciones, invertimos el control de ejecución del código ● En camino a un Diseño Declarativo IOC (Inversion of Control)
  • 18.
  • 19. ● Los componentes deben depender de abstracciones, no de implementaciones concretas ● Las dependencias que una clase tiene no deben ser asignadas por ella misma sino por un agente externo (Contenedor) ● Inyección de Dependencia ● Reflection, Spring, EJB, CDI DIP (Dependency Inversion)
  • 20. ● Don't call us, we'll call you ● Relacionado con IoC y DIP ● Favorece el Bajo Acoplamiento ● Favorece la Alta Cohesión Principio de Hollywood
  • 21. ● Antes de abordar el desarrollo, un programador puede declarar una serie de convenciones que le permiten asumir una configuración por defecto del sistema ● Configuración por default ● Rapid Development ● Ruby on Rails, Seam, Spring Roo COC (Convention Over Config)
  • 22. ● SRP: Single Responsibility Principle ● OCP: Open-Closed Principle ● LSP: Liskov Substitution Principle ● ISP: Interface Segregation Principle ● DIP: Dependency Inversion Principle SOLID
  • 23. Más allá de los Principios de Diseño Conclusión
  • 24.
  • 25. KISS (Keep It Simple, Stupid)
  • 26. ● Robert C. Martin (Uncle Bob) ● http://lostechies. com/derickbailey/2009/02/11/solid- development-principles-in-motivational- pictures/ ● Wikipedia Bibliografía