Progetto di Laboratorio per il corso di Programmazione in Rete e Laboratorio

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Progetto di Laboratorio per il corso di Programmazione in Rete e Laboratorio"

Transcript

1 Progetto di Laboratorio per il corso di Programmazione in Rete e Laboratorio Anno Accademico 2002/2003 Matteo Baldoni Aggiornato a: May 8, 2003 Abstract Queste pagine descrivono il laboratorio per il corso di Programmazione in Rete e Laboratorio per l anno accademico 2002/2003. Il presente laboratorio ha come obiettivo la realizzazione di un chat server e del relativo client grafico. Novità e modifiche: : La Sezione è stata aggiornata con maggiori dettagli relativi alla definizione dei comandi eseguibili su una chat room e la gestione delle eccezioni : Le Sezioni 2.6, 2.7 e 2.9 sono in fase di ridefinizione per l introduzione di maggiori dettagli e spiegazioni : Al metodo execcrc dell interfaccia ChatRoomCommand, nella Sezione 2.5.2, è stato aggiunto un parametro : Completamente riscritta la Sezione : Apportate alcune semplici correzioni di errori di stampa nella Sezione : Riscritta la Sezione : La Sezione 2.4 è stata resa obbligatoria per chi sosterrà l esame dalla sessione di giugno-luglio in poi : La Sezione 2.8 è stata introdotta come parte obbligatoria per chi sosterrà l esame dalla sessione di giugno-luglio in poi. 1

2 1 Modalità di svolgimento e consegna del laboratorio È fortemente consigliato svolgere il laboratorio durante il corso e quindi sostenere l esame nella prima sessione d esame dopo il corso stesso (ci saranno due appelli in tale sessione). 1.1 Iscrizione del gruppo di laboratorio Si ricorda che per poter svolgere il laboratorio è necessario prima di tutto iscriversi compilando l apposito form di iscrizione al laboratorio: nel quale vanno indicati i componenti del gruppo, che possono essere al più due (limite rigido!), e i loro numeri di matricola. Tale iscrizione ha il solo ed unico scopo di conoscere come sono composti i gruppi di laboratorio. 1.2 Materiale da portare alla consegna del laboratorio Alla consegna del laboratorio è necessario allegare: un floppy disk contenente il codice sorgente e compilato del progetto svolto con tutte le istruzioni necessarie ad un facile utilizzo del software stesso; il listato stampato del codice sorgente; la documentazione generata mediante javadoc (sul floppy disk); i diagrammi di classe UML ed una breve relazione sul lavoro svolto. La data della consegna corrisponde al giorno dell esame orale dell appello prescelto. 1.3 Modalità d esame L esame è orale ed individuale anche se il laboratorio è svolto in collaborazione con un altra persona. Per sostenere l esame ad un appello è obbligatorio prenotarsi on-line: L esame ha l obitettivo di verificare sia il corretto svolgimento del laboratorio che la comprensione delle parti di teoria introdotte durante le lezioni del corso. La verifica della parte di teoria avviene mediante prova scritta. La prova scritta ha validità sino all inizio del corso di Programmazione in Rete e Laboratorio dell anno accademico 2003/2004. Per poter discutere il laboratorio è necessario aver superato la prova scritta. È importante ricordare che il laboratorio potrà essere modificato e/o personalizzato per chi deciderà di sostenere l esame nelle sessioni successive alla prima (marzo/aprile 2003). Per modifiche si intende anche l aggiunta di nuove parti da svolgere. Tali modifiche verranno pubblicizzate sulla pagina web del corso: 2

3 baldoni/didattica/aa0203/proginrete Il voto per lo scritto e per il laboratorio sarà espresso in trentesimi. Il voto finale sarà formato dalla media pesata del voto della prova scritta e del laboratorio, secondo il loro contributo in CFU, e cioè voto finale = (voto dello scritto * 2 + voto del laboratorio) / Valitidà del presente testo di laboratorio Il presente testo di laboratorio vale solo fino all inizio del corso di Programmazione in Rete e Laboratorio dell anno accademico 2003/ Descrizione del laboratorio Il laboratorio è organizzato in diverse parti da svolgere in maniera incrementale. Obiettivo del laboratorio è la realizzazione di un chat server e relativo client grafico. Il presente testo di laboratorio è ispirato da al tutorial on-line trovato presso la sezione developerworks del sito dell IBM [4]. Uno schema generale del funzionamento è riportato in Figura 1. In breve, Figure 1: Schema generale del progetto da realizzare. le chat a defferenza delle , consentono lo scambio in tempi ridotti di frasi e file tra utenti che sono connessi contemporaneamente. In una chat esistono varie stanze (o canali), ognuna con un proprio nome 1. In genere in ogni stanza si 1 È uso far precedere tale nome dal simbolo #. 3

4 parla di un argomento coerente con il nome del canale stesso. In ogni stamza ci sono degli utenti, contaddistinti da un soprannome 2 (o nick name), che operano in tale stanza scambiandosi i messaggi. Nel presente laboratorio realizzeremo un servizio di chat che metterà a disposizione una singola stanza (almeno nella versione per chi sosterrà l esame nella prima sessione). Si fa notare che molte delle soluzioni proposte hanno un valore puramente didattico e non sarebbero le migliori per la realizzazione di un vero chat server. 2.1 Parte I: le classi User e Message Definire una classe User le cui istanze contengono il seguente campo: nickname: di tipo String che rappresenta un nome simbolico di un utente (es. matteo ). Definire poi una classe Message le cui istanze contenengono i seguenti campi: from: di tipo User che indica il mittente del messaggio; messagetext: di tipo String contenente il corpo del messaggio. Per ogni classe si definiscano gli opportuni costruttori. In particolare, per la classe Message si definiscano i costruttori: 1. public Message (Utente from, String messagetext) 2. public Message (String from, String messagetext) Il costruttore (2), a differenza del costruttore (1), dovrà creare l oggetto di tipo User utilizzato nell oggetto di tipo Message a partire dalla stringa fornita come parametro. Si definiscano poi un metodo di tipo get ed uno di tipo set, per ogni campo presente nelle classi User e Message (e nelle classi che scriveremo in seguito!); ad esempio, per il campo from della classe Message: public User getfrom(): restituisce l oggetto di tipo User rappresentante il mittente del messaggio contenuto nel campo from; public void setfrom(user user): inizializza il campo from con il valore contenuto nel parametro user. Si definisca, per ogni classe introdotta e che introdurremo in futuro, il metodo public String tostring() che restituisce una stringa che rappresenta l oggetto stesso in formato stampabile su console. Ad esempio, se messaggio è una variabile che contiente un riferimento ad un oggetto di tipo Message, allora messaggio.tostring() restituisce una stringa che stampata dovrebbe risultare qualcosa del tipo: 2 È uso far precedere tale nome dal 4

5 > Qualcuno e gia andato a vedere il film Il signore degli Anelli? Vi e piaciuto? Me lo consigliate? < Si definisca per la classe User il metodo public boolean equals(user user) che restituisce true se l utente passato come parametro ha stesso nickname dell oggetto su cui è invocato il metodo, false altrimenti. Si ricordi di scegliere (sapendo giustificarne il motivo) il tipo di visibilità (private? protected? public? default?) per ogni campo, metodo e classe. Infine si definisca una classe ProvaMessaggio contenente un metodo main che effettui il test delle classi precedentemente definite. 2.2 Parte II: le classi Message4All e Message4U e l interfaccia Allegato Le classi Message4All e Message4U Un utente del nostro chat server avrà sia la possibilità di inviare un messaggio a tutti gli utenti che sono collegati nello stesso momento alla stessa chat room sia la possibilità di inviare un messaggio ad un insieme ristretto di utenti collegati alla sua stessa chat room. Estendere quindi la classe Message introducendo due nuove classi, la classe Message4All e Message4U. Il primo permette di specificare messaggi indirizzati a tutti gli utenti di una certa chat room, la secanda ad un insieme ristretto. In particolare la classe Message4U estende Message permettendo la definizione di un insieme di destinatari (campo to di tipo User[]) di un messaggio. Ridefinire quindi i metodi tostring() per le nuove classi. In modo che stampandolo si specifichi se si tratta di un messaggio pubblico o privato Messaggi con allegati Estendere la classe Messagge4All e Message4U in modo da permettere la possibilità di includere degli allegati ad un messaggio. Per realizzare questo si definisca una interfaccia Attachment contenente il metodo String tostring() e quindi si definiscano le classi Message4AllWA e Message4UWA che estendeno, rispettivamente, la classe Message4All e Message4U aggiungendo un campo attach di tipo Attachment[]. SI definisca nelle nuove classi i metodi set e get necessari e si ridefinisca il metodo tostring() in modo da restituire una stringa che contiene anche gli attachment. 5

6 Fare in modo che un oggetto di tipo Message4All, Message4AllWA, Message4U e Message4UWA possa essere a sua volta un allegato di un altro messaggio. Si modifichi poi, nella classe ProvaMessaggio, il metodo main in modo da effettuare il test delle nuove classi. In particolare si crei un array di tipo Message[] in cui vengono memorizzati vari tipi di messaggio quindi si scriva un ciclo for per stamparli utilizzando il metodo tostring(). 2.3 Parte III: la classe MessageBox Si definisca una classe MessageBox che contenga i campi: owner: di tipo User che specifica il proprietario della casella postale; box: di tipo java.util.list (si scelga l implementazione preferita, ArrayList, LinkedList, Vector ma il campo box deve essere di tipo List) che rappresenta la coda dei messaggi ricevuti dall utente proprietario della casella; ed i metodi: set e get per il campi sopra introdotti; Message readmessage():, restituisce il primo oggetto di tipo Message in coda su box (il più vecchio in attesa); void writemessage(message message): inserisce in coda alla casella il messaggio passato come parametro. Si provi a cambiare il tipo di implementazione per il campo box (ad esempio, ArrayList anzichè Vector) e si verifichi che ancora tutto funzioni. 2.4 Parte IV: l interfaccia Comparabile Si definisca un interfaccia Comparabile che specifichi il seguente metodo: int compara(comparabile ob) le cui implementazioni si intende confrontino con this l oggetto confrontabile ob restituendo -1, 0 o +1 a seconda che this sia minore, uguale o maggiore di ob, oppure generi un eccezione (di tipo ClassCastException) se il confronto non possibile. Si modifichi poi la definizione della classe User in modo che essa implementi l interfaccia Comparabile, ad esempio confrontando rispetto al valore del campo nickname. Si definisca in una nuova classe (ad esempio SortArrays) un semplice metodo di ordinamento void sort(comparabile[]) 6

7 (statico?) e quindi si testi il metodo creato su di un array di elementi di tipo User appositamente creato. Si modifichi la definizione della classe Messagge in modo che anch essa implementi l interfaccia Comparabile, ad esempio confrontando rispetto all utentee si applichi il metodo di ordinamento sort definito precedentemente anche ad un array di Message (contenente anche oggetti di tipo Message4All, Message4U, Message4AllWA, Message4UWA) opportunamente creato. Si esegua nuovamente il presente esercizio utilizzando l interfaccia Comparable e la classe java.util.arrays fornite con il Development Kit di Java al posto dell interfaccia Comparabile e della classe SortArrays precedentemente usate. 2.5 Parte V: definizione di una chat room e dei comandi eseguibili La classe ChatRoom Si definisca una classe ChatRoom contenente i campi: listofmessagebox di tipo List che rappresenta l insieme di caselle presenti nel chat server in un dato momento; chatroomname che rappresenta il nome della chat room (si ricordi di definire i relativi metodi set e get per questo campo); ed i metodi: void adduser(user user): aggiunge un nuovo utente user (quindi la sua casella, MessageBox) alla chat room; void removeuser(user user): rimuove un utente user (quindi la sua casella, MessageBox) dalla chat room; void send2all(message4all message): consegna in ogni casella presente in quel momento (tranne quella dell utente che ha inviato il messaggio) il messaggio message; void send2u(message4u message): consegna ad ogni destinatario specificato in message il messaggio message stesso; Message receive(user user): restituisce il più vecchio messaggio nella casella dell utente user, cancellandolo dalla coda. Ogni metodo solleva l opportuna eccezione se l operazione non è eseguibile I comandi eseguibili su una chat room Si definisca una interfaccia ChatRoomCommand che richieda l implementazione del metodo public Message execcrc(chatroom chatroom, Object opt param); 7

8 Il parametro opt param permette, se necessario, di passare un parametro opzionale al metodo execcrc nell eventualità che questo fosse utile. Quindi si definiscano le seguenti classi che implementano l interfaccia ChatRoomCommand, una per ogni possibile comando eseguibile su di un oggetto di tipo ChatRoomCommand: Send2AllCRC che ridefinisce il metodo execcrc in modo da inserire l oggetto di tipo Message2All contenuto in un campo message (definito durante la creazione dell oggetto di tipo Send2AllCRC ) in tutte le caselle postali presenti in quel momento (cioè degli utenti connessi) tranne che all utente che ha inviato il comando stesso e restituire un messaggio (il cui mittente è la chat room stessa) contenente l esito dell operazione; Send2UCRC che ridefinisce il metodo execcrc in modo da inserire l oggetto di tipo Message4U contenuto in un campo message (definito durante la creazione dell oggetto di tipo Send2UCRC ) nelle caselle postali dei destinatari del messaggio stesso e restituire un messaggio (il cui mittente è la chat room stessa) contenente l esito dell operazione; ReceiveCRC che ridefinisce execcrc in modo da restituire il più vecchio messaggio presente nella casella postale dell utente del campo utente di tipo User, oppure un messaggio che (il cui mittente è la chat room stessa) segnala che si è verificata una situazione di errore; GetConnectedUsersCRC che ridefinisce execcrc in modo da restituire un messaggio il cui mittente è la chat room stessa ed il messagio contiene un elenco di tutti gli user collegati in quel momento, oppure un messaggio che segnala che si è verificata una situazione di errore; GetIntoRoomCRC che ridefinisce execcrc in modo da creare una nuova casella di posta il cui proprietario è l utente definito dal campo utente di tipo User e restituire un messaggio (il cui mittente è la chat room stessa) contenente l esito dell operazione; ExitRoomCRC che ridefinisce execcrc in modo da cancellare la casella di posta dell utente definito dal campo utente di tipo User e restituire un messaggio (il cui mittente è la chat room stessa) contenente l esito dell operazione; Per esempio, la classe Send2AllCRC potrebbe essere realizzata nel seguente modo: public class Send2AllCRC implements ChatRoomCommand { private Message2All message; public Send2AllCRC(Message4All message) { this.message = message; public... get... public void set... public Message execcrc(chatroom chatroom, Object opt_param) { 8

9 Message answer = new Message(); answer.setfrom(chatroom.chatroomname()); try { chatroom.send2all(message); answer.setmessagetext( Send2AllCRC done! ); catch (ChatRoomException err) { answer.setmessagetext( Send2AllCRC failed: + err.getmessage()); return answer; Le altre classi sono del tutto analoghe. Infine definire una semplice classe SimpleChatServer che crea un oggetto di tipo ChatRoom ed invoca su di esso alcuni comandi in un metodo main. Ad esempio, supponiamo di voler creare due che si collegano e parlano attraverso il nostro chat server. Il metodo main di SimpleChatServer dovrebbe contenere tra le altre le seguenti istruzioni:... ChatRoom ChatRoom = new ChatRoom( Laboratorio di Progr. in Rete );... // creazione degli utenti nella chat room User matteo = new ); User cristina = new );... // creazione del comando GetIntoRoomCRC ChatRoomCommand getintoroomcrcmatteo = new GetIntoRoomCRC(matteo);... // esecuzione dei comandi GetIntoRoomCRC getintoroomcrcmatteo.execcrc(chatroom, null);... // creazione di un messaggio Message4All mes1 = new Messagge4All(matteo, " testo ");... // creazione del comando di invio a tutti di un messaggio ChatRoomCommand send2allcrc1 = new Send2AllCRC(mes1)... // esecuzione dell invio di send2allcrc1 send2allcrc1.execrc(chatroom, null);... // creazione del comando di lettura di un messaggi ChatRoomCommand receivecrc1 = new ReceiveCRC(cristina);... // esecuzione del comando receivecrc1 e stampa del risultato System.out.println(receiveCRC1.execCRC(chatRoom, null));... 9

10 La necessità di passare come parametro attuale del metodo execcrc un oggetto di tipo ChatRoom sarà chiara nella Sezione Parte VI: creiamo un per-thread chat server Panoramica Si realizzi un server per la gestione di un oggetto di tipo ChatRoom che metta in ascolto un socket server su una porta specificata. Tale server deve essere in grado di gestire più client contemporaneamente. I client inviano al server oggetti di tipo ChatRoomCommand (mediante stream di oggetti), su tali oggetti il server invoca il medoto execcrc, passandogli l oggetto di tipo ChatRoom memorizzato presso di esso ed eventuali altri parametri necessari. L esecuzione del comando determina l invio al client di un oggetto di tipo Message. Questo può essere il risultato della corretta esecuzione del metodo execcrc oppure il messaggio restituito da una possibile eccezione (vedi Figura 2). Si noti che è importante Figure 2: Schema dell esecuzione di un comando CRC. gestire le eccezioni in modo da non bloccare il server in caso di errore e nello stesso tempo informare il client del malfunzionamento. Chiameremo l attività appena descritta il ciclo ricevi-esegui-invia-ricevi dei comandi, ciclo REIR, in breve. Tale ciclo è discusso in dettaglio nella Sezione Per ogni client, contemporaneamente all attività di gestire i comandi ricevuti dal client, il server deve prontamente inviare al client ogni messaggio consegnato nella sua casella (MessageBox) per la visualizzazione (vedi Figura 3). Chiameremo l attività appena descritta il ciclo leggi-invia-leggi dei messaggi, 10

11 Figure 3: Schema dell invio dei messaggi letti in un MessageBox. ciclo LIL, in breve. Tale ciclo è discusso in dettaglio nella Sezione Per ogni client sono quindi necessari due thread, uno per gestire l attività del ciclo REIR ed uno per gestire l attività del ciclo LIL, si veda la Figura 4. In [1], nelle sezioni Esempi sui Thread e Socket, possono essere scaricati gli esempi che hanno fatto da test al codice descritto nelle sezioni successive La classe ChatRoomServer Si definisca quindi una classe ChatRoomServer per la creazione di un server per la chat room che contenga i campi: port: di tipo int che specifica la porta su cui attivare il server; chatroom: di tipo ChatRoom che contiene una chat room. Inoltre si definisca il metodo: public void runchatserver() che crea un SocketServer e quindi si metta in attesa di un richiesta di connessione. All accettazione di una connessione, crei un thread per la gestione del ciclo REIR: public void runchatserver() { ServerSocket s = new ServerSocket(PORT); 11

12 Figure 4: Gestione dei cicli ricevi-esegui-invia-ricevi e leggi-invia-leggi di ogni client. try { while(true) { Socket socket = s.accept(); try { new ThreadREIR(socket, chatroom); catch(ioexception e) { socket.close(); finally { s.close(); Il thread per il ciclo ricevi-esegui-invia-ricevi dei comandi Il thread per la gestione del ciclo REIR è attivato contestualmente alla accettazione della connessione socket da parte del client e termina con l esecuzione del comando ExitRoom. Si definisca quindi una classe ThreadREIR per la gestione del ciclo REIR di un dato client contenente i campi: socket: di tipo Socket; 12

13 in: di tipo ObjectInput, contenente un ObjectInputStream ottenuto da socket: in = new ObjectInputStream(socket.getInputStream()); out: di tipo ObjectOutput, contenente un ObjectOutputStream ottenuto da socket: out = new ObjectOutputStream(socket.getOutputStream()); chatroom: di tipo ChatRoom, contenente la chat room a cui il ciclo REIR fa riferimento. Questa classe deve estendere la classe Thread e quindi ridefinire il metodo run che contiene il ciclo REIR vero e proprio, uno schema di tale metodo potrebbe essere il seguente: public void run() { boolean stoprequested = false; Message message; ChatRoomCommand command; while (!stoprequested) { // leggi un comando da in message = comando.execcrc(chatroom, null); // scrivi message su out if (comando instanceof ExitRoom) stoprequested = true; Si ricordi di gestire anche la chiusura del socket Il thread per il ciclo leggi-invia-leggi dei messaggi Il thread per la gestione del ciclo LIL per un certo user può essere attivato contestualmente all aggiunta dello user nella chat room (metodo adduser di ChatRoom) e terminare alla rimozione dello user dalla chat room (metodo removeuser di ChatRoom). Il ciclo LIL ha il compito di controllare continuamente il MessageBox del suo client ed inviare i messaggi in esso inseriti dai cicli REIR di altri client (si veda la Figura 5). Se non vi sono messaggi in coda il thread che gestisce il ciclo LIL deve essere messo in attesa dell inserimento di un messaggio. A tale fine è necessario modificare il metodo readmessage di MessageBox introducento una wait(): public synchronized Message readmessage() throws InteruptedException { while (box.isempty()) wait(); // operazione di lettura 13

14 Figure 5: Interazione dei thread tra interfaccia grafica del client e del server. Il thread è svegliato non appena un messaggio viene inserito nella coda di messaggi. A tale fine è necessario modificare il metodo writemessage di Message- Box: public synchronized void writemessage(message message) { // operazione di scrittura notifyall(); Per ogni oggetto MessageBox presente nella chat room è quindi necessario attivare un thread contenente il ciclo LIL, si definisca quindi una classe MessageBoxWithThreadLIL che estende MessageBox ed implementa Runnable contenente i campi: out: di tipo ObjectOutput che contiene lo stream di output di oggetti verso il client; stoprequested: di tipo boolean che permette di uscire dall esecuzione del metodo run quando il comando ExitRoom è eseguito; thisthread: di tipo Thread che contiene l oggetto di tipo thread vero e proprio (si noti che è necessario utilizzare l interfaccia Runnable in quanto si desidera estendere MessageBox e quindi non è possibile utilizzare direttamente la classe Thread estendendola come si è fatto per la classe ThreadREIR). 14

15 Si faccia riferimento alla Sezione 3.1 per uno schema dettagliato della classe MessageBoxWithLIL. In particolare, questa classe deve ridefinire il metodo run che rappresenta il ciclo LIL vero e proprio: public void run() { while (!stoprequested) try { // leggi un messaggio del controllato messagebox // e invialo al client out. writeobjet(this.readmessage()); catch (InterruptedException err) { if (stoprequested) return; Si noti che in effetti il comando ReceiveCRC non è utilizzato nella soluzione suggerita, si è liberi di trovare soluzioni alternative se lo si desidera. Infine è necessario modificare il metodo adduser al fine di creare un oggetto di tipo MessageBoxWithThreadLIL anzichè un semplice MessageBox: public void adduser(user user, ObjectOutput out) { synchronized(listofmessagebox) { MessageBox mb = new MessageBoxWithThreadLIL(user, out); // aggiunta di mb in listofmessagebox Si noti che lo stream di output di oggetti out può essere passato al metodo adduser attraverso il parametro opzionale del metodo execcrc del comando GetIntoRoomCRC dove la adduser è invocata. Cioè lo schema del metodo run della classe ThreadREIR dovrebbe diventare: public void run() { boolean stoprequested = false; Message message; ChatRoomCommand command; while (!stoprequested) { // leggi un comando da in if (comando instaceof GetIntoRoomCRC) message = comando.execcrc(chatroom, out); else message = comando.execcrc(chatroom, null); // scrivi message su out if (comando instanceof ExitRoom) stoprequested = true; 15

16 In modo analogo la rimozione di uno user deve prevvedere anche all interruzione dell esecuzione del thread attivo presso un MessageBox: public void removeuser(user user) { synchronized(listofmessagebox) { MessageBoxWithThreadLIL mb; // cerca la casella di user e ponila in mb mb.requestedstop(); // rimuovi la casella di user da listofmessagebox Gestione delle risorse condivise Un altro aspetto fondamentale è la gestione corretta dell accesso alle risorse condivise. In particolare due sono i punti a cui porre attenzione: l accesso alla struttura dati che mantiene gli oggetti di tipo Messagge inviati ad un certo user; l accesso alla struttura dati che mantiene gli oggetti di tipo MessageBox correntemente in uso. Nel primo caso significa che l accesso alla struttura dati box di un oggetto di tipo MessageBox deve essere garantita thread-safe. In particolare, le operazioni che rimuovo (readmessage) e aggiungono messaggi (writemessage) in una stesso box devono essere effettuate in mutua esclusione se eseguite in thread diversi. A tal fine una semplice soluzione è quella di dichiarare tali metodi synchronized visto che l accesso al struttura dati box avviene esclusivamente tramite questi metodi. Il secondo caso significa che anche l accesso alla struttura dati listofmessagebox di un oggetto di tipo ChatRoom deve essere garantita thread-safe. In particolare, le operazioni che aggiugono o rimuovono un utente (adduser e removeuser) devono essere effettuate in mutua escluzione tra di loro e anche rispetto le operazioni di consegna di un messaggio nelle caselle di un utente (send2all e send2u ). Anche in questo caso, una prima e semplice soluzione è quella di dichiarare synchronized tutti i metodi della classe ChatRoom. Si noti, però, che in questo modo anche l esecuzione delle operazioni di consegna di un messaggio nelle caselle di un utente eseguita su thread diversi è effettuara in mutua esclusione, cosa non strettamente necessaria. Infatti, durante la consegna, è sufficiente garantire che due esecuzioni dell operazione di readmessage sulla stessa casella siano eseguite in mutua esclusione, già garantito dal fatto che il metodi readmessage è dichiarato synchronized come abbiamo descritto nel primo caso. Una possibile soluzione alternativa è descritta nella Sezione Parte VII: creiamo un client grafico per il chat server Si realizzi un intefaccia grafica del tipo mostrata in Figura 6 La configurazione del client (IP, porta del server, informazioni dell utente) dovrebbe essere fatta 16

17 Figure 6: Un esempio di interfaccia client per il nostro server chat. mediante un opportuna finestra di tipo dialog del tipo mostrata in Figura 7. Tale connessione si concretizza con una apertura di un socket verso il server. Il client grafico deve ocuparsi contemporaneamente di due attività, gestite da due diversi thread: l invio dei messaggi dell utente verso gli altri utenti della chat room; la visualizzazione dei messaggi inviati dagli altri utenti, chiameremo tale attività il ciclo ricevi-visualizza-ricevi dei messaggi, ciclo RVR. La prima attività descritta può essere gestita direttamente dal thread principale del client grafico. La pressione del bottone Send (quindi nel corrispondente metodo actionperformed della classe che implementa l ActionListener di tale bottone) deternima la creazione di un messaggio di tipo Message4All o Message4U a seconda del valore inizializzato nel campo To con testo il messaggio inserito in Message to send. Quindi un comando di tipo Send2AllCRC o Send2UCRC viene creato e inviato al server. Il thread per la gestione del ciclo RVR è attivato contestualmente alla richiesta connessione (pressione del bottone Connect ) e termina con la chiusione della connessione (pressione del bottone Close ). Si scelga la soluzione preferita per la realizzazione del thread per la gestione del ciclo RVR: una classe separata (esempio ThreadLVL) o implementazione dell interfaccia Runnable da parte dell interfacia grafica (probabilmente questa è la soluzione più semplice). In ogni caso il seguente è lo schema del metodo run del thread: 17

18 Figure 7: Interfaccia grafica per client: finestra di dialog per la connessione e la registrazione ad una chat room. public void run() { boolean stoprequested = false; Message message; while (!stoprequested) { // leggi un messaggio da in // se il messaggio arriva dalla chat room // visualizza il messaggio su Connection console // altrimenti visualizza il messaggio su Message Display Il thread si mette in attesa di messaggi sullo stream di input (sream di oggetti), ricevuto un messaggio, se chi invia il messaggio è la chat room stessa allora si visualizza il testo contenuto in esso sulla Connection console altrimenti lo si visualizza sul Message Display. Si veda anche la Figura Parte VIII: un server per più chat room Si estenda il server realizzato sino ad ora in modo da permettere la gestionee più di chat room. L utente durante attraverso il comando GetIntoRoomCRC specifica la stanza in cui vuole entrare, a tal fine si aggiunga un opportuno campo al suo costruttore. 18

19 Un modo semplice per realizare questa parte è quella di sostituire la definizione del campo chatroom di tipo ChatRoom nella classe CharRoomServer (si veda la Sezione 2.6.2) con un campo chatroom di tipo ChatRoom[]. All avvio il server crea un certo numero definito di chat alle quali gli utenti potranno collegarsi. Si può quindi sostituire il prototipo del metodo execcrc dell interfaccia Chat- RoomCommand con questo nuovo: public Message execcrc(chatroom[] chatroom, Object opt param); e modificare di conseguenza le implementazioni del metodo execcrc neii vari comandi. Per esempio, la classe Send2AllCRC potrebbe essere modificata nel seguente modo: public class Send2AllCRC implements ChatRoomCommand { private Message2All message;... public Send2AllCRC(Message4All message) { this.message = message; public... get... public void set... public Message execcrc(chatroom[] chatroom, Object opt_param) { Message answer = new Message(); answer.setfrom(chatroom.chatroomname()); try { // i e inizializzato con la chat room a cui l utente e collegato chatroom[i].send2all(message); answer.setmessagetext( Send2AllCRC done! ); catch (ChatRoomException err) { answer.setmessagetext( Send2AllCRC failed: + err.getmessage()); return answer; Ed in modo analogo tutti gli altri comandi. Per inizializzare la variabile i si può procedere in due modi: 1. o cerco a quale stanza è iscritto all utente; 2. o passo tale informazione direttamente al comando quando l utente lo crea (passandogli il nome della chat room) e quindi vedo sul server a quale numero corrisponde. Altre soluzioni sono le benvenute. 2.9 Parte IX: un server RMI Questa parte non è obbligatoria per chi sosterrà l esame nella sessione di giugno-luglio. 19

20 IN FASE DI PREPARAZIONE 3 Note e Commenti 3.1 La classe MessageBoxWithThreadLIL Nella piattaforma Java 2 i metodi stop, suspend e resume sono stati dichiarati deprecati. Il seguente schema della classe MessageBoxWithThreadLIL è ispirata a quanto mostrato in [2, pagina 47 vecchia edizione, pagina 67 nuova edizione] e presenta una soluzione per permettere ad un thread di interrompere un altro thread senza ricorso al metodo stop. public class MessageBoxWithLIL extends MessageBox implements Runnable { private boolean stoprequested; private Thread thisthread; private ObjectOutput out; public MessageBoxWithLIL(User user, ObjectOutput out) { super(user); this.out = out; stoprequested = false; thisthread = new Thread(this); thisthread.setdaemon(true); thisthread.start(); public void requestedstop() { stoprequested = true; thisthread.interrupt(); public void run() { while (!stoprequested) try { // gestione del ciclo LIL catch (InterruptedException err) { if (stoprequested) return; 20

21 3.2 Sincronizzazione nell accesso alla lista di caselle Una possibile soluzione alternativa è quella presentata qui di seguito. Anzichè dichiarare synchronized i metodi adduser, removeuser, send2all, send2u è possibile bloccare direttamente l oggetto listofmessagebox per lo stretto necessario. Nel caso dei metodi adduser e removeuser questo approccio non cambia di molto la precedente soluzione: public Message adduser(user user) { sychronized (listofmessagebox) { // esecuzioni delle istruzioni per aggiungere uno user public Message removeuser(user user) { sychronized (listofmessagebox) { // esecuzioni delle istruzioni per rimuovere uno user Nel caso dei metodi send2all e send2u, però, la situazione è diversa. Anzichè porre in mutua esclusione tutto il processo di consegna è possibile effettuare un in mutua esclusione una copia della struttura dati listofmessagebox in un array (per mezzo del metodo toarray() di java.util.list) e quindi, percorrere questa copia della stuttura dati per la consegna del messaggio: public Message send2all(message4all message) { MessageBox[] arrayofmessagebox; sychronized (listofmessagebox) { arrayofmessagebox = listofmessagebox.toarray(); // l operazione di invio e fatta percorrendo la copia locale // anziche listofmessagebox for (int i = 0; i < a.length; i++) { // consegna del messaggio in arrayofmessagebox[i] public Message send2u(message4u message) { MessageBox[] arrayofmessagebox; sychronized (listofmessagebox) { arrayofmessagebox = listofmessagebox.toarray(); // l operazione di invio e fatta percorrendo la copia locale // anziche listofmessagebox for (int i = 0; i < a.length; i++) { // consegna del messaggio in arrayofmessagebox[i] 21

22 In questo modo due consegne di un messaggio possono essere effettuate anche contemporaneamente (con la garanzia comunque che due writemessage sulla stessa MessageBox sono eseguite in mutua esclusione), mentre se durante la consegna di un messaggio un utente verrà rimosso questa operazione non altera la copia locale arrayofmessagebox, evitanto una eccezione di tipo Concurrent- ModificationException che invece sarebbe sollevata nel caso che percorressimo direttamente la struttura dati listofmessagebox mediante un iteratore. È importante notare che le implementazioni di List, LinkedList e ArrayList non sono sincronizzate (si veda la descrizione delle classi LinkedList e ArrayList in [3]). È quindi necessario creare le relative implementazioni di List nel seguente modo: List list = Collections.synchronizedList(new LinkedList(...)); List list = Collections.synchronizedList(new ArrayList(...)); References [1] M. Baldoni. Esempi di programmi in java. baldoni/didattica/esempiprogrammijava. [2] C. S. Horstmann and G. Cornell. Java 2: Tecniche Avanzate. McGraw-Hill, [3] Sun Microsystem, Inc. Java 2 Platform API Specification, SE 1.4.1, [4] Greg Travis. Building a Java chat server ibm.com/developerworks/java/, January

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

Realizzazione di una classe con un associazione

Realizzazione di una classe con un associazione Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe

Dettagli

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014) Il software per gli esami ICON può essere eseguito su qualunque computer dotato di Java Virtual Machine aggiornata.

Dettagli

Esercitazione n 4. Obiettivi

Esercitazione n 4. Obiettivi Esercitazione n 4 Obiettivi Progettare e implementare per intero un componente software in Java Linguaggio Java: Classi astratte Utilizzo di costruttori e metodi di superclasse Polimorfismo Esempio guida:

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO. 2015 e PARAMETRI2015

COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO. 2015 e PARAMETRI2015 COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO. 2015 e PARAMETRI2015 Vicenza, 3 giugno 2015 Gentile cliente, si ricorda che a partire dall aggiornamento PROFIS 2011.1 è stato automatizzato

Dettagli

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete La prima applicazione Java Programma MyFirstApplication Il programma visualizza una finestra vuota sullo schermo. Importo il package delle classi usate nel seguito. Dichiaro la classe MyFirstApplication

Dettagli

SOMMARIO... 3 INTRODUZIONE...

SOMMARIO... 3 INTRODUZIONE... Sommario SOMMARIO... 3 INTRODUZIONE... 4 INTRODUZIONE ALLE FUNZIONALITÀ DEL PROGRAMMA INTRAWEB... 4 STRUTTURA DEL MANUALE... 4 INSTALLAZIONE INRAWEB VER. 11.0.0.0... 5 1 GESTIONE INTRAWEB VER 11.0.0.0...

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Guida al sistema. Dott. Enea Belloni

Guida al sistema. Dott. Enea Belloni Sistema Gestionale Voucher Guida al sistema Dott. Enea Belloni Sommario della presentazione Il sistema informatico per la gestione delle domande L utente presentatore: diritti e responsabilità La pagina

Dettagli

Registratori di Cassa

Registratori di Cassa modulo Registratori di Cassa Interfacciamento con Registratore di Cassa RCH Nucleo@light GDO BREVE GUIDA ( su logiche di funzionamento e modalità d uso ) www.impresa24.ilsole24ore.com 1 Sommario Introduzione...

Dettagli

Prova di Laboratorio di Programmazione

Prova di Laboratorio di Programmazione Prova di Laboratorio di Programmazione 6 febbraio 015 ATTENZIONE: Non è possibile usare le classi del package prog.io del libro di testo. Oltre ai metodi richiesti in ciascuna classe, è opportuno implementare

Dettagli

Soluzione dell esercizio del 2 Febbraio 2004

Soluzione dell esercizio del 2 Febbraio 2004 Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo

Dettagli

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Ottava Esercitazione. introduzione ai thread java mutua esclusione Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione

Dettagli

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Cognome Nome Matricola Postazione PC Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a. 2010-11 13 settembre 2011 Testo Il database di un videonoleggio è costituito da due vettori paralleli.

Dettagli

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: Javadoc Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: /* commenti */ // commenti /** commenti documentazione */ Questi ultimi generano automaticamente

Dettagli

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006 Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2006-07 Secondo Compitino 21 Dicembre 2006 Si noti che le soluzioni ai quesiti saranno considerate

Dettagli

MANUALE PARCELLA FACILE PLUS INDICE

MANUALE PARCELLA FACILE PLUS INDICE MANUALE PARCELLA FACILE PLUS INDICE Gestione Archivi 2 Configurazioni iniziali 3 Anagrafiche 4 Creazione prestazioni e distinta base 7 Documenti 9 Agenda lavori 12 Statistiche 13 GESTIONE ARCHIVI Nella

Dettagli

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino. www.playnet.it agg. Documento 1/03/2007 REGOLE DEL CLIENT Le regole del client sono un sistema di smistamento dei messaggi (arrivati) fra le varie cartelle di posta presenti sul server. Possono essere

Dettagli

DENUNCE EDILCONNECT GUIDA COMPILAZIONE

DENUNCE EDILCONNECT GUIDA COMPILAZIONE Cassa Edile Como e Lecco DENUNCE EDILCONNECT GUIDA COMPILAZIONE COMPILAZIONE DA FILE PAGHE Guida per i consulenti e le imprese che compilano la denuncia utilizzando il file di esportazione dei software

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server Versione 30.5.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/: applicazioni 1 La logica dei socket Abbiamo visto che un applicazione client si connette

Dettagli

Manuale Terminal Manager 2.0

Manuale Terminal Manager 2.0 Manuale Terminal Manager 2.0 CREAZIONE / MODIFICA / CANCELLAZIONE TERMINALI Tramite il pulsante NUOVO possiamo aggiungere un terminale alla lista del nostro impianto. Comparirà una finestra che permette

Dettagli

Laboratorio di Sistemi Distribuiti Leonardo Mariani

Laboratorio di Sistemi Distribuiti Leonardo Mariani Laboratorio di Sistemi Distribuiti Leonardo Mariani ELECTION ALGORITHMS In molti sistemi distribuiti un processo deve agire da (o svolgere un ruolo particolare) per gli altri processi. Spesso non è importante

Dettagli

Guida alla registrazione on-line di un NovaSun Log

Guida alla registrazione on-line di un NovaSun Log Guida alla registrazione on-line di un NovaSun Log Revisione 4.1 23/04/2012 pag. 1 di 16 Contenuti Il presente documento è una guida all accesso e all utilizzo del pannello di controllo web dell area clienti

Dettagli

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE 1/6 MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE Per prima cosa si ringrazia per aver scelto ImmobiPhone e per aver dato fiducia al suo autore. Il presente documento istruisce l'utilizzatore sull'uso del programma

Dettagli

Laurea Specialistica in Informatica, Tecnologie Informatiche Anno Accademico 2008/2009 Reti Applicazioni e Servizi

Laurea Specialistica in Informatica, Tecnologie Informatiche Anno Accademico 2008/2009 Reti Applicazioni e Servizi Laurea Specialistica in Informatica, Tecnologie Informatiche Anno Accademico 2008/2009 Reti Applicazioni e Servizi Implementazione di una MIDlet che realizza un sistema di voto Christian Tiralosi Sviluppatori:

Dettagli

MODULO 5 ACCESS Basi di dati. Lezione 4

MODULO 5 ACCESS Basi di dati. Lezione 4 MODULO 5 ACCESS Basi di dati Lezione 4 ARGOMENTI Lezione 4 Filtrare i dati Esempio 1 Query Cos è Creare Query in visualizza struttura Criteri di ricerca Esempio 2 Esempio 3 Esempio 4 Creare Query in creazione

Dettagli

Che differenza c è tra una richiesta XML ed una domanda XML? (pag. 4)

Che differenza c è tra una richiesta XML ed una domanda XML? (pag. 4) FAQ INVIO DOMANDE CIGO CON FLUSSO XML Cosa serve per inviare una domanda CIGO con il flusso XML? (pag. 2) Come si prepara una domanda in formato XML? (pag. 3) Che differenza c è tra una richiesta XML ed

Dettagli

www.filoweb.it STAMPA UNIONE DI WORD

www.filoweb.it STAMPA UNIONE DI WORD STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere

Dettagli

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012

GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012 GIOCHI MATEMATICI PER LA SCUOLA SECONDARIA DI I GRADO ANNO SCOLASTICO 2011-2012 L unità di Milano Città Studi del Centro matematita propone anche per l a.s. 2011-2012 una serie di problemi pensati per

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E08 Soluzione Esercizi F. Gasparetti, C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf1/ Soluzione Esercizi

Dettagli

COMUNIC@CTION INVIO SMS

COMUNIC@CTION INVIO SMS S I G e s t S.r.l S e d e l e g a l e : V i a d e l F o r n o 3 19125 L a S p e z i a T e l e f o n o 0187/284510/15 - F a x 0187/525519 P a r t i t a I V A 01223450113 COMUNIC@CTION INVIO SMS GUIDA ALL

Dettagli

Sistema per scambi/cessioni di Gas al Punto di Scambio Virtuale

Sistema per scambi/cessioni di Gas al Punto di Scambio Virtuale Sistema per scambi/cessioni di Gas al Punto di Scambio Virtuale Modulo Bacheca 1 INDICE 1 Generalità...3 2 Accesso al sistema...4 2.1 Requisiti tecnici 5 3 Elenco funzioni e tasti di navigazione...6 3.1

Dettagli

1 Copyright ChateXpert

1 Copyright ChateXpert Manuale D Uso di ChateXpert FREE 1 Copyright ChateXpert Per in inserire uno dei nostri servizi di community nel proprio sito è necessario prima registrarsi sul sito di ChateXpert.it http://www.chatexpert.it/planet/webmaster.asp

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

Guida Compilazione Piani di Studio on-line

Guida Compilazione Piani di Studio on-line Guida Compilazione Piani di Studio on-line SIA (Sistemi Informativi d Ateneo) Visualizzazione e presentazione piani di studio ordinamento 509 e 270 Università della Calabria (Unità organizzativa complessa-

Dettagli

STUDIUM.UniCT Tutorial per gli studenti

STUDIUM.UniCT Tutorial per gli studenti STUDIUM.UniCT Tutorial per gli studenti Studium.UniCT Tutorial Studenti v. 6 06/03/2014 Pagina 1 Sommario 1. COS È STUDIUM.UniCT... 3 2. COME ACCEDERE A STUDIUM.UniCT... 3 3. COME PERSONALIZZARE IL PROFILO...

Dettagli

Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008

Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008 Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008 Si consideri una rete di sensori MicaZ con sistema operativo TinyOS, dove ogni nodo è identificato da un ID unico e dove è presente un solo

Dettagli

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI

UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI UTILIZZATORI A VALLE: COME RENDERE NOTI GLI USI AI FORNITORI Un utilizzatore a valle di sostanze chimiche dovrebbe informare i propri fornitori riguardo al suo utilizzo delle sostanze (come tali o all

Dettagli

Product Shipping Cost Guida d'installazione ed Utilizzo

Product Shipping Cost Guida d'installazione ed Utilizzo Guida d'installazione ed Utilizzo Installazione Per installare il modulo è sufficiente copiare la cartella app del pacchetto del modulo nella cartella principale dell'installazione di Magento dove è già

Dettagli

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Funzioni di Esportazione Importazione 1 Indice AIRONE GESTIONE RIFIUTI... 1 FUNZIONI DI ESPORTAZIONE E IMPORTAZIONE... 1 INDICE...

Dettagli

Pronto Esecuzione Attesa Terminazione

Pronto Esecuzione Attesa Terminazione Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma

Dettagli

Mac Application Manager 1.3 (SOLO PER TIGER)

Mac Application Manager 1.3 (SOLO PER TIGER) Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Installazione del software Fiery per Windows e Macintosh

Installazione del software Fiery per Windows e Macintosh 13 Installazione del software Fiery per Windows e Macintosh Il CD del Software per l utente comprende le utilità di installazione di Fiery Link. Il software di utilità Fiery è supportato in Windows 95/98,

Dettagli

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise Manuale Amministratore Legalmail Enterprise Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise Pagina 2 di 16 Manuale Amministratore Legalmail Enterprise Introduzione a Legalmail Enterprise...3

Dettagli

PORTALE CLIENTI Manuale utente

PORTALE CLIENTI Manuale utente PORTALE CLIENTI Manuale utente Sommario 1. Accesso al portale 2. Home Page e login 3. Area riservata 4. Pagina dettaglio procedura 5. Pagina dettaglio programma 6. Installazione dei programmi Sistema operativo

Dettagli

Corso di Reti di Calcolatori T

Corso di Reti di Calcolatori T Università degli Studi di Bologna Scuola di Ingegneria Corso di Reti di Calcolatori T Esercitazione 2 (proposta) Socket Java con connessione Luca Foschini Anno accademico 2015/2016 Esercitazione 2 1 Specifica

Dettagli

Manuale Utente Albo Pretorio GA

Manuale Utente Albo Pretorio GA Manuale Utente Albo Pretorio GA IDENTIFICATIVO DOCUMENTO MU_ALBOPRETORIO-GA_1.4 Versione 1.4 Data edizione 04.04.2013 1 TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione delle modifiche apportate

Dettagli

GESGOLF SMS ONLINE. Manuale per l utente

GESGOLF SMS ONLINE. Manuale per l utente GESGOLF SMS ONLINE Manuale per l utente Procedura di registrazione 1 Accesso al servizio 3 Personalizzazione della propria base dati 4 Gestione dei contatti 6 Ricerca dei contatti 6 Modifica di un nominativo

Dettagli

Gestione degli appelli e verbalizzazione degli esami online GUIDA DOCENTI. (versione 1.0 del 26.11.2014)

Gestione degli appelli e verbalizzazione degli esami online GUIDA DOCENTI. (versione 1.0 del 26.11.2014) Gestione degli appelli e verbalizzazione degli esami online GUIDA DOCENTI (versione 1.0 del 26.11.2014) INDICE 1. LOGIN... 3 2. VISUALIZZAZIONE APPELLI... 4 3. DEFINIZIONE APPELLI... 4 4. GESTIONE LISTA

Dettagli

STAMPA DI UNA PAGINA SEMPLICE

STAMPA DI UNA PAGINA SEMPLICE Pagina 11 copiati nel proprio sistema (disco fisso o floppy). Questa operazione è detta download o scaricamento. Il modo più semplice per effettuare un download di un file (a meno che non sia specificato

Dettagli

Telematica II 17. Esercitazione/Laboratorio 6

Telematica II 17. Esercitazione/Laboratorio 6 Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che

Dettagli

MANUALE PER LA GESTIONE DEL SERVIZIO DI NEWSLETTER

MANUALE PER LA GESTIONE DEL SERVIZIO DI NEWSLETTER MANUALE PER LA GESTIONE DEL SERVIZIO DI NEWSLETTER HNewsletter: Servizio di Newsletter HNewsletter è un applicazione che permette di inviare un solo messaggio di posta elettronica ad un elenco di indirizzi

Dettagli

Java Virtual Machine

Java Virtual Machine Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina

Dettagli

Manuale Servizio NEWSLETTER

Manuale Servizio NEWSLETTER Manuale Servizio NEWSLETTER Manuale Utente Newsletter MMU-05 REDAZIONE Revisione Redatto da Funzione Data Approvato da Funzione Data 00 Silvia Governatori Analista funzionale 28/01/2011 Lorenzo Bonelli

Dettagli

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software

Dettagli

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste versione 2.1 24/09/2015 aggiornamenti: 23-set-2015; 24-set-2015 Autore: Francesco Brunetta (http://www.francescobrunetta.it/)

Dettagli

Manuale Utente Amministrazione Trasparente GA

Manuale Utente Amministrazione Trasparente GA Manuale Utente GA IDENTIFICATIVO DOCUMENTO MU_AMMINISTRAZIONETRASPARENTE-GA_1.0 Versione 1.0 Data edizione 03.05.2013 1 Albo Pretorio On Line TABELLA DELLE VERSIONI Versione Data Paragrafo Descrizione

Dettagli

Configurazione di Outlook Express

Configurazione di Outlook Express OUTLOOK Outlook Express è il client di posta elettronica sviluppato da Microsoft, preinstallato su sistemi operativi Windows a partire da Windows 98 fino all'uscita di Windows XP. Con l'arrivo di Windows

Dettagli

MANUALE UTENTE Fiscali Free

MANUALE UTENTE Fiscali Free MANUALE UTENTE Fiscali Free Le informazioni contenute in questa pubblicazione sono soggette a modifiche da parte della ComputerNetRimini. Il software descritto in questa pubblicazione viene rilasciato

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8

Manuale servizio Webmail. Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8 Manuale servizio Webmail Introduzione alle Webmail...2 Webmail classica (SquirrelMail)...3 Webmail nuova (RoundCube)...8 Introduzione alle Webmail Una Webmail è un sistema molto comodo per consultare la

Dettagli

Un esercizio d esame. Flavio De Paoli

Un esercizio d esame. Flavio De Paoli Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori

Dettagli

Il web server Apache Lezione n. 3. Introduzione

Il web server Apache Lezione n. 3. Introduzione Procurarsi ed installare il web server Apache Introduzione In questa lezione cominciamo a fare un po di pratica facendo una serie di operazioni preliminari, necessarie per iniziare a lavorare. In particolar

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. Esercitazione. Programmazione Object Oriented in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Programmazione Object Oriented in Java

Dettagli

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Manuale utente. Manuale utente per la fruizione del corso. (Aggiornato agosto 2011) Page 1 of 20

Manuale utente. Manuale utente per la fruizione del corso. (Aggiornato agosto 2011) Page 1 of 20 Manuale utente Manuale utente per la fruizione del corso (Aggiornato agosto 2011) Page 1 of 20 INDICE Introduzione... 3 Accesso alla piattaforma... 3 Ritornare alla Home... 4 Eseguire Logout... 4 Modificare

Dettagli

Guida all utilizzo della Piattaforma per la staffetta di Scrittura Creativa 2015-16. Manuale pratico per docenti e tutor

Guida all utilizzo della Piattaforma per la staffetta di Scrittura Creativa 2015-16. Manuale pratico per docenti e tutor Guida all utilizzo della Piattaforma per la staffetta di Scrittura Creativa 2015-16 Manuale pratico per docenti e tutor Sommario Sommario Primo utilizzo... 3 Ricezione della mail con il nome utente e creazione

Dettagli

Manuale Gestore. STWS Web Energy Control - Servizio di telelettura sul WEB

Manuale Gestore. STWS Web Energy Control - Servizio di telelettura sul WEB Manuale Gestore STWS Web Energy Control - Servizio di telelettura sul WEB SOMMARIO 1.0 PRESENTAZIONE... 4 2.0 UTENTI... 4 2.1 GESTORE... 4 2.2 AMMINISTRATORE DI CONDOMINIO... 4 2.3 INQUILINO... 4 3.0

Dettagli

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. ESERCIZIARIO Risposte ai quesiti: 10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress. 10.2. Un numero intero in Java è compreso nell'intervallo ( 2 31 ) e (2 31

Dettagli

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010) Sapienza - Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica, Ingegneria dei Sistemi Informatici Esercitazioni

Dettagli

Gestione dei servizi all utenza. 3. Autorizzazioni

Gestione dei servizi all utenza. 3. Autorizzazioni Istituto Centrale per il Catalogo Unico delle Biblioteche Italiane e per le Informazioni bibliografiche Manuali utente per SBN WEB Gestione dei servizi all utenza 3. Autorizzazioni 1 2 1. Introduzione

Dettagli

DIPARTIMENTO DI SCIENZE DEL FARMACO. Prenotazione degli Appelli d esame Online. Guida Studenti VOL. Verbalizzazione OnLine.

DIPARTIMENTO DI SCIENZE DEL FARMACO. Prenotazione degli Appelli d esame Online. Guida Studenti VOL. Verbalizzazione OnLine. DIPARTIMENTO DI SCIENZE DEL FARMACO Prenotazione degli Appelli d esame Online Guida Studenti VOL Verbalizzazione OnLine degli esami 1 INDICE 1. INTRODUZIONE... 3 2. ACCESSO AREA WEB RISERVATA... 3 3. SEZIONE

Dettagli

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008) Introduzione a Java: primo programma, installazione dell ambiente di sviluppo, compilazione ed esecuzione 1 Introduzione Java è un linguaggio

Dettagli

Verbalizzazione e Firma Digitale

Verbalizzazione e Firma Digitale Verbalizzazione e Firma Digitale Area Docente Indice Premessa... 2 1 Tipologie di verbalizzazione online disponibili... 3 2 Test di firma in Esse 3... 4 3 Informazioni generali... 6 4 Gestione lista iscritti...

Dettagli

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. *+33(GLWRU GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. Il programma si basa su un architettura di tasti funzionali presenti

Dettagli

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0 Prodotto Inaz Download Manager Release 1.3.0 Tipo release COMPLETA RIEPILOGO ARGOMENTI 1. Introduzione... 2 2. Architettura... 3 3. Configurazione... 4 3.1 Parametri di connessione a Internet... 4 3.2

Dettagli

filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44

filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44 filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44 Sommario Introduzione... 4 Caratteristiche del filrbox... 5 La barra principale del filrbox... 7 Elenco degli utenti... 8 Il profilo... 9 Le novità...

Dettagli

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito) Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito) Le seguenti istruzioni sono relative all installazione di IBM SPSS Modeler Text Analytics versione 15 mediante un licenza

Dettagli

Omnia Web Timesheet. Manuale utente

Omnia Web Timesheet. Manuale utente Omnia Web Timesheet Manuale utente Revisioni Data Versione Autore Note 01.03.2011 1.0 Alberto Fedrici Prima release 08.05.2010 1.1 Alberto Fedrici Funzionalità inserimento note Indice 1. Introduzione...

Dettagli

Gestione dell account AdWords di Google Guida pratica

Gestione dell account AdWords di Google Guida pratica Gestione dell account AdWords di Google Guida pratica Benvenuti in AdWords di Google Questa guida fornisce una panoramica del Centro di controllo gestionale AdWords, l interfaccia per la gestione e il

Dettagli

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini. Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio

Dettagli

Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE

Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE Si tratta della funzione che consente di generare il file in formato testo (.TXT) che permette la spedizione all Agenzia

Dettagli

Guida Studenti per i servizi online: compilazione dei questionari per la valutazione della didattica Iscrizione agli appelli

Guida Studenti per i servizi online: compilazione dei questionari per la valutazione della didattica Iscrizione agli appelli Guida Studenti per i servizi online: compilazione dei questionari per la valutazione della didattica Iscrizione agli appelli v 4.0 1. Requisiti software Lo studente deve essere dotato di connessione internet

Dettagli

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità: 7 Esercitazione (svolta): due possibilità: Java RMI: callback Molte applicazioni richiedono un meccanismo publish/subscribe I partecipanti (client) necessitano di notifiche da parte del coordinatore (server)

Dettagli

filrbox Guida all uso dell applicazione DESKTOP Pag. 1 di 27

filrbox Guida all uso dell applicazione DESKTOP Pag. 1 di 27 filrbox Guida all uso dell applicazione DESKTOP Pag. 1 di 27 Sommario Introduzione... 3 Download dell applicazione Desktop... 4 Scelta della versione da installare... 5 Installazione... 6 Installazione

Dettagli

MANUALE ESSE3. Iscrizione alle prove d esame e visione esiti STUDENTI

MANUALE ESSE3. Iscrizione alle prove d esame e visione esiti STUDENTI MANUALE ESSE3 Iscrizione alle prove d esame e visione esiti STUDENTI 1 INDICE 1. TIPOLOGIE DI PROVE D ESAME IN ESSE3 E OPERAZIONI DEGLI STUDENTI... 3 1.1. Prove d esame in Esse3... 3 1.2. Operazioni richieste

Dettagli

Università degli Studi di Messina

Università degli Studi di Messina Università degli Studi di Messina Guida alla Rendicontazione on-line delle Attività del Docente Versione della revisione: 2.02/2013-07 A cura di: Fabio Adelardi Università degli studi di Messina Centro

Dettagli

GateManager. 1 Indice. tecnico@gate-manager.it

GateManager. 1 Indice. tecnico@gate-manager.it 1 Indice 1 Indice... 1 2 Introduzione... 2 3 Cosa vi serve per cominciare... 2 4 La Console di amministrazione... 2 5 Avviare la Console di amministrazione... 3 6 Come connettersi alla Console... 3 7 Creare

Dettagli

GUIDA UTENTE MONEY TRANSFER MANAGER

GUIDA UTENTE MONEY TRANSFER MANAGER GUIDA UTENTE MONEY TRANSFER MANAGER (vers. 1.0.2) GUIDA UTENTE MONEY TRANSFER MANAGER (vers. 1.0.2)... 1 Installazione... 2 Prima esecuzione... 5 Login... 7 Funzionalità... 8 Anagrafica... 9 Registrazione

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005 Studente (Cognome Nome): Matricola: Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a. 2005-06 Secondo Compitino 17 Dicembre 2005 Si noti che le soluzioni ai quesiti saranno considerate

Dettagli

EXCEL FUNZIONI PRINCIPALI

EXCEL FUNZIONI PRINCIPALI EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")

Dettagli

Integrazione InfiniteCRM - MailUp

Integrazione InfiniteCRM - MailUp Integrazione InfiniteCRM - MailUp La funzionalità della gestione delle campagne marketing di icrm è stata arricchita con la spedizione di email attraverso l integrazione con la piattaforma MailUp. Creando

Dettagli