En el camp de l'enginyeria de programari, el principi de segregació d'interfícies (ISP) estableix que cap codi s'ha de forçar a dependre de mètodes que no utilitza. L'ISP divideix les interfícies molt grans en interfícies més petites i específiques, de manera que els clients només hagin de conèixer els mètodes que els interessen. Aquestes interfícies reduïdes també s'anomenen interfícies de rol. L'ISP té com a objectiu mantenir un sistema desacoblat i, per tant, més fàcil de refactoritzar, canviar i redistribuir. L'ISP és un dels cinc principis SOLID del disseny orientat a objectes, similar al principi d'alta cohesió de GRASP. Més enllà del disseny orientat a objectes, l'ISP també és un principi clau en el disseny de sistemes distribuïts en general i un dels sis principis IDEALS per al disseny de microserveis.

Importància en el disseny orientat a objectes Dins del disseny orientat a objectes, les interfícies proporcionen capes d'abstracció que simplifiquen el codi i creen una barrera que impedeix l'acoblament a les dependències. Un sistema pot arribar a estar tan acoblat a múltiples nivells que ja no sigui possible fer un canvi en un sol lloc sense necessitar molts canvis addicionals. L'ús d'una interfície o una classe abstracta pot evitar aquest efecte secundari.

Origen El proveïdor d'Internet (ISP) va ser utilitzat i formulat per primera vegada per Robert C. Martin mentre consultava Xerox. Xerox havia creat un nou sistema d'impressora que podia fer diverses tasques com ara grapar i enviar faxos. El programari d'aquest sistema es va crear des de zero. A mesura que el programari creixia, fer modificacions es va tornar cada cop més difícil, de manera que fins i tot el canvi més petit requeria un cicle de redestinació d'una hora, cosa que feia que el desenvolupament fos gairebé impossible.

El problema de disseny era que gairebé totes les tasques utilitzaven una sola classe Job. Sempre que calia realitzar una tasca d'impressió o de grapat, es feia una crida a la classe Job. Això donava lloc a una classe "gressa" amb multitud de mètodes específics per a una varietat de clients diferents. Gràcies a aquest disseny, una tasca de grapat coneixeria tots els mètodes de la tasca d'impressió, tot i que no tinguessin cap utilitat.

La solució suggerida per Martin utilitzava el que avui dia s'anomena Principi de Segregació d'Interfícies. Aplicat al programari Xerox, es va afegir una capa d'interfície entre la classe Job i els seus clients mitjançant el Principi d'Inversió de Dependències. En lloc de tenir una gran classe Job, es va crear una interfície Staple Job o una interfície Print Job que seria utilitzada per les classes Staple o Print, respectivament, cridant mètodes de la classe Job. Per tant, es va crear una interfície per a cada tipus de treball, que va ser implementada per la classe Job.

Violació típica Una violació típica del principi de segregació d'interfícies es troba a Agile Software Development: Principles, Patterns, and Practices a "Exemple de transacció de caixer automàtic" i en un article també escrit per Robert C. Martin específicament sobre el proveïdor de serveis d'Internet. Aquest exemple tracta la interfície d'usuari d'un caixer automàtic, que gestiona totes les sol·licituds com ara una sol·licitud de dipòsit o una sol·licitud de retirada, i com aquesta interfície s'ha de segregar en interfícies individuals i més específiques.

Referències

Categoria:Programari Categoria:Informàtica teòrica