![Page 1: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/1.jpg)
Principios SOLID de Programación Orientada a Objetos
![Page 2: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/2.jpg)
¿Diseño Orientado a Objetos?
¿Qué es? ¿De qué trata?
![Page 3: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/3.jpg)
¿Diseño Orientado a Objetos?
Separación de responsabilidades.Encapsulamiento.Manejo de dependencias.
![Page 4: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/4.jpg)
¿Cómo hacemos software?
¿Qué va mal en esta historia?
![Page 5: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/5.jpg)
¿Cómo hacemos software?
Empezamos…
![Page 6: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/6.jpg)
¿Cómo hacemos software?
Se empieza a usar…
![Page 7: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/7.jpg)
¿Cómo hacemos software?
Tienes que hacer cambios…
Say What?
![Page 8: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/8.jpg)
¿Cómo hacemos software?
Luego… nuevos cambios…
![Page 9: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/9.jpg)
¿Cómo hacemos software?
Y más…. y más cambios…
![Page 10: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/10.jpg)
¿Cómo hacemos software?
Encuentras solución…
![Page 11: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/11.jpg)
¿Cómo hacemos software?
Este código se está pudriendo…
![Page 12: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/12.jpg)
Aquí huele raro…
¿Cuándo sabes que comienza a podrirse?
Rezas para que no tengas que hacer cambios.Cambios “sencillos” toman semanas…Trabajar con el código es una tortura…Etc.
![Page 13: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/13.jpg)
Aquí huele raro…
¿Por qué?
Rigidez: Tantas interdependencias que un cambio implica cambios por todas partes.
Fragilidad: El sistema se rompe fácilmente, y en lugares que no relacionados.
![Page 14: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/14.jpg)
Aquí huele raro…
¿Por qué?
Movilidad: El código no es reusable.
Viscosidad: En sus dos vertientes, diseño y entorno.
![Page 15: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/15.jpg)
Aquí huele raro…
¿ok… pero… cómo sucede?
![Page 16: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/16.jpg)
Aquí huele raro…
¡El código crece!
![Page 17: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/17.jpg)
Aquí huele raro…
Y si no se mantiene adecuadamente…
![Page 18: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/18.jpg)
Aquí huele raro…
Se hecha a perder…
![Page 19: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/19.jpg)
Aquí huele raro…
![Page 20: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/20.jpg)
Aquí huele raro…
![Page 21: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/21.jpg)
Aquí huele raro…
![Page 22: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/22.jpg)
Aquí huele raro…
![Page 23: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/23.jpg)
Comparación
¿Cuáles son las diferencias?Primer ejemplo
Las políticas de alto nivel dependen directamente de las de bajo nivel.
Segundo ejemploLas políticas de alto y bajo nivel dependen de abstracciones.
![Page 24: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/24.jpg)
SOLID
¿Qué es eso?
![Page 25: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/25.jpg)
SOLID
¿Qué es eso?
Single Responsibility PrincipleOpen Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle
![Page 26: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/26.jpg)
![Page 27: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/27.jpg)
Single Responsibility Principle
¿Qué hace este código?
![Page 28: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/28.jpg)
Single Responsibility Principle
![Page 29: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/29.jpg)
Single Responsibility Principle
“Una clase debería tener una, y solo una razón para cambiar”
Robert C. MartinPrinciples of Object Oriented Design
![Page 30: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/30.jpg)
Single Responsibility Principle
![Page 31: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/31.jpg)
Single Responsibility Principle
![Page 32: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/32.jpg)
Single Responsibility Principle
¿Que hay del encapsulamiento?
¿No debería de saber como se salva a si mismo?
¿?
![Page 33: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/33.jpg)
SOLID
¿Qué es eso?
Single Responsibility PrincipleOpen Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle
![Page 34: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/34.jpg)
![Page 35: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/35.jpg)
Open-Closed Principle
“Todo módulo debe estar abierto para la extensión pero, cerrado para
modificación”
Bertrand MeyerObject Oriented Software Construction
![Page 36: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/36.jpg)
Open-Closed Principle
¿Qué quiere decir esto?
Afectar el comportamiento, sin modificar.
![Page 37: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/37.jpg)
Open-Closed Principle
Abierto para extensión:¿Cómo podemos hacerlo comportarse en nuevas y distintas formas a medida que la aplicación evoluciona, o para ajustarse a las necesidades de nuevas aplicaciones?
![Page 38: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/38.jpg)
Open-Closed Principle
Cerrado para modificación:No se puede modificar el código de lo que hay.
![Page 39: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/39.jpg)
Open-Closed Principle
![Page 40: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/40.jpg)
Open-Closed Principle
¿Qué podemos hacer para resolverlo?
Abstracción.
![Page 41: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/41.jpg)
Open-Closed Principle
![Page 42: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/42.jpg)
Open-Closed Principle
Ejemplo Shapes 01
![Page 43: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/43.jpg)
Open-Closed Principle
Ejemplo Shapes 02
![Page 44: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/44.jpg)
Open-Closed Principle
¿Es posible cerrar una clase al 100%?
![Page 45: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/45.jpg)
Open-Closed Principle
¿Cómo resolver el problema si queremos pintar los círculos antes que los
rectángulos?
![Page 46: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/46.jpg)
Open-Closed Principle
¿Y si el orden no depende del tipo de la figura?
![Page 47: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/47.jpg)
Open-Closed Principle
¿Consejos para evitar romper este principio?
Heurísticas para hacer esto posible:Hacer las variables miembro
privadas.
![Page 48: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/48.jpg)
Open-Closed Principle
![Page 49: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/49.jpg)
Open-Closed Principle
¿Consejos para evitar romper este principio?
Heurísticas para hacer esto posible:Hacer las variables miembro
privadas.No tener variables globales.
Nunca.
![Page 50: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/50.jpg)
Open-Closed Principle
![Page 51: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/51.jpg)
Open-Closed Principle
¿Consejos para evitar romper este principio?
Heurísticas para hacer esto posible:Hacer las variables miembro
privadas.No tener variables globales.
Nunca.Evitar usar RTTI.
![Page 52: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/52.jpg)
Open-Closed Principle
![Page 53: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/53.jpg)
SOLID
Herramientas bases para lograr mantenibilidad:
Abstracción.Herencia.Polimorfismo.
![Page 54: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/54.jpg)
SOLID
Pero… ¿Qué reglas siguen?¿Qué características tienen en
común?¿Qué problemas nos podemos
encontrar?
![Page 55: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/55.jpg)
SOLID
¿Qué es eso?
Single Responsibility PrincipleOpen Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle
![Page 56: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/56.jpg)
![Page 57: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/57.jpg)
Liskov Substitution Principle
“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. LiskovKeynote – Data abstraction and hierarchy (1987)
![Page 58: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/58.jpg)
Liskov Substitution Principle
![Page 59: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/59.jpg)
Liskov Substitution Principle
Traduciendo…
“Las funciones que usan punteros o referencias a clases base, deben ser capaces de usar objetos de clases
derivadas sin saberlo”
![Page 60: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/60.jpg)
Liskov Substitution Principle
![Page 61: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/61.jpg)
Liskov Substitution Principle
[Otro ejemplo sutil de violación del LSP][código LSP]
![Page 62: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/62.jpg)
Liskov Substitution Principle
[El problema real LSP][código LSP]
![Page 63: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/63.jpg)
Liskov Substitution Principle
¿Qué fue mal?
El programador hizo suposiciones.Square no se comporta como Rectangle.La relación “es un” se refiere al compor-tamiento extrínseco, no intrínseco.
![Page 64: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/64.jpg)
Liskov Substitution Principle
¿Qué fue mal?
Para que el “Open Closed Principle” se mantenga todas las clases derivadas deben adherirse al comportamiento que el cliente espera.
![Page 65: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/65.jpg)
Liskov Substitution Principle
Design by contract ™(diseño por contrato)
PrecondicionesPost condicionesInvariantes
![Page 66: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/66.jpg)
Liskov Substitution Principle
Design by contract
Derivando, solo se puede remplazar:Precondición: por una más débil.Post condición: por una más
fuerte.
![Page 67: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/67.jpg)
Liskov Substitution Principle
![Page 68: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/68.jpg)
Liskov Substitution Principle
El problema:Añadir PersistentSet que se puede
leer y escribir de un stream, pero…Condiciones:
Usar librería de tercero.Requiere que los objetos internos
seanPersistentObject
![Page 69: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/69.jpg)
Liskov Substitution Principle
![Page 70: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/70.jpg)
Liskov Substitution Principle
Solución problemática:Conoce el tipo.Falla con una excepción en tiempo de ejecución.
![Page 71: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/71.jpg)
Liskov Substitution Principle
![Page 72: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/72.jpg)
Liskov Substitution Principle
Solución que no se adhiere a LSP:Es una convención.Es fácil de violar.No funciona del todo (el nuevo). Hay que revenderla.Es restrictiva.
![Page 73: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/73.jpg)
Liskov Substitution Principle
![Page 74: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/74.jpg)
Liskov Substitution Principle
Solución usando LSP:TransparenteMenos restrictivaInherente a la estructura del
código
![Page 75: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/75.jpg)
Liskov Substitution Principle
LSP es parte fundamental del Open Closed Principle.
![Page 76: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/76.jpg)
SOLID
¿Qué es eso?
Single Responsibility PrincipleOpen Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle
![Page 77: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/77.jpg)
![Page 78: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/78.jpg)
Dependency Inversion Principle
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.”
![Page 79: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/79.jpg)
Dependency Inversion Principle
¿Por qué “inversión”?
Las formas mas tradicionales de diseño de software como el diseño y análisis estructurado, promueven la creación de estructuras donde los módulos de alto nivel dependen sobre módulos de bajo nivel.
![Page 80: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/80.jpg)
Dependency Inversion Principle
![Page 81: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/81.jpg)
Dependency Inversion Principle
¡Es absurdo! … ¿Pero… por qué?
Lo que queremos es la reutilización de los módulos de alto nivel.
Los módulos de bajo nivel ya sabemos re-utilizarlos.
![Page 82: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/82.jpg)
Dependency Inversion Principle
El concepto de capas (Layering)
“… toda arquitectura orientado a objetos que esté bien estructurada tiene capas claramente definidas, donde cada capa ofrece una serie de servicios coherentes mediante una serie de interfaces bien controladas y definidas.”
Grady BoochObject Solution (1996)
![Page 83: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/83.jpg)
Dependency Inversion Principle
Interpretación (?)
![Page 84: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/84.jpg)
Dependency Inversion Principle
AnálisisImplicaciones de estas dependencias directas:
¡Las dependencias son transitivas!Cambios en las capas inferiores
son susceptibles a propagarse.Es difícil reutilizar las capas
superiores.
![Page 85: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/85.jpg)
Dependency Inversion Principle
Interpretación
![Page 86: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/86.jpg)
Dependency Inversion Principle
AnálisisImplicaciones de estas dependencias indirectas:
Desacoplo.Aislamiento.Reusabilidad.Estabilidad.
![Page 87: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/87.jpg)
Dependency Inversion Principle
![Page 88: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/88.jpg)
Dependency Inversion Principle
![Page 89: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/89.jpg)
Dependency Inversion Principle
![Page 90: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/90.jpg)
Dependency Inversion Principle
![Page 91: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/91.jpg)
Dependency Inversion Principle
Indispensable para implementación de frameworks.Resistente al cambioAbstracción y detalle están aislados uno del otro, por lo que aumenta la mantenibilidad.
![Page 92: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/92.jpg)
SOLID
¿Qué es eso?
Single Responsibility PrincipleOpen Closed PrincipleLiskov Substitution PrincipleInterface Segregation PrincipleDependency Inversion Principle
![Page 93: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/93.jpg)
![Page 94: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/94.jpg)
Interface Segregation Principle
Sabemos cómo manejar la complejidad del código. Pero…
A medida que el código crece…
![Page 95: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/95.jpg)
Interface Segregation Principle
Las interfaces también crecen…
![Page 96: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/96.jpg)
Interface Segregation Principle
Fat interfaces(Interfaces gordas)
Les falta cohesión.Pueden separarse en grupos donde cada grupo sirve a un conjunto diferente de clientes.
![Page 97: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/97.jpg)
Interface Segregation Principle
![Page 98: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/98.jpg)
Interface Segregation Principle
Fat interfaces(Interfaces gordas)
Estas interfaces se necesitan.Pero… !No todas en una sola clase!
![Page 99: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/99.jpg)
Interface Segregation Principle
Fat interfaces(Interfaces gordas)
¿De donde salen?
![Page 100: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/100.jpg)
Interface Segregation Principle
![Page 101: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/101.jpg)
Interface Segregation Principle
![Page 102: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/102.jpg)
Interface Segregation Principle
Clientes separados implican interfaces separadas.
![Page 103: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/103.jpg)
Interface Segregation Principle
¿Por qué?
Los clientes ejercen fuerzas sobre las interfaces que emplean.
![Page 104: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/104.jpg)
Interface Segregation Principle
¿Cuáles son?
![Page 105: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/105.jpg)
Interface Segregation Principle
![Page 106: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/106.jpg)
Interface Segregation Principle
![Page 107: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/107.jpg)
Interface Segregation Principle
Implicaciones de estos cambios.
![Page 108: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/108.jpg)
Interface Segregation Principle
“Los clientes no deben de ser forzados a depender de interfaces que no
utilizan.”
Robert C. Martin
![Page 109: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/109.jpg)
Interface Segregation Principle
¿Qué hacemos entonces?
![Page 110: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/110.jpg)
Interface Segregation Principle
![Page 111: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/111.jpg)
Interface Segregation Principle
![Page 112: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/112.jpg)
SOLID
Por último…
Son principios, no leyes. Hay que conocerlos y entenderlos para saber utilizarlos apropiadamente.
Todos deberíamos de aplicarlos.
![Page 113: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/113.jpg)
SOLID
Por último…
Es la única forma de disminuir el número de programadores que cometen suicidio.
![Page 114: Principios SOLID de Diseño Orientado a Objetos](https://reader034.vdocuments.mx/reader034/viewer/2022052315/54c77d1a4a7959681b8b4579/html5/thumbnails/114.jpg)
SOLID
¿Donde aprender más?
www.objectmentor.comwww.google.com
Patterns and Advanced Principles of OOD (R.Martin)Object Oriented Software Construction
(B. Meyer)Object Oriented Analysis and Design
(G. Booch)