Principio Abierto Cerrado (OCP)

La segunda letra del acrónimo S.O.L.I.D., representa al principio Abierto Cerrado. El cuál establece que "Las entidades de software (clases, módulos, funciones, etc.) deben estar abiertas para extensión pero cerradas para modificación". Esto básicamente significa que debemos ser capaces de cambiar el comportamiento externo o las dependencias externas de una clase, sin tener que cambiar físicamente la clase en sí misma. Este tipo de comportamiento nos habilita a cambiar una parte del código sin estar obligado a cambiar otras partes del mismo, siempre y cuando nos mantengamos dentro de los límites del contrato existente.
Suena fácil, pero muchos desarrolladores podemos perder el norte durante la implementación de este enfoque de extensibilidad. No se trata necesariamente por una cuestión de habilidades, sino más bien, que no se nos ha enseñado a abordar este principio en el diseño de clases.
Retomando el ejemplo de código visto anteriormente, podemos ver a la clase ProcesadorDeOrdenes (SRP) algo cambiada (veremos otros detalles de la implementación más adelante con el principio de inversión de dependencias).
Esta clase ya está preparada para el principio Abierto cerrado. Como se puede ver en la imagen anterior, ahora la clase ProcesadorDeOrdenes implementa la interfaz IProcesadorDeOrdenes. Ahora podemos crear otra implementación con el mismo contrato.
Con la clase ProcesadorDeOrdenesDecorado (que implementa la interfaz IProcesadorDeOrdenes) somos capaces de agregarle funcionalidad a la clase original sin modificar el código de la clase ProcesadorDeOrdenes.

4 comentarios:

Carlos Ble dijo...

Hola Juan,
Es un poco raro que una clase que implementa una interfaz, se le inyecte un colaborador que tambien implementa la misma interfaz.
Por otra parte, la I mayuscula de la interfaz no es muy legible.
Te recomiendo el libro Clean Code, te encantara :-)

Felicitaciones por el esfuerzo de escribir sobre SOLID

Juan Barrionuevo dijo...

Muchas gracias Carlos por leer el post y comentarlo.

Es cierto lo que comentas al respecto de la rareza del ejemplo, pero de todos los que se me ocurrieron y todos los que encontré en la web, me pareció el más fácil de desarrollar en poco texto y así demostrar cómo una clase puede ser extendida desde otra sin modificar su código.

John Wayne dijo...

a mi me gusto el ejemplo, de raro nada!! funciona y de lo lindo! gracias!

Juan Barrionuevo dijo...

Muchas gracias John por leer el post y comentarlo.

Me alegra que te haya gustado y servido el ejemplo.

Publicar un comentario

Muchas gracias por leer el post y comentarlo.

 
Copyright 2009 Programación SOLIDa
BloggerTheme by BloggerThemes | Design by 9thsphere