Sei sulla pagina 1di 1

Architetture e Sistemi Software Distribuiti (A. A.

2020/21)
Esercitazione n. 2 del 17 marzo 2021
Prof. Eugenio Zimeo

Esercizio 2.1
Implementare un’applicazione distribuita per realizzare una chat multiutente: i messaggi inviati da un client devono
essere trasmessi a tutti gli altri client collegati al server.
Nell’ambito della programmazione orientata agli oggetti si può sfruttare il pattern comportamentale Observer per
definire la micro-architettura utile ad agevolare lo sviluppo.
Lo schema UML del pattern Observer è riportato di seguito.
<<interface>>
Subject
+attach()
+detach()
+notify()

AbstractSubject obs
<<interface>>
+attach() * Observer
for all o in obs { +detach()
+update()
o.update(); +notify()
}

ConcreteSubject subject ConcreteObserver


-subjectState -observerState
return subjectState +getState() +update()
+setState()

observerState =
subject.getState()

Nell’implementazione della chat multiutente, il server dovrà ospitare un oggetto remoto che operi come Subject del
pattern Observer. I client dovranno prevedere degli oggetti remoti che operino come Observer del pattern medesimo.
Usare Java RMI per l’implementazione di Subject e Observer.

Esercizio 2.2
Implementare con il supporto di Java RMI la variante del paradigma client/sever nota con il termine di Remote
Evaluation1. Sviluppare in particolare un Engine in grado di ricevere ed eseguire Task che gli vengono inviati dai client.
L’Engine e il paradigma REV da esso supportato consentono di delocalizzare l’esecuzione di frammenti di codice su
macchine specializzate (ad esempio, per l’elaborazione ad elevate prestazioni).
Si implementi l’Engine come un oggetto remoto e si assuma che questo non debba conoscere a priori i Task che gli
vengono sottoposti.
Scrivere un primo task per effettuare la somma di due numeri in remoto.
Scrivere un secondo task per effettuare il calcolo del numero di fibonacci di un numero intero in remoto.

Esercizio 2.3
Con il supporto dei proxy dinamici di Java, istanziare proxy del tipo astratto Math. I proxy dovranno effettuare il log su
standard output della chiamata di ciascun metodo di Math e propagare la chiamata al Subject (MathImpl) perché
realizzi l’operazione richiesta. Nascondere i dettagli della creazione del proxy in una Factory di Math
(MathLoggerFactory) che a seconda di una valore del parametro del costruttore sia in grado di creare istanze di
MathImpl o del proxy da assegnare a variabili di tipo Math. Si assuma che Math abbia i seguenti metodi:
double add(float a, float b);
double sub(float a, float b);
double mul(float a, float b);
double div(float a, float b);

--------------------------------------------------------------------------------
La scadenza per la consegna degli esercizi è venerdì 19 marzo 2021.

1
Il paradigma REV è alla base delle AWS lambda (https://aws.amazon.com/it/lambda/features/) usate nell’ambito del paradigma
serverless computing.

Potrebbero piacerti anche