Principio de segregación de interfaces (ISP)

La cuarta letra del acrónimo S.O.L.I.D., representa al Principio de segregación de interfaces (ISP) y afirma que "Los clientes no deben ser forzados a depender de interfaces que no utilizan". Esto significa que cuando un objeto tiene diferentes usos (no confundir con distintas responsabilidades) debe haber entonces una interfaz específica por cada uno de esos usos.
Esto se torna repetitivo, pero esto es para minimizar el impacto de los cambios que puedan haber sobre nuestro código.
En otras palabras: si tenemos una clase abstracta o una interfaz, entonces, quienes la implementen, no deben ser forzados a implementar partes (métodos o propiedades) que no les importen.

Consideremos un tienda web en la cual los clientes pueden agregar o quitar items de su carrito de compras y, por supuesto, consultar los items que actualmente contiene. Luego, ellos van a cerrar su pedido y allí se les pide que completen sus datos personales. Como paso final, se hace una revisión completa de los items pedidos y los datos personales ingresados para ahí enviar la orden de pedido.
Aquí hay tres diferentes usos de la orden. Cada paso (Carrito, Caja y Proceso) no necesita o no debe tener toda la información que la orden puede proveer.
Ahora, hemos creado interfaces específicas para los pasos específicos en el proceso de la orden. La clase Orden aun se ve como la habíamos codificado, pero los distintos clientes tienen una visión completamente diferente de ella. Esto nos permite también, crear diferentes objetos, uno para cada paso implementando sólo la interfaz necesaria.
Un ejemplo más conocido es el ejemplo de transacciones de un cajero automático dado en Desarrollo de Software Ágil: principios, patrones y prácticas y también en un artículo escrito por Robert C. Martin específicamente acerca del ISP. En este ejemplo se trata de una interfaz para la interfaz de usuario de un cajero automático, que se encarga de todas las solicitudes tanto una solicitud de depósito, o una solicitud de retiro, y cómo esta interfaz tiene que ser segregada en interfaces individuales y específicas.

0 comentarios:

Publicar un comentario

Muchas gracias por leer el post y comentarlo.

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