I- CONTEXTE DE TRAVAIL
I.1. Présentation de l'équipe d'accueil
et de ses activités
L'équipe G.R.I.M.M. (Groupe de Recherche en Informatique et Mathématiques du Mirail) est localisée
au Département de Mathématiques-Informatique de l'Université du Mirail.
Mr Jean-Marc COUVEIGNES
dirige cette unité de recherche
qui regroupe enseignants et chercheurs.
Les deux thèmes principaux de recherche sont :
- Thème 1 :
Algorithmique des courbes et des corps de nombres et applications
(P.CARBONNE, J-M COUVEIGNES, T.HENOCQ).
Deux domaines étudiés :
- L'algorithmique des corps finis et des courbes algébriques sur ces corps ainsi
que ses applications au codage et à la cryptographie.
- La géométrie effective des courbes sur les corps globaux.
- Thème 2 :
Hyperdocuments I.H.M. et systèmes distribués.
Deux domaines étudiés
- Hyperdocuments vs Interaction Homme-Machine : Concepts, Méthodes et Outils
(Françoise ADREIT, Catherine COMPAROT-POUSSIER).
- La représentation spatio-temporelle d'un système distribué
(Françoise ADREIT, Sophie EBERSOLD-MARCAILLOU, Jean-Christophe SAKDAVONG)
I.2 Présentation du contexte de travail
Avec le développement et l'utilisation de plus en plus importante
d'outils de construction de systèmes distribués
(tels que ceux basés sur le standard C.O.R.B.A.),
les entreprises sont confrontées au problème de la "conception" de
systèmes informatiques distribués.
Ces systèmes sont caractérisés par une distribution dynamique de
l'activité et des ressources logicielles sur des sites interconnectés.
Une des principales difficultés est l'appréhension des problèmes liés à
l'espace et au temps qui contribuent à une complexification
du processus de conception des systèmes informatiques.
Il devient ainsi nécessaire de traiter de nouvelles difficultés liées :
- au partage, à la duplication, à la mobilité de l'information et des
programmes,
- au routage de l'information,
- à la cohérence des informations,
- à la relation entre le temps local à un site et le temps global au système,
- à l'évolution dans le temps de la distrtibution
- ...
Ainsi, l'équipe de recherche s'est intéressée de près à la phase de compréhension du problème,
en amont du processus de conception.
Dans le contexte d'un système distribué, une représentation spatiale
(représentation des différents sites, des interconnexions, de la répartition des ressources, ...) et temporelle
(exécutions parallèles, exécution distribuée, évolution, ...) d'un système distribué constitue un support
important dans le processus de compréhension de la situation .
C'est dans cette perspective que l'équipe s'est intéressée :
- à l'apport des interfaces homme-machine en conception et utilisation des systèmes distibués,
- à l'apport de la notion de point de vue dans la compréhension et le découpage des composants d'un système distribué.
Parallèlement à cette réflexion de fond, l'équipe mène une activité d'expérimentation, basée sur le
standard C.O.R.B.A. avec l'outil O.R.B.I.X. Web dédié au langage Java.
L'objectif est de construire un noyau d'expérimentation.
Celui-ci sera composé d'un evironnement de conception d'applications distribuées intégrant
une interface homme-machine qui permettra une bonne appréhension de l'espace et du temps.
A partir de ce noyau, il sera possible d'envisager des collaborations industrielles (avec la société
Delta Partners notamment).
I.3 La programmation orientée objet distribuée
Dernièrement, les systèmes informatiques ont évolué en s'interconnectant
(Internet, Intranet, ...).
Ainsi les architectures matérielles et logicielles ont du être modifiées.
Deux approches ont vu le jour :
- Ordinateurs client / serveur dans un contexte centralisé . Toute la charge était "déplacée" sur un seul et même serveur
=> approche inéquitable.
Rôle de client ou serveur défini statiquement.
- la deuxième est plus "répartie" car décentralisée : un "organe" peut être soit acteur (serveur),
soit consommateur (client) de ressources.
Approche dynamique ou multiple.
De même, des nouveaux mécanismes nécessaires à la distribution ont été mis en place :
- Librairies UNIX SystemV (sockets, signaux, sémaphores, mémoire partagée ...)
- SUN RPC (Remote Procedure Call / appel de procédures à distance)
- SUN a modélisé une version plus moderne adaptée au langage objet Java : R.M.I.
(Remote Method Invocation / Invocation de méthodes à distance),
- l'O.M.G. (Object Management Goup) a défini C.O.R.B.A.
(Common Object Request Broker Architecture / architecture standard pour les objets distribués)
Les différentes approches de programmation qui existaient jusqu'alors étaient :
- la programmation impérative (dérivés AGOL 60, Basic, Pascal, C ...),
- la programmation fonctionelle (LISP),
- la programmation orientée objet (Java, C++, Eiffel, Smalltalk ...) .
- ...
Or il s'est avéré que la Programmation Orientéé Objet de par sa modularité, était le langage de prédilection des concepteurs d'applications
distribuées.
L'apport de l'objet à la distribution vous est expliqué dans ce document.
I.3.1 La notion d'objet
Un objet est une structure qui associe les données aux fonctions
(appelées méthodes)
qui les exploitent.
Cette structure est composée :
- d'une partie publique qui contient ce qui est accessible à l'utilisateur de l'objet; soit :
- son identifiant qui permet le référencement,
- son interface de programmation : signatures des méthodes.
- d'une partie privée qui encapsule :
- l'état de l'objet,
- et l'implantation des méthodes de l'interface.
La séparation partie publique / partie privée d'un objet permet aux clients de ne pas se soucier du code d'implantation
de l'objet.
D'un autre côté, cela laisse la possibilité aux programmeurs de modifier la partie interne de l'objet sans incommoder les utilisateurs.
Les objets de même nature sont crées sur la base d'un modèle commun : la classe de l'objet.
Une relation de hiérarchie peut être établie entre les classes pour factoriser leurs caractéristiques communes.
On parle alors :
- d'héritage simple lorsqu'une classe hérite d'une seule classe,
- et d'héritage multiple si une classe hérite de plusieurs autres classes.
Illustrons l'héritage par un exemple concret :
Tous les oiseaux (classe mère : Oiseau) volent (methode voler()) et sont ovipares.
Un canard est un oiseau (la classe Canard hérite de Oiseau) .
Le canard vole (selon la méthode voler() définie dans le modèle) et il nage
(méthode supplémentaire spécifique au Canard).
Soit maintenant un pingouin (classe Pingouin).
Un pingouin est un oiseau (Pingouin hérite de Oiseau) ovipare mais qui ne vole pas comme un oiseau.
on redéfinit alors la méthode voler() pour le Pingouin.
On parle alors de polymorphisme.
Tous les mécanismes d'encapsulation, d'héritage et de polymorphisme font de la P.O.O. une approche
modulable et extensible.
L'approche orientée objet se prête donc bien à la construction d'applications complexes notamment dans un contexte distibué.
I.3.2 JAVA
Le langage Java est un langage objet à part entière.
Ce langage objet est basé sur C++ en ayant exclu la plupart de ses défauts.
Outre les aspects de programmation, son principal avantage est d'être 100% portable :
source compilée une fois, exécutable partout.
Cela vient du fait que le langage Java est interprété par une
machine virtuelle définie selon une norme bien précise.
Une machine virtuelle n'est ni plus ni moins qu'un interpréteur qui
execute le byte-code compilé java
sur un systeme d'exploitation et donc pour un ordinateur.
Le langage Java a été élaboré par une entreprise commerciale SUN
mais dans un contexte trés ouvert .
Ainsi on dispose d'une riche A.P.I. et de nombreuses documentations.
Ce langage étant relativement récent, toutes les technologies actuelles ont y été implantées :
support internet, web (java.net), multimédia (java.awt, java.3d) , base de données (jdbc)
et commerce électronique (java.wallet) ...
Depuis la distribution java 1.2 le jdk
(compilateur et environnement de programmation)
inclu pleinement C.O.R.B.A. avec son O.R.B. et compilateur d'IDL.