Principes S.O.L.I.D - Interface segregation principle (ISP)

1. Problème initial

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



L'inconvénient de ce genre de cas est que tous les clients, les classes, ont une visibilité sur tous les services rendus par l’interface :
  • 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.
Le principe de séparation des interfaces stipule que chaque client ne doit "voir" que les services qu'il utilise réellement :



2. Solution associée

Il existe deux techniques principales de mise en pratique de l'ISP :
  • L'héritage multiple,
  • Le Design Pattern "Adapter".

2.1. Séparation par l’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 :



2.2. 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 :