Articulo de referencia

Principio abierto-cerrado

El principio de abierto-cerrado fue introducido por Bertrand Meyer . En la programación orientada a objetos , el principio abierto-cerrado ( OCP ) establece que " las entidades ...

Retrato de Bertrand Meyer
El principio de abierto-cerrado fue introducido por Bertrand Meyer .

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 para su extensión, pero cerradas para su modificación "; [ 1 ] es decir, dicha entidad puede permitir que su comportamiento se extienda sin modificar su código fuente .

El principio de apertura-cierre se ha utilizado de dos maneras. Ambas emplean 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 abierto-cerrado es uno de los cinco principios SOLID del diseño orientado a objetos.

Principio abierto-cerrado de Meyer

Generalmente se le atribuye a Bertrand Meyer la creación del término principio abierto-cerrado , [ 2 ] que apareció en su libro de 1988, Construcción de software orientado a objetos . [ 1 ] : 23

  • Se considerará que un módulo es abierto si aún permite su extensión. Por ejemplo, debería ser posible añadir campos a las estructuras de datos que contiene o nuevos elementos al conjunto de funciones que realiza.
  • Se considerará que un módulo está cerrado si está disponible para su uso por otros módulos. Esto presupone que al módulo se le ha proporcionado una descripción estable y bien definida (la interfaz en el sentido de ocultación de información).

En la época en que Meyer escribía, agregar campos o funciones a una biblioteca inevitablemente requería cambios en cualquier programa que dependiera de esa biblioteca. La solución propuesta por Meyer a este problema se basaba en la noción de herencia orientada a objetos (específicamente herencia de implementación ): [ 1 ] : 229

Una clase es cerrada, ya que puede compilarse, almacenarse en una biblioteca, definirse como base y ser utilizada por clases cliente. Pero también es abierta, puesto que cualquier clase nueva puede usarla como clase padre, añadiendo nuevas funcionalidades. Al definir una clase descendiente, no es necesario modificar la original ni afectar a sus clientes.

Principio polimórfico de apertura-cierre

Durante la década de 1990, el principio de abierto-cerrado se redefinió popularmente para referirse al uso de interfaces abstractas , donde las implementaciones pueden cambiarse y se pueden crear múltiples implementaciones que se pueden sustituir polimórficamente entre sí.

A diferencia del uso que hace Meyer, esta definición aboga por la herencia a partir de clases base abstractas . Las especificaciones de interfaz pueden reutilizarse mediante herencia, pero no es necesario que lo hagan las implementaciones. La interfaz existente no admite modificaciones y las nuevas implementaciones deben, como mínimo, implementar dicha interfaz.

El artículo de Robert C. Martin de 1996, «El principio abierto-cerrado» [ 2 ], 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 llamado Variaciones Protegidas y con la discusión de David Parnas sobre la ocultación de información . [ 3 ]

Véase también

Referencias

  1. 1 2 3 Meyer, Bertrand (1988). Construcción de software orientado a objetos . Prentice Hall. ISBN 0-13-629049-3.
  2. 1 2 Robert C. Martin "El principio de abierto-cerrado", C++ Report , enero de 1996. Archivado el 22 de agosto de 2006 en Wayback Machine .
  3. 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 .
  • Los principios de OOD
  • El principio de abierto/cerrado: preocupaciones sobre el cambio en el diseño de software
  • El principio de abierto/cerrado y lo que se esconde tras él.