Inversion de contrôle
Un article de Wikipédia, l'encyclopédie libre.
Cet article est une ébauche à compléter concernant l'informatique, vous pouvez partager vos connaissances en le modifiant. |
L'inversion de contrôle (Inversion of Control, IOC) est un motif de conception. Il fonctionne sur un principe qui renverse les dépendances entre objets en injectant le code dont un objet a besoin dans les objets qu'il utilise.
Le terme d'inversion de contrôle est encore assez mal défini, on lui préfère les termes d'injection de dépendance (dependency injection) ou de principe d'inversion des dépendances (dependency inversion principle).
L'inversion de contrôle est aussi appelée principe d'Hollywood, car elle fait référence à la phrase célèbre "Ne nous appelez pas, c'est nous qui vous appellerons".
[modifier] Principe
En programmation objet, une classe A dépend d'une classe B si au moins une des conditions suivantes est vérifiée :
- A possède un attribut de type B (dépendance par composition) ;
- A est de type B (dépendance par héritage) ;
- A dépend d'une autre classe C qui dépend elle-même de B (dépendance par transitivité) ;
- une méthode de A utilise une méthode de B.
Si A dépend de B, cela implique que pour créer A, on ait besoin de B ce qui, en pratique, n'est pas toujours le cas.
Pour supprimer la dépendance, un moyen possible consiste à
- créer une interface I qui contiendra toutes les méthodes que A peut appeler sur B,
- indiquer que B implémente l'interface I,
- remplacer toutes les références à la classe B par des références à l'interface I dans la classe A.
Un problème qui se pose est de disposer dans A d'un objet implantant I alors que l'on ne sait pas comment l'instancier. La solution consiste à créer, par exemple, un objet b de la classe B et de l'injecter dans un objet de la classe A. L'injection proprement dite peut se faire
- par le constructeur : on passe l'objet b au constructeur de la classe A
- par modificateur : on passe l'objet b à une méthode de la classe A qui va par exemple modifier un attribut (setter)
[modifier] Utilisation
Ces techniques sont très utilisées pour les applications bâties sur des serveurs d'applications.