• Aucun résultat trouvé

4.3 Validation

5.1.1 Présentation de l’existant

5.1.3 Discussion . . . . 61

5.2 Un modèle de composants abstrait avec connecteurs . . . 62

5.2.1 Présentation de l’approche . . . . 62

5.2.2 Modélisation des concepts . . . . 65

5.2.3 Support à l’exécution . . . . 69

5.2.4 Conclusion . . . . 71

5.3 Validation du modèle . . . 72

5.3.1 Spécialisation de HLCM pour CCM : HLCM/CCM . . . . 72

5.3.2 Mise en œuvre de l’exemple avec interaction par partage de mémoire

avec HLCM/CCM . . . . 73

5.3.3 Mise en œuvre de l’exemple avec interaction par appel de méthode avec

HLCM/CCM . . . . 74

5.3.4 Analyse . . . . 75

5.4 Conclusion . . . 76

Le chapitre 3 a présenté l’approche que nous proposons pour concevoir un modèle de

composants extensible par des fonctionnalités dédiées au calcul à haute performance. Cette

approche est caractérisée par la description des applications dans un modèle qui offre un

haut niveau d’abstraction et par une transformation vers un modèle plus proche du matériel

lorsque les ressources d’exécution sont connues. Un des besoins identifiés pour le modèle

de haut niveau est la possibilité d’y décrire les interactions entre composants de manière

abstraite de manière à pouvoir en proposer plusieurs mises en œuvres, chacune destinée à

des ressources d’exécution différentes.

Cette possibilité constitue le principal attrait des modèles de composants qui incluent le

concept de connecteur comme entité de première classe. Ce chapitre évalue donc la

possi-bilité d’ajouter ce concept à un modèle qui comporte l’ensemble des fonctionnalités décrites

dans les chapitres précédents. Il analyse notamment l’interaction entre les concepts de

connecteur et de hiérarchie.

Cette analyse montre que l’approche habituellement adoptée présente une lacune qui

dans certain cas empêche de concilier performances optimales et interchangeabilité des

mises en œuvres de composant. Une approche est proposée qui résout ce problème en

in-troduisant une nouvelle description l’interface des composants à l’aide du concept nouveau

de connexion ouverte dont le polymorphisme est supporté par le concept nouveau

d’adap-tateur de connexion. Le concept de port bundle est aussi introduit pour permettre une

meilleure mise en œuvre de certaines catégories de connexions.

56

Chapitre 5. Introduction du concept de connecteur dans les modèles de composants

hiérarchiques

La section 5.1 introduit des exemples synthétiques d’applications et les utilise pour

évaluer l’approche adoptée dans les modèles de composants existant pour supporter les

connecteurs. La section 5.2 présente notre approche qui s’appuie sur les concepts de

connexion ouverte, d’adaptateur de connexion et de bundles. Cette approche est utilisée

pour ajouter le support des connecteurs à un modèle de composants générique

hiérar-chique pour former le modèle appeléHigh Level Component Model (HLCM). Finalement la

section 5.3 s’appuie sur une spécialisation de HLCM (HLCM/CCM) pour évaluer l’approche

et la section 5.4 conclue brièvement.

5.1 Analyse préliminaire

Parmi les propriétés identifiés comme nécessaire au chapitre 3 figure la possibilité de

choisir la mise en œuvre des interactions entre composants en fonction des ressources

d’exécution sur lesquelles ils sont déployés. Le concept de connecteur en tant qu’entité de

première classe qui a été introduit dans certains modèles de composants vise notamment

à assurer cette propriété. Cette section évalue l’approche adoptée dans ces modèles pour

introduire le concept de connecteur et son applicabilité à un modèle qui comporte l’ensemble

des fonctionnalités décrites dans les chapitres précédents.

Dans un premier temps, les modèles de composants qui supportent le concept de

connec-teur comme entité de première classe sont présentés et l’approche qu’ils adoptent pour

l’in-troduire est analysée. Ensuite, des exemples synthétiques d’applications sont introduits et

sont décrits en s’appuyant sur des connecteurs introduits selon cette approche.

Finale-ment, l’approche est évaluée en s’attardant sur sa capacité à supporter l’interchangeabilité

des mises en œuvres de composant.

5.1.1 Présentation de l’existant

Un connecteur est un type destiné à supporter la spécification d’interactions entre les

composants. Ces interactions sont exprimés par des connexions qui sont des instances

de connecteur. Le concept de connecteur trouve son origine dans les langage de

descrip-tion d’architecture (Architecture Description Languages – ADL) mais il a été intégré au sein

de modèles de composants dans le modèle Sofa [11] ainsi que dans un modèle proposé

par Matougui et Beugnard [43]. Dans ces deux modèles, un connecteur est une entité de

première classe : de nouveaux connecteurs ainsi que de nouvelles mises en œuvres des

connecteurs existant peuvent être définis par l’utilisateur.

Sofa L’introduction du concept de connecteur dans Sofa est motivée par la volonté de

supporter la distribution indépendamment de l’intergiciel utilisé. Il s’agit notamment de

permettre d’utiliser diverses mises en œuvres d’un type spécifique d’interaction (l’appel de

méthode) sans nécessiter de modification des composants. Dans ce modèle, le concept que

nous appelons connecteurs est nomméconnector template et ce sont les instances de

con-nector templates(que nous appelons connexions) qui y sont appelées connecteurs. Chaque

connector templateet formée d’uneframequi constitue son interface et d’unearchitecturequi

forme sa mise en œuvre. Lesconnector template peuvent être paramétrés par des interfaces

objets et par des attributs.

Laframed’unconnector templateest formée d’un ensemble derôlesprovidesourequires

typés par une interface objet. Dans les instances de connector template, chaque rôle est

rempli par un port du même type mais de la classe complémentaire (un rôle provides et

rempli par un port requires et inversement). Quand l’interface qui type un rôle est un

paramètre duconnector template, le paramètre prend automatiquement la valeur apportée

par le port qui remplit lerôle.

Il existe deux sortes d’architectures de connector template. Les architectures

compo-sées(compound) sont constituées d’un assemblage à la manière des mises en œuvres

com-posites de composant. Dans cet assemblage, les ports qui remplissent lesrôlesdu

5.1. Analyse préliminaire 57

teur peuvent être utilisés pour remplir des rôles de connecteurs internes à l’assemblage.

Lesarchitectures simples sont constituées d’éléments primitifs, c’est à dire de code tel que

les souches (stubs) et les squelettes (skeletons) dans le cas d’un connecteur Corba.

Modèle de Matougui et Beugnard L’introduction du concept de connecteur dans le

mo-dèle proposé par Matougui et Beugnard répond à deux objectifs : permettre la description

d’interactions complexes et supporter la distribution de manière transparente. Ces deux

objectifs donnent lieu à deux abstractions distinctes : les composants de communication

pour décrire des interactions complexes et les connecteurs pour supporter la distribution.

Un composant de communication est en tous points similaire aux composants

clas-siques : il expose des méthodes qu’il fournit et d’autres qu’il requiert et peut être mis en

œuvre de la même manière que les autres composants. La seule différence avec un

com-posant classique réside dans sa sémantique : il ne décrit pas une partie d’une application

mais une interaction entre de telles parties.

Les connecteurs forment une abstraction légèrement différente : leur interface est

for-mée d’un ensemble de plugset leurs mises en œuvres —appelées générateurs— sont

spé-cifiées indépendamment du connecteur. Le concept deplugest similaires à celui de port à

la différence près que l’interface qu’il supporte n’est pas spécifiée et constitue un paramètre

générique du connecteur. Lesplugssont nommés et peuvent spécifier une multiplicité. Les

instances de connecteurs sont appelées connexions.

Les générateurs mettent en œuvre les connecteurs en générant du code. Cette opération

de génération peut s’appuyer sur le type des ports de composants connectés aux plugsde

la connexion mise en œuvre. Le code résultant de la génération est identifié sous le nom de

binding component.

Discussion Les deux modèles présentés adoptent des approches très similaires pour

l’in-troduction du concept de connecteur dans les modèles de composants. Les ports exposés

par les composants ne sont plus directement connectés mais interagissent en participant

à une même connexion. Les connexions sont des instances de connecteur (ou connector

template dans le cas de Sofa) qui possèdent un ensemble derôles(ouplugsdans le cas du

second modèle). Ce sont ces rôlesqui sont remplis par les ports des composants. Dans le

premier modèle, chaquerôlene peut être rempli que par un unique port alors que le second

modèle supporte une multiplicité associée à cesrôles.

Les connecteurs peuvent posséder plusieurs mises en œuvres et le type des ports qui

participent aux connexions constituent des arguments génériques qui peuvent être utilisés

dans ces mises en œuvres. Il existe deux manières de décrire ces mises en œuvres :

– elles peuvent être constituées d’un système de génération de code qui produit par

exemple les souches et les squelettes habituellement utilisés pour supporter l’appel de

méthode à distance ; ou

– il peut s’agir d’un assemblage à la manière des composites, bien que dans ce cas

le second modèle étudié parle de composant de communication et ne permette pas

d’utiliser le type des ports des composants connectés comme paramètres génériques

Il faut cependant noter que ces deux types de mises en œuvre s’appuient sur des interactions

de plus bas niveau et que l’interaction par appel local de méthode est nativement supporté

pour amorcer le processus.

Cette description des connecteurs est très similaires à celle des composants dans le

mo-dèle générique et hiérarchique que nous avons construit aux chapitres 3 et 4. Comme ces

composants, les connecteur acceptent des paramètres génériques qui peuvent notamment

être utilisés pour typer leurs points d’interaction. Comme ces composants, ils peuvent avoir

plusieurs mises en œuvres dont une sera choisie au déploiement. Comme pour ces

compo-sants, leurs mises en œuvres peuvent être formées par un assemblage ou être primitives.

Il existe cependant des différences qui justifient l’introduction d’un concept distinct. Les

valeurs des paramètres génériques d’un connecteur sont déduites des ports qui remplissent

ses rôles alors que ceux d’un composants doivent être explicitement spécifiés. Dans un