SlideShare una empresa de Scribd logo
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

Más contenido relacionado

La actualidad más candente

Programación modular estructurada.ppt
Programación modular estructurada.pptProgramación modular estructurada.ppt
Programación modular estructurada.pptLeydi Hernandez
 
Tipos de datos abstractos
Tipos de datos abstractosTipos de datos abstractos
Tipos de datos abstractos
neftali omar peña balam
 
Procesos
ProcesosProcesos
Procesos
pedro castro
 
Presentación open closed principle
Presentación open closed principlePresentación open closed principle
Presentación open closed principle
Autentia
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_software
Jose Luis Bugarin Peche
 
Metodologias xp
Metodologias xpMetodologias xp
Metodologias xp
ElvisAR
 
Programacion Extrema
Programacion ExtremaProgramacion Extrema
Programacion Extrema
Edgar Espinoza Silverio
 
Lenguaje de programacion ruby
Lenguaje de programacion rubyLenguaje de programacion ruby
Lenguaje de programacion ruby
Sonia Mamani Quispe
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en Java
César Hernández
 
Principios Ingenieria
Principios IngenieriaPrincipios Ingenieria
Principios Ingenieriatoryneutral
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre Objetos
Emilio Aviles Avila
 
Metodología xp
Metodología xpMetodología xp
Metodología xpPiskamen
 
Exposicion base de datos DB2-IBM
Exposicion base de datos DB2-IBMExposicion base de datos DB2-IBM
Exposicion base de datos DB2-IBM
Jacob Gómez
 
Orientacion a objetos cristina cachero
Orientacion a objetos   cristina cacheroOrientacion a objetos   cristina cachero
Orientacion a objetos cristina cachero
Luis R Castellanos
 
Arquitectura Rest
Arquitectura RestArquitectura Rest
Arquitectura Rest
Israel Rey
 
Principios orientacion-objetos
Principios orientacion-objetosPrincipios orientacion-objetos
Principios orientacion-objetos
karlalopezbello
 
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?
Juan José Fuchs Cerdeña
 
Uml clase 04_uml_clases
Uml clase 04_uml_clasesUml clase 04_uml_clases
Uml clase 04_uml_clases
Universidad Fermín Toro
 
Arquitectura de Software Principio Abierto- Cerrado Open/Close
Arquitectura de Software Principio Abierto- Cerrado Open/CloseArquitectura de Software Principio Abierto- Cerrado Open/Close
Arquitectura de Software Principio Abierto- Cerrado Open/Close
Ernesto Maya
 

La actualidad más candente (20)

Programación modular estructurada.ppt
Programación modular estructurada.pptProgramación modular estructurada.ppt
Programación modular estructurada.ppt
 
Tipos de datos abstractos
Tipos de datos abstractosTipos de datos abstractos
Tipos de datos abstractos
 
Procesos
ProcesosProcesos
Procesos
 
Presentación open closed principle
Presentación open closed principlePresentación open closed principle
Presentación open closed principle
 
Persistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_softwarePersistencia de datos_hibernate_arquitecturas_de_software
Persistencia de datos_hibernate_arquitecturas_de_software
 
Metodologias xp
Metodologias xpMetodologias xp
Metodologias xp
 
Programacion Extrema
Programacion ExtremaProgramacion Extrema
Programacion Extrema
 
Lenguaje de programacion ruby
Lenguaje de programacion rubyLenguaje de programacion ruby
Lenguaje de programacion ruby
 
Análisis estático de código en Java
Análisis estático de código en JavaAnálisis estático de código en Java
Análisis estático de código en Java
 
Principios Ingenieria
Principios IngenieriaPrincipios Ingenieria
Principios Ingenieria
 
Curso Java Inicial 5 Relaciones Entre Objetos
Curso Java Inicial   5 Relaciones Entre ObjetosCurso Java Inicial   5 Relaciones Entre Objetos
Curso Java Inicial 5 Relaciones Entre Objetos
 
Metodología xp
Metodología xpMetodología xp
Metodología xp
 
Exposicion base de datos DB2-IBM
Exposicion base de datos DB2-IBMExposicion base de datos DB2-IBM
Exposicion base de datos DB2-IBM
 
Orientacion a objetos cristina cachero
Orientacion a objetos   cristina cacheroOrientacion a objetos   cristina cachero
Orientacion a objetos cristina cachero
 
Arquitectura Rest
Arquitectura RestArquitectura Rest
Arquitectura Rest
 
Jsp
JspJsp
Jsp
 
Principios orientacion-objetos
Principios orientacion-objetosPrincipios orientacion-objetos
Principios orientacion-objetos
 
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?
 
Uml clase 04_uml_clases
Uml clase 04_uml_clasesUml clase 04_uml_clases
Uml clase 04_uml_clases
 
Arquitectura de Software Principio Abierto- Cerrado Open/Close
Arquitectura de Software Principio Abierto- Cerrado Open/CloseArquitectura de Software Principio Abierto- Cerrado Open/Close
Arquitectura de Software Principio Abierto- Cerrado Open/Close
 

Similar 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
 
SOLID
SOLIDSOLID
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
Héctor Orozco
 
Solid con typescript
Solid con typescriptSolid con typescript
Solid con typescript
Leonardo Micheloni
 
05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf05.Principio.Inversion.Control.pdf
05.Principio.Inversion.Control.pdf
AlbertoBaigorria
 
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
Luis 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 intento
David Luque Quintana
 
Mobile Day - Swift y Objective-C
Mobile Day - Swift y Objective-CMobile Day - Swift y Objective-C
Mobile Day - Swift y Objective-C
Software 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 fuerte
Rubén Serrano Núñez
 
SOLID - Open/Close Principle
SOLID - Open/Close PrincipleSOLID - Open/Close Principle
SOLID - Open/Close Principle
Kevin Robayna
 
Diseño Agile
Diseño AgileDiseño Agile
Diseño Agile
Martin Salias
 
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
 
Deconstrucción de SOLID
Deconstrucción de SOLIDDeconstrucción de SOLID
Deconstrucción de SOLID
Fernando Escolar Martínez-Berganza
 
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
xavazque2
 
SOLID para CatDotNet
SOLID   para CatDotNetSOLID   para CatDotNet

Similar 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

Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
espinozaernesto427
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
ManuelCampos464987
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
Luis Enrique Zafra Haro
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 

Último (20)

Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
Las lámparas de alta intensidad de descarga o lámparas de descarga de alta in...
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
Diagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdfDiagrama de flujo basada en la reparacion de automoviles.pdf
Diagrama de flujo basada en la reparacion de automoviles.pdf
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
biogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectosbiogas industrial para guiarse en proyectos
biogas industrial para guiarse en proyectos
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 

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