TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB CON LABORATORIO

Anno accademico 2018/2019 - 3° anno - Curriculum B
Docenti Crediti: 9
SSD: INF/01 - Informatica
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 36 di lezione frontale, 24 di esercitazione, 12 di laboratorio
Semestre:

Obiettivi formativi

  • TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB

    Conoscenza e capacità di comprensione (knowledge and understanding): verrano acquisite conoscenza e comprensione dei fondamenti concettuali (nozioni di base e architetturali, principali classi di problemi) su cui poggiano le soluzioni di impiego corrente per lo sviluppo dei sistemi distribuiti e, in particolare, delle applicazioni web lato server.
    Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente sarà in grado di impiegare soluzioni e paradigmi appresi nel corso, in modo da costituire un efficace bagaglio di competenze, necessarie per la progettazione di sistemi distribuiti e applicazioni Web lato server.
    Autonomia di giudizio (making judgements): lo studente sarà in grado di valutare comparativamente i meriti e i limiti delle soluzioni di impiego corrente, nell'industria del software, per le problematiche e gli scenari tipici della progettazione distribuita e Web (lato server).
    Abilità comunicative (communication skills): lo studente apprenderà terminologia e paradigmi specifici dei sistemi distribuiti e dello sviluppo Web lato server e acquisirà le abilità comunicative appropriate per esprimere e discutere, ad un livello tecnico rigoroso, le problematiche di interesse.
    Capacità di apprendimento (learning skills): lo studente sarà in grado di documentarsi e approfondire le proprie conoscenze mediante la consultazione delle fonti disponibili (libri di testo e/o risorse on line), eventualmente applicando le informazioni acquisite in contesti concreti.

  • LABORATORIO

    Conoscenza e capacità di comprensione (knowledge and understanding): verrano acquisite conoscenza e comprensione delle principali tecnologie per lo sviluppo di sistemi distribuiti e, in particolare, delle applicazioni web lato server.
    Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente sarà in grado di impiegare le tecnologie introdotte e sperimentate nel corso, in modo da acquisire capacità operative e progettuali nello sviluppo e gestione di sistemi distribuiti e applicazioni web (lato server).
    Autonomia di giudizio (making judgements): lo studente sarà in grado di valutare comparativamente i vantaggi e i limiti delle principali tecnologie disponibili per sviluppo e gestione di sistemi distribuiti e web (lato server).
    Abilità comunicative (communication skills): lo studente apprenderà la terminologia specifica dei sistemi distribuiti e web e acquisirà le abilità comunicative appropriate per esprimere e discutere, ad un livello tecnico rigoroso, le problematiche di interesse.
    Capacità di apprendimento (learning skills): lo studente sarà in grado di utilizzare la documentazione tecnica delle soluzioni e tecnologie di uso corrente per i sistemi distribuiti e web, al fine di impiegarle concretamente nelle attività di amministrazione e sviluppo.


Modalità di svolgimento dell'insegnamento

  • TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB

    Lezioni frontali in aula

  • LABORATORIO

    Sessioni di laboratorio con esercitazioni


Prerequisiti richiesti

  • TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
    • Capacità di pensare in termini algoritmici (corso di Programmazione)
    • Conoscenza di problematiche e soluzioni della programmazione concorrente (trattata nel corso di Sistemi Operativi)
    • Conoscenza dei principali concetti, meccanismi e protocolli della rete Internet (corso di Reti di calcolatori)
  • LABORATORIO
    • Conoscenza dei linguaggi C e Java.
    • Capacità di sviluppo di codice di natura sistemistica nei linguaggi C e Java.
    • Conoscenza operativa dei sistemi Unix.
    • Conoscenza delle principali system call Unix
    • Conoscenza di problematiche e soluzioni della programmazione concorrente

Frequenza lezioni

  • TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB

    Consigliata, per il raggiungimento di una piena comprensione del materiale presentato.

  • LABORATORIO

    Fortemente consigliata, per il raggiungimento di una piena capacità operativa mediante le tecnologie presentate.


Contenuti del corso

  • TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB

    Verranno presentati, a livello di concetti, paradigmi e aspetti architetturali, i seguenti argomenti:

    • Applicazioni client-server basate su socket
    • Applicazioni client-server basate su invocazioni remote di codice
    • Thread Linux in C
    • Thread Java
    • Architettura 3-tier per un sistema distribuito: client, web/application server e back-end database
    • Servlet e web application
    • Web services SOAP e REST
  • LABORATORIO

    Verranno presentati, puntando a conferire agli allievi capacità operative e di sviluppo, i seguenti argomenti:

    • Sviluppo in C e Java di sistemi client-server basate su socket
    • Sviluppo di applicazioni client-server basate su invocazioni remote di codice, in C (RPC Sun) e Java (RMI)
    • Programmazione multithreaded in C sotto Linux e Java
    • Sviluppo di applicazioni Web e servlet anche con IDE Netbeans/Eclipse
    • Deployment di applicazioni Web con l'application server Apache Tomcat
    • Web services SOAP e REST
    • Pattern MVC e servizi REST
    • Linguaggio e librerie Python per thin client

Testi di riferimento


Programmazione del corso

TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
 ArgomentiRiferimenti testi
1Introduzione ai sistemi concorrenti e distribuiti e al corso.
2Socket: introduzione e system call principali.
3Socket: Cliente di esempio. Semantica di read() e write(). Socket non bloccanti.
4Socket: Indirizzi IP e delle socket. DNS e interfaccia la resolver.
5Socket: Comunicazione connectionless. send() e receive().
6Socket in linguaggio Java.1,2,3 
7Java: Remote Method Invocation2,3 
8Remote Procedure Call in C
9Java Servlet: concetti1,4 
10Web Application: principi e concetti1,4 
11Web services: SOAP
12Web services: REST con JSON
LABORATORIO
 ArgomentiRiferimenti testi
1Sviluppo di un server parallelo mediante socket
2Sviluppo di un sistema client-server con protocollo applicativo mediante socket
3Sviluppo di un sistema client-server con Remote Procedure Call RPC Sun
4Impiego della socket API Java1,2,3 
5Sviluppo di un sistema client-server con Remote Method Invocation RMI Java1,2,3 
6Sviluppo di applicazioni multi-threaded in ambiente Linux
7Sviluppo di applicazioni multi-threaded Java1,2,3 
8Sviluppo di una Web Application1,4 
9Le servlet Java1,2,4 
10L'application server Apache Tomcat e il deployment delle Web App1,4 
11Il backend (database) di una Web App: tecnologie Java1,2,4 
12Sviluppo di Web App nell'ambiente IDE Netbeans
13Sviluppo di Web App nell'ambiente IDE Eclipse
14Sviluppo di Web Services SOAP
15Sviluppo di Web Services REST e linguaggio di interscambio JSON
16Sviluppo di thin client in linguaggio Python
17Pattern MVC per lo sviluppo di Web App

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

  • TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB

    Discussione orale degli argomenti del corso a partire dalla correzione della prova di laboratorio.

  • LABORATORIO

    Prove di laboratorio, consistenti nell'implementazione di codice che faccia ricorso alle tecnologie presentate nel corso (nel suo complesso).


Esempi di domande e/o esercizi frequenti

  • TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
    • Sistemi client-server basati su socket.
    • Uso dei thread Posix.
    • Architettura 3-tier per un sistema distribuito.
    • Sviluppo di applicazioni Web server-side, mediante servlet.
    • Impiego di ambienti integrati di sviluppo.
    • Servlet e servlet container
    • Web application
    • Costruzione e utilizzo di web services SOAP e REST.
    • Formato di interscambio JSON.
  • LABORATORIO

    Nello svolgimento delle prove di laboratorio, viene richiesto di realizzare semplici sistemi client-server che Impieghino le tecnologie presentate nel corso. Seguono alcuni esempi di prove d'esame già assegnate .

    • Esercizio: sistema client-server con socket:https://goo.gl/hMglE5
    • Esercizio: sistema client-server con socket: https://goo.gl/GDhFpr
    • Esercizio di sincronizzazione di thread: https://goo.gl/VdR7om
    • Esercizio di sincronizzazione di thread: https://goo.gl/9sDeUV
    • Implementare un web service WsReverse che espone l’interfaccia String reverse(String s), che restituisce la stringa inversa della stringa argomento s. Esempio: invocando reverse("casa") la stringa restituita sarà "asac”. Usare Glassfish come server.
    • Implementare una servlet che funga da cliente per consumare il web service WsReverse, invocandone l'unico metodo. Usare Tomcat come servlet container.
    • Altri esempi di esercizi su web services e servlet: https://goo.gl/pi3ZvK
    • Altri esempi di esercizi su web services e servlet: https://goo.gl/IxI9mg