SlideShare uma empresa Scribd logo
1 de 37
Disertante: Ing. Rocco, Sebastián
Mail: srocco@movizen.com
Web: ww.movizen.com
Blog: ww.srocco.com.ar
Jornada de Arquitectura de Software
Principios SOLID
Agenda
• ¿Qué diseño queremos?
• Síntomas de un mal diseño.
• Principios SOLID.
• Comentarios finales.
• Recursos adicionales.
• Preguntas.
¿Qué diseño queremos?
• Cohesivo.
• Robusto.
• Flexible.
• Reusable.
• Mantenible.
• Testeable.
Síntomas de un mal diseño
• Rigidez.
• Fragilidad.
• Inmovilidad.
• Viscosidad.
• Complejidad innecesaria.
• Repetición innecesaria.
• Opacidad.
¿Qué es SOLID?
• Acrónimo mnemónico.
• Introducido por Robert C. Martin a comienzos
de la década del 2000.
• Son cinco principios básicos de la
programación orientada a objetos y el diseño.
• Ayudan a desarrollar un software de
calidad, legible, entendible y fácilmente
testeable.
Principios SOLID
Single Responsibility Principle (SRP).
Open Closed Principle (OCP).
Liskov Substitution Principle (LSP).
Interface Segregation Principle (ISP).
Dependency Inversion Principle (DIP).
Principios SOLID
SRP: Principio de Responsabilidad Única.
OCP: Principio Abierto-Cerrado.
LSP: Principio de Substitución de Liskov.
ISP: Principio de Segregación de Interfaces.
DSI: Principio Inversión de Dependencia.
Responsabilidad única
“Una clase debería tener una, y solo una
razón para cambiar”
Robert C. Martin
Principles of Object Oriented Design
Responsabilidad única
• Clase con 2 o más responsabilidades:
– Responsabilidades acopladas.
• + responsabilidades, + probabilidades de cambio!
• Síntomas:
– Código spaghetti.
– "God Class“.
– Comentarios: “si”; “y”; ”pero”; “excepto”; “cuando”.
• Ventajas:
– Es más fácil re-utilizar partes del código.
– Las clases grandes son más difíciles de leer y cambiar.
– Solucionamos el dilema del nombre de la clase.
Responsabilidad única
Responsabilidad única
Abierto-Cerrado
“Todo módulo debe estar abierto para la
extensión pero, cerrado para modificación”
Bertrand Meyer
Object Oriented Software Construction
Abierto-Cerrado
• Los cambios deben generar código nuevo,
no modificar el código viejo.
• La clave está en la abstracción!
• Strategy and Template method son las formas
más comunes de satisfacer OCP.
• Ningún diseño se puede cerrar a TODOS los
cambios.
Abierto-Cerrado
Abierto-Cerrado
Substitución de Liskov
“Si para todo objeto o1 de tipo S existe un objeto
o2 de tipo T tal que para todo programa P
definido en función de T el comportamiento de
P no cambia cuando o1 es substituido por
o2, entonces S es un subtipo de T”
Barbara J. Liskov
Keynote – Data abstraction and hierarchy (1987)
Substitución de Liskov
Traduciendo…
“Las funciones que usan punteros o referencias
a clases base, deben ser capaces de usar
objetos de clases derivadas sin saberlo”
Robert C. Martin
Substitución de Liskov
• Es la base de poder del polimorfismo.
• Los subtipos deben ser substituibles por sus
tipos base.
• No podemos validar un modelo aisladamente.
– La validez depende del contexto (sus clientes).
• La violación de LSP es una violación latente de
OCP
Substitución de Liskov
Substitución de Liskov
• Un cuadrado puede ser un rectángulo….
– Pero el objeto cuadrado NO es un objeto rectángulo.
– El comportamiento no es igual!
Substitución de Liskov
• Diseñar basándose en comportamientos
• Pensar en “Sustituible por” y no en “Es un”-
• Diseño por contrato:
– Las pre-condiciones de los métodos de la sub-
clase no deben ser más fuertes que las de la clase
base.
– Las post-condiciones de los métodos de la sub-
clase no deben ser más débiles que las de la clase
base.
Substitución de Liskov
Substitución de Liskov
Segregación de Interfaces
“Los clientes no deben de ser forzados a
depender de interfaces que no utilizan.”
Robert C. Martin
Segregación de Interfaces
• Apunta a evitar las interfaces “gordas”.
• Les falta cohesión.
• No importa la cantidad de métodos, sino que
todos sus clientes las utilicen.
• Síntoma: “Unimplemented method”.
• Inadvertidamente podemos acoplar clientes
que usan ciertos métodos con otros clientes
que no los usan.
Segregación de Interfaces
Segregación de Interfaces
Inversión de dependencia
A) “Los módulos de alto nivel no deben de
depender de módulos de bajo nivel. Ambos
deben depender de abstracciones.”
B) “Las abstracciones no deben depender de
detalles. Los detalles deben depender de
abstracciones.”
Inversión de dependencia
• ¿ Por qué depender de una abstracción?
– El objeto cliente se desacopla de la
implementación.
– Podemos intercambiar la implementación (OCP!!)
• Problemas dependencias directas:
– ¡Las dependencias son transitivas!
• Ventajas dependencias indirectas:
– Desacoplamiento.
– Aislamiento.
– Reusabilidad.
Inversión de dependencia
Inversión de dependencia
SOLID - Comentarios Finales
• Definen lineamientos, no son reglas estrictas.
• Hay que comprender su motivación y aplicarlos
con criterio.
• No crear complejidad innecesaria!
• No es posible escribir código perfecto…
– TAMPOCO ES NECESARIO!
• No gastar recursos donde no es necesario.
• Con TDD, podemos refactorizar después!
SOLID - Comentarios Finales
“El elemento más volátil en los proyectos software
son los requisitos. Vivimos en un mundo de
requisitos cambiantes, y nuestro trabajo es estar
seguros de que nuestros software puede sobrevivir
a esos cambios, así que no culpes a los requisitos
cambiantes por los fallos en el software.”
Robert C. Martin
Recursos adicionales.
¿Preguntas?
Muchas Gracias!
Datos de Contacto
Disertante: Ing. Rocco, Sebastián
Mail: srocco@movizen.com
Web: ww.movizen.com
Blog: www.srocco.com.ar

Mais conteúdo relacionado

Mais procurados

Presentacion Ciclo de vida- Ingenieria del software
Presentacion Ciclo de vida- Ingenieria del softwarePresentacion Ciclo de vida- Ingenieria del software
Presentacion Ciclo de vida- Ingenieria del softwareSamuelSanchez136
 
Análisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructuradoAnálisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructuradojr_palaciosg
 
Modelos de Procesos de Software
Modelos de Procesos de SoftwareModelos de Procesos de Software
Modelos de Procesos de SoftwareJiuseppe Flores
 
Presentación open closed principle
Presentación open closed principlePresentación open closed principle
Presentación open closed principleAutentia
 
Paradigma Orientado a Objetos
Paradigma Orientado a ObjetosParadigma Orientado a Objetos
Paradigma Orientado a ObjetosNestor Traña
 
Tabla comparativa- metodologías de desarrollo
Tabla comparativa-  metodologías de desarrolloTabla comparativa-  metodologías de desarrollo
Tabla comparativa- metodologías de desarrolloitsarellano
 
Act.4 - Cuadro comparativo - Lengujes de desarrollo
Act.4 - Cuadro comparativo - Lengujes de desarrolloAct.4 - Cuadro comparativo - Lengujes de desarrollo
Act.4 - Cuadro comparativo - Lengujes de desarrolloDafne Alcantar
 
Modelo en cascada
Modelo en cascadaModelo en cascada
Modelo en cascadahome
 
Metodología xp
Metodología xpMetodología xp
Metodología xpPiskamen
 

Mais procurados (20)

Proceso del Software
Proceso del Software Proceso del Software
Proceso del Software
 
Modelo en cascada
Modelo en cascadaModelo en cascada
Modelo en cascada
 
Base de datos distribuidas
Base de datos distribuidasBase de datos distribuidas
Base de datos distribuidas
 
Problema 8 puzzle
Problema 8 puzzleProblema 8 puzzle
Problema 8 puzzle
 
Presentacion Ciclo de vida- Ingenieria del software
Presentacion Ciclo de vida- Ingenieria del softwarePresentacion Ciclo de vida- Ingenieria del software
Presentacion Ciclo de vida- Ingenieria del software
 
Análisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructuradoAnálisis y diseño de sistemas estructurado
Análisis y diseño de sistemas estructurado
 
Modelos de Procesos de Software
Modelos de Procesos de SoftwareModelos de Procesos de Software
Modelos de Procesos de Software
 
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?
 
Fase de Elaboración RUP
Fase de Elaboración RUPFase de Elaboración RUP
Fase de Elaboración RUP
 
Presentación open closed principle
Presentación open closed principlePresentación open closed principle
Presentación open closed principle
 
Paradigma Orientado a Objetos
Paradigma Orientado a ObjetosParadigma Orientado a Objetos
Paradigma Orientado a Objetos
 
Tabla comparativa- metodologías de desarrollo
Tabla comparativa-  metodologías de desarrolloTabla comparativa-  metodologías de desarrollo
Tabla comparativa- metodologías de desarrollo
 
Programación 3: colas
Programación 3: colasProgramación 3: colas
Programación 3: colas
 
Act.4 - Cuadro comparativo - Lengujes de desarrollo
Act.4 - Cuadro comparativo - Lengujes de desarrolloAct.4 - Cuadro comparativo - Lengujes de desarrollo
Act.4 - Cuadro comparativo - Lengujes de desarrollo
 
Modelo en espiral
Modelo en espiralModelo en espiral
Modelo en espiral
 
Modelo en cascada
Modelo en cascadaModelo en cascada
Modelo en cascada
 
Modelos concurrentes
Modelos concurrentesModelos concurrentes
Modelos concurrentes
 
Metodología xp
Metodología xpMetodología xp
Metodología xp
 
Unidad 7 lenguajes gramaticas y automatas
Unidad 7 lenguajes gramaticas y automatasUnidad 7 lenguajes gramaticas y automatas
Unidad 7 lenguajes gramaticas y automatas
 
Metamodelo UML
Metamodelo UMLMetamodelo UML
Metamodelo UML
 

Semelhante a Principios SOLID

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
 
Diplomado de Arquitectura : Dictado por Héctor Orozco
Diplomado de Arquitectura : Dictado por Héctor OrozcoDiplomado de Arquitectura : Dictado por Héctor Orozco
Diplomado de Arquitectura : Dictado por Héctor OrozcoHéctor Orozco
 
05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdfAlbertoBaigorria
 
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
 
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
 
Mobile Day - Swift y Objective-C
Mobile Day - Swift y Objective-CMobile Day - Swift y Objective-C
Mobile Day - Swift y Objective-CSoftware Guru
 
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 fuerteRubén Serrano Núñez
 
SOLID - Open/Close Principle
SOLID - Open/Close PrincipleSOLID - Open/Close Principle
SOLID - Open/Close PrincipleKevin Robayna
 
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/2012Alfredo 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/2012Alfredo Chavez
 
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlinCurso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlinxavazque2
 

Semelhante a Principios SOLID (20)

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
 
SOLID
SOLIDSOLID
SOLID
 
Diplomado de Arquitectura : Dictado por Héctor Orozco
Diplomado de Arquitectura : Dictado por Héctor OrozcoDiplomado de Arquitectura : Dictado por Héctor Orozco
Diplomado de Arquitectura : Dictado por Héctor Orozco
 
Solid con typescript
Solid con typescriptSolid con typescript
Solid con typescript
 
Solid
SolidSolid
Solid
 
05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf
 
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 de diseño
Principios de diseñoPrincipios de diseño
Principios de diseño
 
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
 
Solid
SolidSolid
Solid
 
Mobile Day - Swift y Objective-C
Mobile Day - Swift y Objective-CMobile Day - Swift y Objective-C
Mobile Day - Swift y Objective-C
 
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
 
SOLID - Open/Close Principle
SOLID - Open/Close PrincipleSOLID - Open/Close Principle
SOLID - Open/Close Principle
 
Diseño Agile
Diseño AgileDiseño Agile
Diseño Agile
 
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
 
Deconstrucción de SOLID
Deconstrucción de SOLIDDeconstrucción de SOLID
Deconstrucción de SOLID
 
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlinCurso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
Curso profesional-de-desarrollo-de-aplicaciones-android-con-kotlin
 
Presentacion cw2012
Presentacion cw2012Presentacion cw2012
Presentacion cw2012
 
SOLID para CatDotNet
SOLID   para CatDotNetSOLID   para CatDotNet
SOLID para CatDotNet
 

Último

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 

Último (20)

TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 

Principios SOLID

  • 1. Disertante: Ing. Rocco, Sebastián Mail: srocco@movizen.com Web: ww.movizen.com Blog: ww.srocco.com.ar Jornada de Arquitectura de Software Principios SOLID
  • 2. Agenda • ¿Qué diseño queremos? • Síntomas de un mal diseño. • Principios SOLID. • Comentarios finales. • Recursos adicionales. • Preguntas.
  • 3. ¿Qué diseño queremos? • Cohesivo. • Robusto. • Flexible. • Reusable. • Mantenible. • Testeable.
  • 4. Síntomas de un mal diseño • Rigidez. • Fragilidad. • Inmovilidad. • Viscosidad. • Complejidad innecesaria. • Repetición innecesaria. • Opacidad.
  • 5. ¿Qué es SOLID? • Acrónimo mnemónico. • Introducido por Robert C. Martin a comienzos de la década del 2000. • Son cinco principios básicos de la programación orientada a objetos y el diseño. • Ayudan a desarrollar un software de calidad, legible, entendible y fácilmente testeable.
  • 6. Principios SOLID Single Responsibility Principle (SRP). Open Closed Principle (OCP). Liskov Substitution Principle (LSP). Interface Segregation Principle (ISP). Dependency Inversion Principle (DIP).
  • 7. Principios SOLID SRP: Principio de Responsabilidad Única. OCP: Principio Abierto-Cerrado. LSP: Principio de Substitución de Liskov. ISP: Principio de Segregación de Interfaces. DSI: Principio Inversión de Dependencia.
  • 8. Responsabilidad única “Una clase debería tener una, y solo una razón para cambiar” Robert C. Martin Principles of Object Oriented Design
  • 9. Responsabilidad única • Clase con 2 o más responsabilidades: – Responsabilidades acopladas. • + responsabilidades, + probabilidades de cambio! • Síntomas: – Código spaghetti. – "God Class“. – Comentarios: “si”; “y”; ”pero”; “excepto”; “cuando”. • Ventajas: – Es más fácil re-utilizar partes del código. – Las clases grandes son más difíciles de leer y cambiar. – Solucionamos el dilema del nombre de la clase.
  • 12. Abierto-Cerrado “Todo módulo debe estar abierto para la extensión pero, cerrado para modificación” Bertrand Meyer Object Oriented Software Construction
  • 13. Abierto-Cerrado • Los cambios deben generar código nuevo, no modificar el código viejo. • La clave está en la abstracción! • Strategy and Template method son las formas más comunes de satisfacer OCP. • Ningún diseño se puede cerrar a TODOS los cambios.
  • 16. Substitución de Liskov “Si para todo objeto o1 de tipo S existe un objeto o2 de tipo T tal que para todo programa P definido en función de T el comportamiento de P no cambia cuando o1 es substituido por o2, entonces S es un subtipo de T” Barbara J. Liskov Keynote – Data abstraction and hierarchy (1987)
  • 17. Substitución de Liskov Traduciendo… “Las funciones que usan punteros o referencias a clases base, deben ser capaces de usar objetos de clases derivadas sin saberlo” Robert C. Martin
  • 18. Substitución de Liskov • Es la base de poder del polimorfismo. • Los subtipos deben ser substituibles por sus tipos base. • No podemos validar un modelo aisladamente. – La validez depende del contexto (sus clientes). • La violación de LSP es una violación latente de OCP
  • 20. Substitución de Liskov • Un cuadrado puede ser un rectángulo…. – Pero el objeto cuadrado NO es un objeto rectángulo. – El comportamiento no es igual!
  • 21. Substitución de Liskov • Diseñar basándose en comportamientos • Pensar en “Sustituible por” y no en “Es un”- • Diseño por contrato: – Las pre-condiciones de los métodos de la sub- clase no deben ser más fuertes que las de la clase base. – Las post-condiciones de los métodos de la sub- clase no deben ser más débiles que las de la clase base.
  • 24. Segregación de Interfaces “Los clientes no deben de ser forzados a depender de interfaces que no utilizan.” Robert C. Martin
  • 25. Segregación de Interfaces • Apunta a evitar las interfaces “gordas”. • Les falta cohesión. • No importa la cantidad de métodos, sino que todos sus clientes las utilicen. • Síntoma: “Unimplemented method”. • Inadvertidamente podemos acoplar clientes que usan ciertos métodos con otros clientes que no los usan.
  • 28. Inversión de dependencia A) “Los módulos de alto nivel no deben de depender de módulos de bajo nivel. Ambos deben depender de abstracciones.” B) “Las abstracciones no deben depender de detalles. Los detalles deben depender de abstracciones.”
  • 29. Inversión de dependencia • ¿ Por qué depender de una abstracción? – El objeto cliente se desacopla de la implementación. – Podemos intercambiar la implementación (OCP!!) • Problemas dependencias directas: – ¡Las dependencias son transitivas! • Ventajas dependencias indirectas: – Desacoplamiento. – Aislamiento. – Reusabilidad.
  • 32. SOLID - Comentarios Finales • Definen lineamientos, no son reglas estrictas. • Hay que comprender su motivación y aplicarlos con criterio. • No crear complejidad innecesaria! • No es posible escribir código perfecto… – TAMPOCO ES NECESARIO! • No gastar recursos donde no es necesario. • Con TDD, podemos refactorizar después!
  • 33. SOLID - Comentarios Finales “El elemento más volátil en los proyectos software son los requisitos. Vivimos en un mundo de requisitos cambiantes, y nuestro trabajo es estar seguros de que nuestros software puede sobrevivir a esos cambios, así que no culpes a los requisitos cambiantes por los fallos en el software.” Robert C. Martin
  • 37. Datos de Contacto Disertante: Ing. Rocco, Sebastián Mail: srocco@movizen.com Web: ww.movizen.com Blog: www.srocco.com.ar