MATEMATICA E INFORMATICAInformaticaAnno accademico 2022/2023
1010978 - TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB CON LABORATORIO
Modulo 1010980 - LABORATORIO
Docente: SALVATORE NICOTRA
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).
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
Programmazione del corso
| Argomenti | Riferimenti testi |
1 | Introduzione ai sistemi concorrenti e distribuiti e al corso. | 1 |
2 | Socket: introduzione e system call principali. | 1 |
3 | Socket: Cliente di esempio. Semantica di read() e write(). Socket non bloccanti. | 1 |
4 | Socket: Indirizzi IP e delle socket. DNS e interfaccia al resolver. | 1 |
5 | Socket: Comunicazione connectionless. send() e receive(). | 1 |
6 | Socket in linguaggio Java. | 1,2,3 |
7 | Java Servlets | 1,4 |
8 | Web Application: principi e concetti | 1,4 |
9 | Web services: REST con JSON | 1 |
10 | Sviluppo in PHP | 1 |
11 | Sviluppo di API REST con Spring Boot | 1 |
12 | Sviluppo in PHP | 1 |
13 | Laravel MVC | 1 |
14 | Sviluppo di client per il web e API web | 1 |
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.
English version