This is an old revision of the document!
Este principio, propuesto originalmente por Bertrand Meyer en la década de 1980 (enlace), sostiene algo que puede parecer paradójico: una clase debe estar cerrada para modificaciones y abierta para extensiones.
Sin embargo, la aparente paradoja se aclara cuando el diseño de la clase prevé la posibilidad de extensiones y personalizaciones. Para ello, el diseñador puede utilizar recursos como la herencia, funciones de orden superior (o funciones lambda) y patrones de diseño, como Abstract Factory, Template Method y Strategy. Específicamente, en el próximo capítulo, abordaremos patrones de diseño que permiten personalizar una clase sin modificar su código.
En resumen, el Principio Abierto/Cerrado tiene como objetivo la construcción de clases flexibles y extensibles, capaces de adaptarse a diversos escenarios de uso sin modificaciones en su código fuente.
Ejemplo 1: Un ejemplo de una clase que sigue el Principio Abierto/Cerrado es la clase Collections de Java. Esta clase tiene un método estático para ordenar una lista en orden ascendente según sus elementos. A continuación se muestra un ejemplo de uso de este método:
List<String> nombres; nombres = Arrays.asList("juan", "maria", "alexandre", "ze"); Collections.sort(nombres); System.out.println(nombres); // resultado: ["alexandre","juan","maria","ze"]