TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB CON LABORATORIOModulo TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
Anno accademico 2022/2023 - Docente: Giuseppe PAPPALARDORisultati 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
- semantica dell'invocazione remota
- linguaggi IDL di descrizione dell'interfaccia
- generazione di stub per l'invocazione remota
- RPC e RMI
- API dei thread Linux: creazione e gestione dei thread e dei loro attributi
- mutua esclusione e locking
- variabili di condizione e monitor
- classe Thread e API del JDK per la creazione e gestione dei thread
- interfaccia Runnable
- 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
- Le Java Server Pages
- Linguaggio e ambiente PHP
- 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
- MVC e separazione dei concern
- il ruolo del cliente (browser): ricchi e poveri
- Laravel MVC
- clienti Javascript
- clienti thin
Testi di riferimento
- Note del docente (pubblicate attraverso il portale Studium, documentano puntualmente il materiale presentato)
- Deitel H. M., Deitel P. J. Java: Tecniche avanzate di programmazione. Apogeo (in biblioteca).
- Documentazione online Java, https://docs.oracle.com/javase/tutorial/
- Documentazione online Java Enterprise Edition, Tutorial Jakarta EE
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 la resolver. | 1 |
5 | Socket: Comunicazione connectionless. send() e receive(). | 1 |
6 | Socket in linguaggio Java. | 1,2,3 |
7 | Java: Remote Method Invocation | 2,3 |
8 | Remote Procedure Call in C | 1 |
9 | Java Servlets | 1,4 |
10 | Web Application: principi e concetti | 1,4 |
11 | Web services: SOAP | 1 |
12 | Web services: REST con JSON | 1 |
13 | Sviluppo di API REST con Spring Boot | 1 |
14 | Sviluppo in PHP | 1 |
15 | Laravel MVC | 1 |
16 | 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
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.