S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea...
Transcript of S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea...
![Page 1: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/1.jpg)
S.O.L.I.D. Python
![Page 2: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/2.jpg)
Alea Soluciones Bifer Team
![Page 3: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/3.jpg)
@eferro@pasku1 @apa42
@nestorsalceda
![Page 4: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/4.jpg)
Usual OO Systems
RigidFragile
ImmobileViscous
![Page 5: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/5.jpg)
![Page 6: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/6.jpg)
Why S.O.L.I.D. principles?
To create easy to maintain OO systemsImprove reusability
Easy testing
![Page 7: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/7.jpg)
For creating
Clean Code
![Page 8: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/8.jpg)
It's all about money
![Page 9: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/9.jpg)
![Page 10: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/10.jpg)
S.O.L.I.DSRP - Single responsibility principleDIP - Dependency inversion principleOCP - Open/closed principleLSP - Liskov substitution principleISP - Interface segregation principle
![Page 11: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/11.jpg)
PrinciplesNot Rules
![Page 12: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/12.jpg)
![Page 13: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/13.jpg)
Car wash service car wash job when the car enters in the car wash ✓ it registers a job customer notification when service completed ✓ it notifies the customer reporting when client report requested ✓ it shows all wash services for that customer
3 examples ran in 0.0178 seconds
![Page 14: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/14.jpg)
![Page 15: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/15.jpg)
![Page 16: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/16.jpg)
![Page 17: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/17.jpg)
![Page 18: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/18.jpg)
…Some refactors / versions later
![Page 19: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/19.jpg)
![Page 20: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/20.jpg)
![Page 21: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/21.jpg)
Depend upon Abstractions. Do not depend upon concretion
![Page 22: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/22.jpg)
Compilation / Startup time dependency
from <package> import module
![Page 23: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/23.jpg)
Runtime dependency
self.collaborator.message()
![Page 24: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/24.jpg)
![Page 25: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/25.jpg)
Global State ProblemImplicit dependency problemConcrete API
![Page 26: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/26.jpg)
No dependency injectionImplicit dependency problem
Concrete API
![Page 27: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/27.jpg)
![Page 28: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/28.jpg)
![Page 29: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/29.jpg)
![Page 30: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/30.jpg)
![Page 31: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/31.jpg)
![Page 32: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/32.jpg)
![Page 33: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/33.jpg)
Duck Typing Approved!!!
![Page 34: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/34.jpg)
![Page 35: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/35.jpg)
Liskov Substitutionprinciple violation
![Page 36: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/36.jpg)
Python don't force type inheritanceFor API implementation
(So, for reuse code, prefer Composition)
![Page 37: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/37.jpg)
Derived types must be completely substitutable for their base types
![Page 38: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/38.jpg)
![Page 39: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/39.jpg)
It isn't so important
![Page 40: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/40.jpg)
A narrow interface is a better interface
![Page 41: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/41.jpg)
SOLID Motivational Posters, by Derick Baileyhttp://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/
![Page 42: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/42.jpg)
car_wash code examplehttps://github.com/aleasoluciones/car_wash
SOLID definition (at wikipedia)http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
Getting a SOLID start (Uncle Bob)http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
Video SOLID Object Oriented Design (Sandi Metz)http://www.confreaks.com/videos/240-goruco2009-solid-object-oriented-design
![Page 43: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/43.jpg)
![Page 44: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/44.jpg)
![Page 45: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/45.jpg)
Thanks !!!@eferro
@pasku1 @apa42
@nestorsalceda
![Page 46: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/46.jpg)
S.O.L.I.D. Python
![Page 47: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/47.jpg)
Alea Soluciones Bifer Team
Hacemos productoTelecomunicacionesSistemas + SoftwareExtreme ProgrammingAportamos valor
![Page 48: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/48.jpg)
@eferro@pasku1 @apa42
@nestorsalceda
![Page 49: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/49.jpg)
Usual OO Systems
RigidFragile
ImmobileViscous
![Page 50: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/50.jpg)
![Page 51: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/51.jpg)
Why S.O.L.I.D. principles?
To create easy to maintain OO systemsImprove reusability
Easy testing
![Page 52: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/52.jpg)
For creating
Clean Code
![Page 53: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/53.jpg)
It's all about money
![Page 54: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/54.jpg)
![Page 55: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/55.jpg)
S.O.L.I.DSRP - Single responsibility principleDIP - Dependency inversion principleOCP - Open/closed principleLSP - Liskov substitution principleISP - Interface segregation principle
![Page 56: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/56.jpg)
PrinciplesNot Rules
![Page 57: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/57.jpg)
![Page 58: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/58.jpg)
Car wash service car wash job when the car enters in the car wash ✓ it registers a job customer notification when service completed ✓ it notifies the customer reporting when client report requested ✓ it shows all wash services for that customer
3 examples ran in 0.0178 seconds
![Page 59: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/59.jpg)
![Page 60: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/60.jpg)
Un módulo o una función debe tener una y solo una responsabilidad, o lo que es lo mismo, debe tener una y solo una razón para cambiar.
Más de una responsabilidad hace que el código sea dificil de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio.
¿Y qué es una responsabilidad?
Se trata de la audiencia de un determinado módulo o función, actores que reclaman cambios al software. Las responsabilidades son básicamente familias de funciones que cumplen las necesidades de dichos actores.
![Page 61: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/61.jpg)
![Page 62: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/62.jpg)
![Page 63: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/63.jpg)
…Some refactors / versions later
![Page 64: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/64.jpg)
Una clase no debe tener más que una razón para cambiar
Responsabilidad / Razón para cambiar
Responsabilidad / Role en la aplicación
Reusar una clase y su contextoSi tiene varias responsabilidades tiene un contexto muy complejo
Cohesión: Qué tan fuertemente relacionadas y enfocadas están las distintas responsabilidades de un módulo.
Acoplatmiento: El grado en el cual cada módulo de un programa depende de cada uno de los otros módulos
![Page 65: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/65.jpg)
Este ejemplo me gustó mucho cuando lo ví!!
Ejemplo: Tiempos Viejunos: Cuando estaban CGA, VGA, SuperVGA, etc…Ejemplo: Tiempos Viejunos: Al imprimir=> driver para una impresora específica
![Page 66: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/66.jpg)
Depend upon Abstractions. Do not depend upon concretion
![Page 67: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/67.jpg)
Compilation / Startup time dependency
from <package> import module
![Page 68: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/68.jpg)
Runtime dependency
self.collaborator.message()
![Page 69: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/69.jpg)
![Page 70: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/70.jpg)
Global State ProblemImplicit dependency problemConcrete API
![Page 71: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/71.jpg)
No dependency injectionImplicit dependency problem
Concrete API
![Page 72: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/72.jpg)
![Page 73: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/73.jpg)
![Page 74: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/74.jpg)
![Page 75: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/75.jpg)
![Page 76: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/76.jpg)
![Page 77: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/77.jpg)
![Page 78: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/78.jpg)
Duck Typing Approved!!!
![Page 79: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/79.jpg)
![Page 80: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/80.jpg)
Liskov Substitutionprinciple violation
![Page 81: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/81.jpg)
Python don't force type inheritanceFor API implementation
(So, for reuse code, prefer Composition)
En Python herencia- Herencia tipos (sólo se usaría para las excepciones y si usas instance_of)- Herencia Implementación (en muchos casos es facilmente sustituible por composicion (ademas es recomendable))
![Page 82: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/82.jpg)
Derived types must be completely substitutable for their base types
En Python herencia- Herencia tipos (sólo se usaría para las excepciones y si usas instance_of)- Herencia Implementación (en muchos casos es facilmente sustituible por composicion (ademas es recomendable))
![Page 83: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/83.jpg)
![Page 84: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/84.jpg)
It isn't so important
![Page 85: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/85.jpg)
A narrow interface is a better interface
![Page 86: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/86.jpg)
SOLID Motivational Posters, by Derick Baileyhttp://lostechies.com/derickbailey/2009/02/11/solid-development-principles-in-motivational-pictures/
![Page 87: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/87.jpg)
car_wash code examplehttps://github.com/aleasoluciones/car_wash
SOLID definition (at wikipedia)http://en.wikipedia.org/wiki/SOLID_(object-oriented_design)
Getting a SOLID start (Uncle Bob)http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod
Video SOLID Object Oriented Design (Sandi Metz)http://www.confreaks.com/videos/240-goruco2009-solid-object-oriented-design
![Page 88: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/88.jpg)
![Page 89: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/89.jpg)
![Page 90: S.O.L.I.D. Python - PyCon · de leer, de testear y mantener. Es decir, hace que el código sea menos flexible, más rígido, mucho más resistente al cambio. ¿Y qué es una responsabilidad?](https://reader035.fdocuments.in/reader035/viewer/2022071511/6130af571ecc51586944410f/html5/thumbnails/90.jpg)
Thanks !!!@eferro
@pasku1 @apa42
@nestorsalceda
DesksurfingsNos gusta hablar de estas cosas