SlideShare une entreprise Scribd logo
1  sur  30
Principios de diseño
SOLID
Manuel Zapata
CaliJS – Octubre 2018
Hola, soy Manuel.
Desarrollador y arquitecto de software.
Co-organizador de Xamarin Cali.
Blogger y YouTuber.
Educador por pasión.
Website: https://manuelzapata.co
Mis redes
SoyManuelZapata
@ManuelZapata
ManuelZapata
Les presento al tío Bob
Principio de
única
responsabilidad
Single
responsability
principle (SRP)
Un módulo debería tener una y
solo una razón para cambiar
Veamos algo de código.
Principio de
abierto cerrado
Open Closed
Principle (OCP)
Un módulo debería estar
cerrado a modificaciones y
abierto a extensiones
Veamos algo de código.
Principio de
sustitución de
Liskov
Liskov Substitution
Principle (LSP)
Hijo de tigre sale pintado
Debería ser posible sustituir
una clase padre con una clase
hija, sin que hayan
comportamientos no deseados.
ProgramaClasePadre
ClaseHija
Principio de
segregación de
interfaces
Interface
Segregation
Principle (ISP)
Los clientes no deberían
depender de métodos que
no utilicen.
UsuarioUno UsuarioDos UsuarioTres
Principal
+ métodoUno
+ métodoDos
+ métodoTres
UsuarioUno UsuarioDos UsuarioTres
PrincipalDos
+ métodoDos
PrincipalUno
+ métodoUno
PrincipalTres
+ métodoTres
Pero JavaScript no tiene interfaces
Pero Flow y TypeScript, sí.
No dependas de lo que no
necesites.
Principio de
inversión de
dependencias
Dependency
Inversion Principle
(DIP)
Los módulos de alto nivel no
deberían depender de los
módulos de bajo nivel.
Primera idea
Las abstracciones no
deberían depender de los
detalles
Segunda idea
Inyección de dependencias
Design smells
• Rigidez.
• Fragilidad.
• Viscosidad.
• Complejidad innecesaria.
• Repetición innecesaria.
• Opacidad.
https://youtu.be/k9nvQemH9f4
https://manuelzapata.co/p
rin
Mini curso de principios de diseño
Si quieres aprender más de diseño y
arquitectura de software…
SoyManuelZapata
@ManuelZapata
ManuelZapata
Muchas gracias.

Contenu connexe

Tendances

Díme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarDíme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usar
Kiberley Santos
 
1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño
landeta_p
 

Tendances (20)

Builder Design Pattern (Generic Construction -Different Representation)
Builder Design Pattern (Generic Construction -Different Representation)Builder Design Pattern (Generic Construction -Different Representation)
Builder Design Pattern (Generic Construction -Different Representation)
 
Diffing Shotgun Surgery and Divergent Change smells in the two editions of Re...
Diffing Shotgun Surgery and Divergent Change smells in the two editions of Re...Diffing Shotgun Surgery and Divergent Change smells in the two editions of Re...
Diffing Shotgun Surgery and Divergent Change smells in the two editions of Re...
 
Modelo basado en prototipos - Ingeniería de Software
Modelo basado en prototipos - Ingeniería de SoftwareModelo basado en prototipos - Ingeniería de Software
Modelo basado en prototipos - Ingeniería de Software
 
Ejemplo rup
Ejemplo rupEjemplo rup
Ejemplo rup
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
Modelos o Ciclos de vida de software
Modelos o Ciclos de vida de softwareModelos o Ciclos de vida de software
Modelos o Ciclos de vida de software
 
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
 
JMockit
JMockitJMockit
JMockit
 
Pruebas exploratorias
Pruebas exploratoriasPruebas exploratorias
Pruebas exploratorias
 
Díme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usarDíme que desarrollas y te diré que metodología usar
Díme que desarrollas y te diré que metodología usar
 
SDLC - Software Development Life Cycle
SDLC - Software Development Life CycleSDLC - Software Development Life Cycle
SDLC - Software Development Life Cycle
 
Arquitectura software capitulo i
Arquitectura software capitulo iArquitectura software capitulo i
Arquitectura software capitulo i
 
Modelos de Procesos del Software
Modelos de Procesos del SoftwareModelos de Procesos del Software
Modelos de Procesos del Software
 
Tipos de proyectos informáticos, actuales y emergentes
Tipos de proyectos informáticos, actuales y emergentesTipos de proyectos informáticos, actuales y emergentes
Tipos de proyectos informáticos, actuales y emergentes
 
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XPETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
ETAPAS Y SUB ETAPAS DE LA METODOLOGÍA XP
 
1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño1 3 ingenieria software y patrones de diseño
1 3 ingenieria software y patrones de diseño
 
Waterfallmodel
WaterfallmodelWaterfallmodel
Waterfallmodel
 
Structure and Interpretation of Test Cases
Structure and Interpretation of Test CasesStructure and Interpretation of Test Cases
Structure and Interpretation of Test Cases
 
Metodologia dsdm
Metodologia dsdmMetodologia dsdm
Metodologia dsdm
 
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
애자일 테스트 프랙티스와 사례들 (부제: 협업의 힘)
 

Similaire à Principios de diseño SOLID

.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup
 
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
Jose E. Rodriguez Huerta
 

Similaire à Principios de diseño SOLID (20)

SOLID - ¿Cómo lo aplico a mi código?
SOLID - ¿Cómo lo aplico a mi código?SOLID - ¿Cómo lo aplico a mi código?
SOLID - ¿Cómo lo aplico a mi código?
 
Principios SOLID
Principios SOLIDPrincipios SOLID
Principios SOLID
 
Deconstrucción de SOLID
Deconstrucción de SOLIDDeconstrucción de SOLID
Deconstrucción de SOLID
 
Developing for Android (The movie)
Developing for Android (The movie)Developing for Android (The movie)
Developing for Android (The movie)
 
SOLID para CatDotNet
SOLID   para CatDotNetSOLID   para CatDotNet
SOLID para CatDotNet
 
Spring Inyección De Dependencias
Spring Inyección De DependenciasSpring Inyección De Dependencias
Spring Inyección De Dependencias
 
Principios S.O.L.I.D. en Sistemas de Información Distribuidos
Principios S.O.L.I.D. en Sistemas de Información DistribuidosPrincipios S.O.L.I.D. en Sistemas de Información Distribuidos
Principios S.O.L.I.D. en Sistemas de Información Distribuidos
 
Introducción a los Frameworks PHP
Introducción a los Frameworks PHP  Introducción a los Frameworks PHP
Introducción a los Frameworks PHP
 
Presentación open closed principle
Presentación open closed principlePresentación open closed principle
Presentación open closed principle
 
Magia con Drupal
Magia con DrupalMagia con Drupal
Magia con Drupal
 
Clean code 10-11
Clean code 10-11Clean code 10-11
Clean code 10-11
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
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
 
Bootcamp Javascript Online
Bootcamp Javascript OnlineBootcamp Javascript Online
Bootcamp Javascript Online
 
SEO para Drupal
SEO para DrupalSEO para Drupal
SEO para Drupal
 
PSD to HTML (Drupal) - Drupal Day Spain 2017 Cáceres
PSD to HTML (Drupal) - Drupal Day Spain 2017 CáceresPSD to HTML (Drupal) - Drupal Day Spain 2017 Cáceres
PSD to HTML (Drupal) - Drupal Day Spain 2017 Cáceres
 
Taller SOLID Refactor
Taller SOLID RefactorTaller SOLID Refactor
Taller SOLID Refactor
 
Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...
Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...
Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...
 
Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...
Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...
Prueba Corta: Video -Vida Real-Definicion de objetos, estado, comportamiento ...
 
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
 

Dernier

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (11)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
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...
 
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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
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.
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Principios de diseño SOLID

Notes de l'éditeur

  1. Módulo más malinterpretado. Un módulo debería tener una, y solo una, razón para cambiar.  NO significa que debería hacer una sola cosa. Más difícil reusar. Dificultad de mantenimiento.
  2. Un artefacto software debería estar abierto para ser extendido, pero cerrado para ser modificado.   Es un elemento crucial detrás de la arquitectura de muchos sistemas.   El objetivo es hacer el sistema fácil de extender sin que los cambios sean de alto impacto.   Esta extensión no solo se hace a través de herencia, sino que también se puede lograr mediante patrones de diseño.
  3. Va mucho más allá de la herencia.   Existencia herencia no significa que el principio se cumpla.   También aplica a otras cosas que no son herencia. Servicios REST mismas firmas de métodos.
  4. No necesariamente hablamos de interfaces. También hablamos de clases base, protocolos o incluso firmas de métodos.
  5. Por ejemplo, métodos con muchos parámetros.
  6. Deberían depender de abstracciones.
  7. Primer mal olor: rigidez   La aplicación es difícil de cambiar, incluso para cosas muy pequeñas.   El diseño es dificil de cambiar.   Segundo mal olor: fragilidad   La tendencia de un programa de dañarse en múltiples sitios, cuando un único cambio se hace.   El diseño se daña muy fácil.   Tercer mal olor: inmovilidad   Es muy difícil separar el sistema en componentes que puedan ser reusados en otros sistemas.   El diseño es difícil de reusar.   Cuarto mal olor: viscosidad   Los cambios que preservan el diseño son más difíciles de hacer que los machetes.   Hacer las cosas mal es más fácil que hacer las cosas bien.   Quinto olor: complejidad innecesaria   El diseño es más complejo de lo necesario.   Hay un exceso de diseño   Sexto olor: repetición innecesaria   Hay estructuras que se repiten.   En mi último video hablé bastante sobre copiar y pegar.   Séptimo olor: opacidad   Código escrito de manera clara y expresiva   VS   Código escrito de manera extraña y confusa.