Inversion de contrôle
Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

L'inversion de contrôle (Inversion of Control, IOC) est un patron d'architecture commun à tous les frameworks (ou cadre de développement et d'exécution). Il fonctionne selon le principe que le flot d'exécution d'un logiciel n'est plus sous le contrôle (Le mot contrôle peut avoir plusieurs sens. Il peut être employé comme synonyme d'examen, de vérification et de maîtrise.) direct de l'application elle même mais du framework (Un framework est un espace de travail modulaire. C'est un ensemble de bibliothèques et de conventions permettant le développement rapide d'applications. Il fournit suffisamment de briques logicielles et impose suffisamment...) ou de la couche logicielle sous-jacente.

L'inversion de contrôle (L'inversion de contrôle (Inversion of Control, IOC) est un patron d'architecture commun à tous les frameworks (ou cadre de développement et d'exécution). Il fonctionne selon le principe...) est un terme générique. Selon la problématique, il existe différentes formes, ou représentation d'IoC. Le plus connu étant l'inversion des dépendances (dependency inversion principle) qui est un patron de conception permettant, en programmation orientée objet (La programmation par objet (du terme anglo-saxon Object-Oriented Programming ou OOP), est un paradigme de programmation, il consiste en la définition et l'assemblage de briques logicielles appelées objets ; un objet représente un...), de découpler les dépendances entre objets.

Principe de l'inversion de contrôle

Avec l'IoC, le framework ([cadriciel]) prend en charge (La charge utile (payload en anglais ; la charge payante) représente ce qui est effectivement transporté par un moyen de transport donné, et qui donne lieu à un paiement ou un...) l'exécution principale du programme ; il coordonne et contrôle l'activité (Le terme d'activité peut désigner une profession.) de l'application. Le programme utilisateur définit alors les blocs de codes en utilisant l'API fournie à cet effet par le framework, sans relation dure entre eux. Ces blocs de codes sont laissés à la discrétion du framework qui se chargera de les appeler.

L'IoC est illustré par le principe d'Hollywood : "Ne nous appelez pas, c'est nous qui vous appellerons". Selon ce principe, l'inversion de contrôle a lieu entre le framework (ou la couche logicielle sous-jacente) et l'application. Ce n'est plus l'application qui gère les appels au framework, mais ce dernier à l'application.

Exemple :

Soit une application qui demande des informations sur l'utilisateur. Selon l'approche classique, le corps du programme pose non seulement les briques d'interaction (Une interaction est un échange d'information, d'affects ou d'énergie entre deux agents au sein d'un système. C'est une action réciproque qui suppose l'entrée en contact...) Homme-Machine (IHM) mais contrôle aussi la séquence d'exécution de celles-ci.

Exemple en pseudo langage :
print 'Votre nom :'
read nom
traite nom
print 'Votre âge :'
read age
traite age
...

Avec l'IoC, le framework s'assure du contrôle du flot d'exécution souvent sous la forme d'une fonction principale. Le corps principal du programme prend alors en charge seulement le traitement et, dans une moindre mesure, les briques IHM.

Exemple en pseudo langage :
framework <- init
q1 <- question 'Votre nom :'
attache_traitement q1, mon code
q2 <- question 'Votre âge :'
attache_traitement q2, mon_autre_code
boucle_principale framework

Ici, le framework d'abord est initialisé, puis les composants qui font l'IHM du programme sont ensuite créés. À ces composants sont attachés un traitement à exécuter par le framework lorsque ceux-ci sont devenus actifs par action de l'utilisateur. Puis, pour finir, le contrôle de l'application est passé (Le passé est d'abord un concept lié au temps : il est constitué de l'ensemble des configurations successives du monde et s'oppose au futur sur...) au framework .

Principe de l'injection (Le mot injection peut avoir plusieurs significations :) de dépendance

Le principe est de découpler les liens de dépendances entre objets. En programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel (voire de matériel, cf. VHDL).) objet (De manière générale, le mot objet (du latin objectum, 1361) désigne une entité définie dans un espace à trois dimensions, qui a une fonction précise, et qui peut...), les objets de type A dépendent d'un objet de type 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'un autre objet de type C qui dépend d'un objet de type B (dépendance par transitivité) ;
  • une méthode de A appelle une méthode de B.

Si A dépend de B, cela implique que pour créer A, on ait besoin (Les besoins se situent au niveau de l'interaction entre l'individu et l'environnement. Il est souvent fait un classement des besoins humains en trois grandes catégories : les besoins primaires, les...) 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 (Une interface est une zone, réelle ou virtuelle qui sépare deux éléments. L’interface désigne ainsi ce que chaque élément a besoin de connaître de...) 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 au type B par des références à l'interface I dans A.

Un problème qui se pose est de disposer dans A d'un objet implémentant I alors que l'on ne sait pas comment l'instancier. La solution consiste à créer, par exemple, un objet b de type B et de l'injecter dans un objet de type A. L'injection proprement dite peut se faire

  • à l'instanciation : on passe l'objet b à l'instanciation de A
  • par modificateur : on passe l'objet b à une méthode de A qui va par exemple modifier un attribut (setter)

Utilisation

Ces techniques sont très utilisées pour les applications bâties sur des serveurs d'applications.

Page générée en 0.045 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique