TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB CON LABORATORIO
Modulo TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB

Anno accademico 2022/2023 - Docente: Giuseppe PAPPALARDO

Risultati di apprendimento attesi

Il corso di Tecnologie per i sistemi distribuiti e il Web, con il modulo di Laboratorio integrato, mira a fornire i fondamenti concettuali di base e le capacità operative necessarie per lo sviluppo di applicazioni Web e, più in generale, distribuite. Verranno presentate le soluzioni architetturali tipiche, ovvero i paradigmi client-server, delle chiamate remote di procedura, del web dinamico, degli handler di richieste HTTP (servlet), il pattern MVC (Model-View-Controller) e le applicazioni Web basate su API REST.  Le tecnologie di sviluppo presentate si basano sulle piattaforme C/Unix e Java e, per il Web, Java e PHP (con eventuali framework a corredo).

Obiettivi formativi generali in termini di risultati di apprendimento attesi

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 costruire un efficace bagaglio di competenze, necessarie per affrontare progettazione e sviluppo di sistemi distribuiti e applicazioni Web mediante le tecnologie correnti. Tali capacità saranno ulteriormente coltivate e potenziate grazie alle esercitazioni previste e nel modulo di laboratorio di questo corso.
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 delle applicazioni 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), anche al fine di applicare le informazioni acquisite in contesti concreti e di adeguare le proprie abilità a nuovi scenari applicativi o a un mutato contesto tecnologico.

Modalità di svolgimento dell'insegnamento

Lezioni ed esercitazioni si svolgono in aule-laboratorio, nelle quali gli studenti possono utilizzare i PC disponibili o il proprio PC portatile. Le lezioni consistono prevalentemente in sessioni live, operate dal docente, di sviluppo di applicazioni distribuite e per il Web mediante le tecnologie presentate. Come cornice e guida di tali sessioni, vengono proiettate delle note, interamente condivise con gli studenti attraverso il portale Studium. Nelle esercitazioni, gli studenti sono vivamente incoraggiati a studiare, modificare ed innovare il materiale presentato dal docente durante le sessioni.
Per quanto le note delle lezioni non ambiscano a costituire un testo di riferimento, esse sono intese, oltre che ad agevolare la comprensione, a fornire un dettaglio puntuale del materiale presentato e della documentazione tecnica da consultare quale riferimento.

Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.

Prerequisiti richiesti

  • Capacità di pensare in termini algoritmici (corsi di Programmazione 1 e Programmazione 2)
  • 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)

Frequenza lezioni

La frequenza è vivamente consigliata, dato anche l'orientamento pratico dell'attività didattica, per il raggiungimento di una piena comprensione di materiale, concetti e principi presentati.

Contenuti del corso

Verranno presentati, a livello di concetti, paradigmi e aspetti architetturali, gli argomenti elencati di seguito.

Si prega inoltre di tenere presente che le note del docente, pubblicate attraverso il portale Studium o il portale Teams d'ateneo documentano fedelmente e in dettaglio gli argomenti svolti e, di conseguenza, i contenuti del corso.
NB: il repository delle note è unico per questo modulo e quello di laboratorio.

Applicazioni client-server basate su socket

  • ​comunicazione connection-oriented e connectionless
  • gestione della connessione
  • semantica della comunicazione
  • socket nel dominio internet (indirizzi IP e DNS)
  • system call Unix e API Java
Applicazioni client-server basate su invocazioni remote di codice
  • semantica dell'invocazione remota
  • linguaggi IDL di descrizione dell'interfaccia
  • generazione di stub per l'invocazione remota
  • RPC e RMI
Thread Linux in C
  • API dei thread Linux: creazione e gestione dei thread e dei loro attributi
  • mutua esclusione e locking
  • variabili di condizione e monitor
Thread Java
  • classe Thread e API del JDK per la creazione e gestione dei thread
  • interfaccia Runnable
Architettura 3-tier per un sistema distribuito
  • il tier 1: il browser cliente
  • la business logic e il tier 2 (web/application server)
  • il tier 3: il back-end database
  • Servlet e web application
  • la classe Servlet come handler di richieste HTTP
  • la API Servlet: principali metodi di gestione e configurazione
  • gestione di Cookie e Sessioni
  • struttura e principi fondativi di una Web Application
  • IDE e servlet engine
Il Web dinamico: concetti e tecnologie
  • Le Java Server Pages
  • Linguaggio e ambiente PHP
Web services (WS) SOAP e REST
  • Interfaccia al WS basata sull'invocazione di metodi
  • Interfaccia al WS basata su URL e filosofia REST
  • Linguaggi di interscambio: XML/SOAP e JSON
  • sviluppo SOAP in Java
  • Java Spring Boot
Il pattern Model-View-Controller (MVC) per le Web application
  • MVC e separazione dei concern
  • il ruolo del cliente (browser): ricchi e poveri
  • Laravel MVC
API http
  • clienti Javascript
  • clienti thin

Testi di riferimento

  1. Note del docente (pubblicate attraverso il portale Studium, documentano puntualmente il materiale presentato)
  2. Deitel H. M., Deitel P. J. Java: Tecniche avanzate di programmazione. Apogeo (in biblioteca).
  3. Documentazione online Java, https://docs.oracle.com/javase/tutorial/
  4. Documentazione online Java Enterprise Edition, Tutorial Jakarta EE

Programmazione del corso

 ArgomentiRiferimenti testi
1Introduzione ai sistemi concorrenti e distribuiti e al corso.1
2Socket: introduzione e system call principali.1
3Socket: Cliente di esempio. Semantica di read() e write(). Socket non bloccanti.1
4Socket: Indirizzi IP e delle socket. DNS e interfaccia la resolver.1
5Socket: Comunicazione connectionless. send() e receive().1
6Socket in linguaggio Java.1,2,3
7Java: Remote Method Invocation2,3
8Remote Procedure Call in C1
9Java Servlets1,4
10Web Application: principi e concetti1,4
11Web services: SOAP1
12Web services: REST con JSON1
13Sviluppo di API REST con Spring Boot1
14Sviluppo in PHP1
15Laravel MVC1
16Sviluppo di client per il web e API web1

Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

Colloquio orale sugli argomenti del corso, a partire dalla correzione e discussione delle prove di laboratorio svolte e superate in precedenza. 

La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.

Esempi di domande e/o esercizi frequenti

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.
Caratteristiche del linguaggio PHP.
Il pattern MVC nei framework Spring Boot e Laravel.