presentación open closed principle
TRANSCRIPT
![Page 1: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/1.jpg)
Principio Abierto-Cerrado
Samuel Martín Gómez-Calcerrada
AUTENTIA.COM
Madrid, 04 de Agosto de 2014
![Page 2: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/2.jpg)
Bertrand Meyer es el responsable de acuñar el término open/closed principle en su libro “Object Oriented Software Construction” - 1988
Martin Fowler ha sido el responsable de popularizarlo junto con el resto de principios S.O.L.I.D (first five principles) en “Refactoring: Improving the Design of Existing Code” - 1999
Principio Abierto-Cerrado(Open-Closed-Principle)
![Page 3: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/3.jpg)
Acrónimo introducido por Michael Feathers
S: Single Responsibility Principle (SRP) - Principio de responsabilidad únicaO: Open-Closed Principle (OCP) - Principio Abierto CerradoL: Liskov Substitution Principle(LSP) - Principio de sustitución de LiskovI: Interface Segregation Principle(ISP) - Principio de segregación de la interfazD: Dependency Inversion Principle(DIP) - Principio de Inversión de la dependencia
S.O.L.I.D - ¿Cuáles son?
![Page 4: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/4.jpg)
Principio Abierto-Cerrado (Open-Closed-Principle)
Definición:Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.
Principio Abierto-Cerrado(Open-Closed-Principle)
![Page 5: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/5.jpg)
En un mal diseño, cuando se modifica una funcionalidad durante el ciclo de vida, suele conllevar una cadena de cambios en módulos dependientes unos de otros.
Fuente: http://appraisaltodayblog.files.wordpress.com/2013/01/stress-hitting-head-on-keyboard.jpg?w=400&h=267
OCP - Introducción
![Page 6: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/6.jpg)
Para evitar esto, debemos usar el principio OC.
Las clases deben ser capaces de extenderse sin modificar su contenido.
OCP - Introducción
![Page 7: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/7.jpg)
¿Cómo se consigue esto?
La forma más común es a través de interfaces o clases abstractas de las que depende una implementación concreta.
Cuando cambie la funcionalidad la interfaz se mantiene y sólo cambia la implementación.
OCP - Introducción
![Page 8: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/8.jpg)
Nuestra empresa se ha dedicado desde sus inicios a vender agua embotellada
Ahora se plantea vender botellas de NesTea
Fuente: http://2.bp.blogspot.com/_DIPF2NH_r-w/TEzHMqABkhI/AAAAAAAAAlc/qRzfe7-mTuE/s1600/water_bottles_caps.jpg
Ejemplo - Mal diseño
![Page 9: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/9.jpg)
OCP Mal diseño - Original
![Page 10: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/10.jpg)
OCP Mal diseño - Añadiendo funcionalidad
![Page 11: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/11.jpg)
OCP Buen diseño - Uso de herencia
![Page 12: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/12.jpg)
En caso de estar ante una modificación demasiado drástica normalmente tendremos que modificar la interfaz o agregar otra, como en el caso de que la empresa empiece a comercializar latas de aluminio.
Pero esto deben ser casos excepcionales.
Fuente: http://s01.s3c.es/imag/_v0/640x419/6/8/0/latas.jpg
OCP - Caso extremo
![Page 13: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/13.jpg)
Seguir este principio ayudará a que nuestros sistemas sean más mantenibles en el tiempo y soporten mejor los cambios.
Seguir este principio demasiado a rajatabla puede ser perjudicial para el proyecto, ya que el abuso de interfaces reducirá la productividad y la legibilidad. Debemos usar el sentido común en base a nuestro conocimiento del proyecto.
OCP - Conclusiones
![Page 14: Presentación open closed principle](https://reader033.vdocument.in/reader033/viewer/2022052400/55a034c41a28ab3a478b4602/html5/thumbnails/14.jpg)
Fuente:
http://blog.themsls.org/wp-content/uploads/2014/04/Shutterstock_Questions_Image.jpg
¿Preguntas?