Principio abierto-cerrado

En la programación orientada a objetos, el principio abierto-cerrado (OCP) establece que "las entidades de software (clases, módulos, funciones, etc.) deben estar abiertas a la extensión, pero cerradas a la modificación"; es decir, una entidad de este tipo puede permitir que su comportamiento se extienda sin modificar su código fuente.
El nombre de principio abierto-cerrado se ha utilizado de dos maneras. Ambas utilizan generalizaciones (por ejemplo, herencia o funciones delegadas) para resolver el aparente dilema, pero los objetivos, las técnicas y los resultados son diferentes.
El principio de apertura y cierre es uno de los cinco principios SOLID del diseño orientado a objetos.
El principio abierto de Meyer
A Bertrand Meyer se le atribuye generalmente la creación del término principio abierto-cerrado, que apareció en su libro de 1988 Object-Oriented Software Construction.
- Se dice que un módulo estará abierto si todavía está disponible para la extensión. Por ejemplo, debe ser posible añadir campos a las estructuras de datos que contiene, o nuevos elementos al conjunto de funciones que realiza.
- Se dice que se cerrará un módulo si [lo] está disponible para su uso por otros módulos. Esto supone que el módulo ha recibido una descripción bien definida y estable (la interfaz en el sentido de la información oculta).
En la época en que Meyer escribía, agregar campos o funciones a una biblioteca inevitablemente requería cambios en todos los programas que dependían de esa biblioteca. La solución propuesta por Meyer para este problema se basaba en la noción de herencia orientada a objetos (específicamente, herencia de implementación):
Una clase está cerrada, ya que puede ser compilada, almacenada en una biblioteca, basada y utilizada por clases cliente. Pero también está abierto, ya que cualquier nueva clase puede utilizarla como padre, añadiendo nuevas características. Cuando se define una clase descendente, no hay necesidad de cambiar el original o de perturbar a sus clientes.
Principio abierto polimorfo
Durante la década de 1990, el principio abierto-cerrado se redefinió popularmente para referirse al uso de interfaces abstractas, donde las implementaciones se pueden cambiar y se pueden crear múltiples implementaciones y sustituirlas polimórficamente entre sí.
A diferencia del uso que hace Meyer, esta definición aboga por la herencia de las clases base abstractas. Las especificaciones de interfaz se pueden reutilizar mediante herencia, pero no es necesario que lo hagan las implementaciones. La interfaz existente está cerrada a modificaciones y las nuevas implementaciones deben, como mínimo, implementar esa interfaz.
El artículo de 1996 de Robert C. Martin titulado "El principio abierto-cerrado" fue uno de los escritos fundamentales que adoptaron este enfoque. En 2001, Craig Larman relacionó el principio abierto-cerrado con el patrón de Alistair Cockburn denominado "Variaciones protegidas", y con el análisis de David Parnas sobre el "ocultamiento de información".
Véase también
- SOLID – el "O" en "SOLID" representa el principio cerrado
- Principio de robo
Referencias
- ^ a b c Meyer, Bertrand (1988). Construcción de software orientado a objetos. Prentice Hall. ISBN 0-13-629049-3.
- ^ a b Robert C. Martin "The Open-Closed Principle", C++ Report, enero de 1996 Archivado el 22 de agosto de 2006, en el Wayback Machine
- ^ Larman, Craig (mayo–junio de 2001). "Variación protegida: la importancia de estar cerrado" (PDF). IEEE Software. 18 2). IEEE: 89–91. doi:10.1109/52.922731.
Enlaces externos
- The Principles of OOD
- El Principio Abierto/Cerrado: Preocupaciones por el cambio en el diseño de software
- El Principio cerrado y lo que esconde detrás de él