principio abierto/cerrado

Concepto del principio de abierto/cerrado

El principio de abierto/cerrado es el correspondiente a la letra O principios SOLID. El concepto básico es que un software debe estar abierto para la extensión y cerrado para la modificación. Este concepto se aplica tanto al software en general como a los microservicios, clases, casos de uso y todo aquello que interviene en el desarrollo.

Para conseguir que este concepto se aplique hay que evitar las implementaciones específicas, utilizando clases abstractas e interfaces. Realizando esto podremos añadir casos de uso a la aplicación de forma rápida y sencilla.

En el caso de una tienda que muestre el cálculo de un pedido y que tuviera diferentes cálculos de precio dependiendo de la tipologia del producto (consumible, servicio, suscripcion…) deberíamos evitar realizar una clase de cálculo en la que existiran varios «ifs» o un «switch/case». Para seguir el concepto de abierto/cerrado se tendría que crear un interface (o clase abstracta) que tuviera un método llamado «calcular» y para cada tipo de producto una clase que implemente ese método.

De esta forma, cualquier modificación del cálculo del precio se realizaría en la clase específica de cada tipología, pero no se tocaría el cálculo del pedido (cerrado para modificación). Además, el añadir un nuevo tipo es tan sencillo como añadir una clase que implemente el interface (abierto para la extensión).

En java tenemos dos estructuras para hacerlo: interface y clase abstracta. Aunque en la base es lo mismo (la clase abstracta se creó como solución a no poder realizar métodos en un interface), podemos ver que beneficios tiene cada una de ellas para decidir cual usar:

  • Interface: No modifica la jerarquía y permite implementar multiples de ellas en una sola clase. Se usan para desacoplar entre capas.
  • Calse abstracta: Permite crear getters privados y crear el patron template method que nos ayuda a crear plantillas de un método, delegando partes de la plantilla a las clases hijas.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí