• Aucun résultat trouvé

historique, concepts et techniques

2.3 Concepts de la programmation par composants

2.3.1 Composant logiciel

Un composant logiciel est un élément architectural qui encapsule la partie métier de l’application. Il existe plusieurs définitions dans la littérature d’un composant mais la plupart sont intuitives car elles se concentrent sur les aspects généraux d’un compo-sant comme la définition donnée par Microsoft [68] :

« . . . a piece of compiled software, which is offering a service . . . »

D’autres détaillent la caractérisation d’un composant comme celle donnée par Sa-metingerdans [176] :

« Reusable software components are self-contained, clearly identifiable pieces that describe and/or perform specific functions, have clear interfaces, appropriate docu-mentation, and a defined reuse status. »

par D’Souza et Wills dans [84] :

« A coherent package of software artifacts that can be independently developed and delivered as a unit and that can be composed, unchanged, with other components to build something larger. »

par UML 1.3 specification (OMG 1999) dans [48] :

« A physical, replaceable part of a system that packages implementation and pro-vides the realization of a set of interfaces. A component represents a physical piece of implementation of a system, including software code (source, binary or execu-table) or equivalents such as scripts or command files.»

et la définition la plus utilisée est celle de Szyperski dans [186] :

« A software component is a unit of composition with contractually specified inter-faces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third party. »

La majorité des définitions d’un composant se rejoignent sur le fait qu’un compo-sant est une unité de calcul ou de stockage autonome, contenant du code applicatif ou métier afin de fournir un (des) service(s) bien déterminé(s) pouvant être appelé(s) depuis l’extérieur à l’aide d’interfaces. Il existe une séparation entre l’implémentation et l’appel d’un composant. Cette séparation permet de construire des applications par assemblage de composants qui peuvent être ainsi utilisés dans différents contextes. Cette définition d’un composant logiciel est dédiée aux modèles basés sur la compo-sition spatiale et reste valable aussi pour les autres modèles basés sur la compocompo-sition temporelle. Mais, un composant logiciel dans la composition temporelle est nommé une tâche. Cette dernière est une unité de travail logique dans un processus.

2.3.2 Interfaces

Une interface d’un composant est sa partie visible. Elle peut être définie comme son point d’accès c-à-d que cette dernière décrit les propriétés fonctionnelles ou les services du composant [43]. Un point d’accès est un élément d’architecture important qui four-nit les descriptions et les protocoles des opérations. Ces interfaces sont des éléments d’application représentées par des ports. Chaque interface est associée à un compo-sant unique c-à-d qu’une interface ne peut pas appartenir à plusieurs compocompo-sants à la fois. Le rôle de ces interfaces est l’acheminement des données et la définition de données échangées entre les composants à savoir que ces interfaces sont typées. C’est à travers ces interfaces que les composants vont être connectés. On peut donc avoir des interfaces d’entrée ou des interfaces de sortie. Les interfaces d’entrée sont utilisées pour obtenir des données. Les interfaces de sortie au contraire fournissent les données résultantes produites par l’exécution d’un composant. Les interfaces d’un composant sont particulièrement importantes pour la composition et la personnalisation des com-posants par les utilisateurs. Elles lui permettent de trouver des comcom-posants adaptés et comprendre leurs usages, fonctionnalités, utilisations et restrictions. Une interface d’un composant comprend :

— une partie de la signature décrivant les opérations fournies par un composant ; — une autre partie décrivant le comportement du composant.

2.3.3 Connecteurs

Certains modèles ont émergé pour donner une représentation explicites aux échanges des données entre les composants en proposant la notion de connecteurs. Un connecteur est un élément architectural au même niveau qu’un composant logi-ciel. Il modélise explicitement les interactions entre un ou plusieurs composants avec des règles qui les gouvernent [179]. Il agit comme médiateur et réalise une coordina-tion entre les composants. Il garantit un certain protocole ou mode de communicacoordina-tion. Un connecteur peut être implicite ou explicite. Une liaison réalisée par un connec-teur implicite n’est qu’une liaison directe entre les interfaces des composants comme dans [142]. D’autre part, une liaison réalisée par un connecteur explicite permet d’offrir un assemblage de composants pour construire une telle application. Dans la plupart des travaux comme [149,150], un connecteur comprend deux parties :

— la partie visible du connecteur qui correspond à son interface et qui permet la description des rôles des participants à une interaction ;

— la partie correspondante à la description de son implantation. Selon [147] un connecteur peut être :

— connecteur direct : fournit une connexion directe simplement en formant des acheminements entre les ports. Par exemple, il transmet des appels de méthode à partir d’un port à l’autre, sans fournir de services d’interaction supplémen-taires ;

— connecteur indirect : composition d’une ou plusieurs connexions en enrichis-sant les acheminements par une combinaison de données et de contrôle pour fournir des services d’interaction plus riches.

D’après ces deux catégories mentionnées ci-dessus, les connecteurs sont destinés à encapsuler les interactions ou les communications tandis que les composants sont destinés à encapsuler les calculs. En effet, ces deux catégories sont utilisées dans de nombreux modèles à base de composants avec deux type de variations [21,82] :

— connecteur endogène : gère les interactions entre un port client d’un composant avec un autre port serveur du même ou d’un autre composant. Il peut être direct ou indirect, dans les deux cas, le connecteur ne contient pas une méthode interne. Ce connecteur intervient seulement pour transmettre une donnée vers un port client d’un composant ;

— connecteur exogène : cette variation détermine que le connecteur est respon-sable du contrôle (le composant est responrespon-sable de calculs), et est nécessaire-ment un connecteur indirecte. Il relie plusieurs ports et établit une séquence de méthodes dans ces ports. Ces méthodes sont internes au niveau du connecteur (contrairement aux connecteurs endogènes, où les invocations de méthode de port sont externes).