Skip to content

Principio de Abierto Cerrado

El Principio de Abierto/Cerrado o Open Close Principle (OCP), es una directriz clave en el desarrollo de software que busca la eficiencia y adaptabilidad en el dise帽o de clases y m贸dulos. Este principio sostiene que el software debe estar dise帽ado de tal manera que se pueda expandir su funcionalidad sin necesidad de modificar el c贸digo existente. Esta caracter铆stica es esencial no solo en clases y objetos individuales, sino tambi茅n en servicios m谩s amplios, microservicios y estructuras de casos de uso complejas.

En la pr谩ctica, el principio se implementa asegurando que las clases y m贸dulos dependan de abstracciones (interfaces o clases abstractas) y no de implementaciones concretas. Por ejemplo, si consideramos diferentes tipos de empleados en una organizaci贸n, como desarrolladores, personal de marketing y contables, y necesitamos calcular sus salarios, una aproximaci贸n que no cumple con este principio ser铆a implementar un m茅todo espec铆fico para cada tipo de empleado. Sin embargo, esto resulta problem谩tico y poco eficiente, ya que cualquier cambio en la l贸gica del c谩lculo de salarios implicar铆a modificar todas las implementaciones.

La soluci贸n que propone el Principio de Abierto/Cerrado es definir una interfaz o clase abstracta, por ejemplo, Salary. Las diferentes implementaciones, como SalaryOfDev, SalaryOfMark y SalaryOfCont, extender铆an o implementar铆an esta interfaz, a帽adiendo su propia l贸gica espec铆fica para calcular el salario. Esta forma de estructurar el c贸digo significa que cualquier nuevo tipo de empleado solo requerir铆a una nueva implementaci贸n de Salary, sin necesidad de alterar la l贸gica existente en otras partes del sistema.

Adem谩s, es crucial que los casos de uso se acoplen solo a interfaces y no a implementaciones espec铆ficas. Esto se logra mediante la inyecci贸n de dependencias, donde, por ejemplo, se inyectar铆a la interfaz Salary en lugar de una implementaci贸n concreta (clase con m茅todos desarrollados). Esta pr谩ctica asegura que el sistema se mantiene flexible y abierto a la extensi贸n, pero cerrado a cambios en sus componentes ya existentes.

Finalmente, es recomendable preferir la composici贸n de clases y la inyecci贸n de dependencias sobre el uso de clases abstractas, excepto en situaciones donde las funcionalidades espec铆ficas y concretas de un modelo de dominio lo requieran. Esta preferencia se alinea con la programaci贸n orientada a eventos de dominio, como en CQRS (Command Query Responsibility Segregation), donde los eventos desencadenan acciones espec铆ficas. Por ejemplo, en un sistema donde el registro de un usuario es un evento, este podr铆a desencadenar acciones como enviar un email de bienvenida o actualizar un contador de usuarios, cada una manejada por diferentes servicios. Este enfoque refuerza el principio al mantener el c贸digo separado y enfocado en responsabilidades 煤nicas, mejorando as铆 la mantenibilidad y escalabilidad del software.

Ejemplo sencillo

/** Example whitout OCP principle*/
class SalaryCalculator
{
public function calculateSalary($employeeType, $baseSalary) {
switch ($employeeType) {
case 'Developer':
return $baseSalary * 1.2;
case 'Marketing':
return $baseSalary * 1.1;
case 'Accounting':
return $baseSalary * 1.3;
}
}
}

Cada vez que se a帽ada un nuevo tipo de empleado, se debe la clase SalaryCalculator.

Para finalizar


Principios SOLID: Principio de Abierto/Cerrado OCP

El principio de abierto/cerrado, donde las entidades como clases deben estar cerradas para modificaci贸n pero abiertas para extensi贸n.

#Video tutorial#hdeleon#SOLID