Principe de ségrégation des interfaces

Les clients ne doivent pas être forcés de dépendre d'interfaces qu'ils n'utilisent pas.
Interface Segregation Principle - ISP

Pollution d'interface par aggrégation de services

On retrouve dans la plupart des designs quelques classes qui rendent plusieurs services simultanément, comme l'illustre le schéma ci-dessous :

L'inconvénient de ce genre de cas est que tous les clients ont une visibilité sur tous les services rendus par la classe :

  • Chaque client voit une interface trop riche dont une partie ne l'intéresse pas,
  • Chaque client peut être impacté par des changements d'une interface qu'il n'utilise pas.

Solution : séparation des services de l'interface

Le principe de séparation des interfaces stipule que chaque client ne doit "voir" que les services qu'il utilise réellement :

Techniques de séparation

Il existe deux techniques principales de mise en pratique de l'ISP :

  • L'héritage multiple,
  • Le Design Pattern "Adapter".

Séparation par héritage multiple

Dans cette approche chaque service est représenté par une classe d'interface dont dérive la classe qui implémente les services. Les clients ne voient les services qu'au travers de ces classes d'interface comme le montre le schéma suivant :

Séparation par Adapter

Lorsque l'héritage multiple n'est pas possible, les services peuvent être représentés par des classes d'adaptation :

_____
Article original : http://www.objectmentor.com/publications/isp.pdf
Voir également InterfaceSegregationPrinciple sur Wiki.