sábado, 15 de octubre de 2011

El Principio Abierto-Cerrado (PAC)

Las entidades de software (clases, modulos, funciones, etc.) Deberian ser abiertas para permitir su extension, pero cerradas frente a la modificacio.

En palabras mas sencillas, deberias poder cambiar el entorno que rodea a un modulo sin cambiar el modulo en si. Considera por ejemplo la figura 1. Muestra una sencilla aplicacion que trata con objetos Empleado mediante una fachada de datos llamada EmpleadoDB. La fachada trata directamente con el API de la base de datos. Cualquier sistema que contenga la clase Empleado debera contener tambien el API de la base de datos LaBasededatos.

Las unidades de prueba son siempre situaciones controladas donde realizamos cambios en el entorno. Considera, por ejemplo que desearamos probar Empleado. Los objetos Empleado hacen cambios en la base de datos. En un entorno de prueba no queremos que cambie la base de datos real. Tampoco queremos crear base de datos de mentira(claro, si no se tiene el script para hacerlo) solo para crear unidades de prueba. En vez de ello, nos gustaria cambiar el entorno de forma que la prueba cazara todas las invocaciones que Empleado hiciera a la base de datos. Y verificara que todas esas llamadas se hacen correctamente.

Podemos hacerlo conviertiendo EmpleadoDB en una interfaz, como en la figura 1.2. Entonces podemos crear derivados que bien invocan el API real de la base de datos, o que soportan nuestras pruebas. La interfaz separa Empleado del API de la base de datos y nos permite cambiar el entorno de la base de datos que rodea a Empleado sin afectar a Empleado en lo absoluto.

Otro ejemplo, una caja de dialogo muy sencilla que muestre una lista de empleados. El usuario seleccionara el empleado de la lista y pulsara sobre el boton "Termina". Suponemos que si no se selecciona ningun empleado el boton "Termina" no estara habilitado. Por otra parte, si se seleccionamos un empleado de la lista el boton "Termina" estara habilitado. Cuando el usuario pulsa sobre del boton "Termina" el empleado terminado desaparece de la lista, no se muestra seleccionado ni uno de los empleados restantes y se desabilita el boton "Termina".



No hay comentarios:

Publicar un comentario