• Aucun résultat trouvé

Critères de classification des systèmes réflexifs

CHAPITRE II: OUTILS DE CONCEPTION :

I) ADAPTABILITÉ

4. Critères de classification des systèmes réflexifs

Les architectures réflexives existantes sont souvent différentes les unes des autres et difficilement identifiables. Dans cette partie, nous essayons d'établir quelques critères de classification des systèmes réflexifs.

4.1 Réflexivité à la compilation / au chargement / à l'exécution:

Le moment de la mise en place de la structure du méta-niveau et son imbrication avec le

niveau de base définissent ce qu'on appelle le temps de la réflexivité. Selon les systèmes, elle peut avoir lieu à la compilation, au chargement ou à l'exécution. Le ratio flexibilité/efficacité est à chaque fois différent [42].

A la compilation: Dans ce type de système, les liens entre le niveau de base et le

méta-niveau sont effectués lors de la compilation. Ainsi la compilation du niveau de base est effectué (ou réglementée) par son programme de méta-niveau (voir Fig 2.2).

Ce type de système préserve l'efficacité de l'exécution de l'application. La principale surcharge de travail se produit à la compilation, car la structure réflexive n'est présente qu'à cette étape. Par contre, la flexibilité est relativement réduite, aucune modification n'étant possible à l'exécution. Les entités dynamiques (par exemple les objets, qui n'ont une existence qu'à l'exécution) ne peuvent que difficilement être pris en compte de façon individuelle par un tel système.

Au chargement: La réflexivité s'effectue cette fois au moment du chargement et

de l'édition de liens, juste avant l'exécution du programme (voir Fig.2.3).

Cette solution offre un compromis entre l'efficacité d'exécution et le niveau de flexibilité offert. Le surcoût induit l'est uniquement au moment du démarrage de l'application ou du chargement d'une nouvelle classe.

A l'exécution: Cette fois, l'architecture réflexive est présente à l'exécution (voir

Fig 2.4). L'exécution d'un programme du niveau de base est adaptée en accord avec le programme de méta-niveau associé. Une architecture de ce type présente un niveau de flexibilité important. Le comportement d'un programme est paramétrable directement à l'exécution. On peut ainsi adapter le comportement d'un objet dynamiquement en lui associant un méta-objet adéquat, en lui retirant son méta-objet ou en le remplaçant, ce qui ne serait pas possible à la compilation ou au chargement.

Fig.2.3- Réflexivité au chargement [42]

4.2 Réflexivité explicite / implicite:

Une architecture réflexive est dite de type explicite si le protocole à méta-objets chargé de la

communication entre le niveau de base et le méta-niveau est visible à partir du niveau de base. Si celui-ci est invisible au niveau de base, l'architecture réflexive est dite de type implicite [42].

Réflexivité explicite: Dans une architecture réflexive de type explicite, les objets

de base contrôlent directement leur propre comportement en ordonnant des changements dans leur méta-niveau. Un objet de base peut par exemple demander l'instanciation d'un nouveau répliqua au méta-niveau, sa migration vers un lieu donné ou encore sa mutation en objet persistant.

Réflexivité implicite: Au contraire, dans une architecture réflexive de type

implicite, le protocole à méta-objets mettant en évidence les interactions entre les deux niveaux de la structure réfleive, est conçu pour être totalement transparent pour les objets du niveau de base. La prise de contrôle du comportement d'un objet de base par un méta-objet s'effectue le plus souvent par des mécanismes d'interception de messages. Du fait de la transparence du protocole à méta-objets, la sémantique d'un objet de base peut être modifiée au méta-niveau sans changer une seule ligne de code du niveau de base.

4.3 Réflexivité structurelle / comportementale

Réflexivité structurelle: Ce type de réflexivité touche aux aspects les plus

statiques [40]. Il réifie les aspects structuraux du programme, comme les graphes d'héritage et de composition, ou encore les types de données (voir Fig. 2.5). Un système de ce type permet donc de modifier la structure interne d'un objet. Cela oblige à maintenir une description complète du niveau de base d'un programme pouvant donc se traduire par un surcoût important.

De plus, les processus de réification peuvent être parfois assez compliqués à manipuler. C'est pourquoi cette technique est relativement peu employée dans les systèmes d'exploitation, mais est assez largement répandue dans les langages extensibles (langages dont la sémantique et la syntaxe peuvent être étendues) [42].

Réflexivité comportementale concerne tout ce qui touche aux aspects les plus

dynamiques, liés à l’état d’exécution et à la façon d’exécuter les programmes [40]. Elle réifie les aspects de calcul et de comportement d'une application (voir Fig . 2.6). Un système de ce type va par exemple proposer deux implémentations alternatives d'un seul et même module [42].

Ce type de réflexivité est utilisé principalement dans les systèmes d'exploitation et les systèmes de communication, pour par exemple changer les politiques de gestion de mémoire, de synchronisation, ajouter des instructions de monitoring, changer de protocole de communication, changer de comportement etc.

Systèmes mixtes: Dans un certain nombre de systèmes récents, le type de

réflexivité offert est mixte (à la fois structurel et comportemental). Blair, propose une architecture réflexive pour les middleware de demain offrant les deux types de réflexivité. Dans cette architecture, chaque objet est associé à un méta-espace (voir Fig.2.7). Chaque méta-espace est divisé en trois parties, composition, encapsulation et environnement. Les parties composition et encapsulation fournissent des interfaces d'accès à des représentations des constituants d'un objet, de leur graphe d'héritage et de leurs méthodes et attributs. Elles autorisent ainsi une réflexivité structurelle. La partie environnement permet de contrôler tous les aspects de bas niveau de l'application, comme la gestion de l'envoi et la réception de messages, la synchronisation de processus, etc... La réflexivité est cette fois de type comportemental [42].

Documents relatifs