[t]40ex
UniversitéPierre & Marie Curie
U.F.R d'infomatique
[t]45ex
Maîtrise -- 2000-01
Programmation Objet et Distribution
Tavaux dirigés n° 10
Exercice I Un serveur d'objets.
On veut réaliser un petit serveur de calcul pour des expressions
arithmétiques : le client envoie au serveur une expression ;
le serveur lui applique la méthode d'évaluation et renvoie le
résultat. On utilisera la sérialisation pour transmettre les
données.
Question (I.1) Définir une hierarchie de classe représentant les
expressions arithmétiques. On demande que les expressions puissent
être persistantes.
Question (I.2) Définir les classes ArithService
et Arithd
. Cette
dernière utilise la classe Serveur
de la feuille de TD
précédente.
Question (I.3) Définir le client : classe Arithc
. Pour simplifier,
le client demandera l'évaluation d'une seule expression.
Exercice II Des listes d'association distantes (RMI).
Pour créer un objet dont les méthodes peuvent être invoquées
àdistance, il faut :
- définir l'interface de l'objet comme extension de Remote ;
- définir l'implantation de cette interface comme extension de
UnicastRemoteObject ;
- compiler pour obtenir les .class ;
- créer les *_Stub.class et *_Skel.class en
utilisant la commande rmic *.
Pour le serveur, il faut :
- écrire l'application qui enregistre les objets (méthode bind ou rebind ;
- lancer le gestionnaire du répertoire d'objets avec la commande
rmiregistry ;
- compiler puis lancer l'application.
Les classes définissant l'objet distant doivent être connues sur
la machine oùtourne le serveur.
Pour le client, il faut :
- définir l'application qui accède aux objets par la méthode
lookup ;
- la compiler puis la lancer.
Question (II.1) Écrire l'interface IRemoteAlist
qui étend
Remote
et qui fournit trois méthodes pour les listes
d'association : empty
, add
, et get
.
Question (II.2) Définir la classe RemoteAlist
, héritière de
UnicastRemoteObject
(objets distants) qui implante
IRemoteAlist
.
On utilisera la classe Hashtable
et ses méthodes :
public boolean isEmpty()
public synchronized Object get(Object key)
public synchronized Object put(Object key, Object value)
Question (II.3) Écrire une classe de test RAlistUser
permettant la
manipulation d'une liste d'association distante. Tous les arguments
seront pris sur la ligne de commande.
Par exemple :
java RAlistUser machine.distante nnnn add key value
rajoute le couple (key
,value
) àla liste située sur
la machine machine.distante
via le port nnnn
.
Question (II.4) Écrire la classe AlistRegister
permettant
d'enregistrer une liste d'association. La nom de la machine et le
numéro de port sont lus sur la ligne de commande.
Exercice III Pour en faire plus.
Question (III.1) Définir une nouvelle classe Arith
qui encapsule une
liste d'association distante (REmoteAlist
). Cette liste
d'association servira d'environnememnt d'évaluation.
Question (III.2) Redéfinir une hierarchie de classes permettant la
représentation d'expressions contenant des variables. La valeur
d'une variable est celle donnée par la liste d'association.
This document was translated from LATEX by HEVEA.