TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB CON LABORATORIO
Anno accademico 2019/2020 - 3° anno - Curriculum B- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB: Giuseppe PAPPALARDO
- LABORATORIO: Giuseppe PAPPALARDO
Organizzazione didattica: 225 ore d'impegno totale, 153 di studio individuale, 36 di lezione frontale, 24 di esercitazione, 12 di laboratorio
Semestre: 1°
Obiettivi formativi
- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
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. - 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 nella progettazione e nello sviluppo di sistemi distribuiti e, in specie, 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 impiegata nella progettazione e nello sviluppo dei sistemi distribuiti e 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 consultare e utilizzare la documentazione tecnica riguardante le soluzioni e tecnologie di uso corrente per i sistemi distribuiti e web, al fine di impiegarle concretamente nelle attività di amministrazione e sviluppo eventualmente adeguandole, ove richiesto, a nuovi scenari applicativi o a un mutato contesto tecnologico.
Modalità di svolgimento dell'insegnamento
- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
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. - LABORATORIO
L'attività proposta è organizzata in sessioni di laboratorio svolte sotto la guida del docente. Gli allievi sono chiamati a replicare le esercitazioni svolte, a modificarle in maniera mirata e ad affrontare esercizi di progettazione e sviluppo concepiti sulla falsariga di quelli presentati nel corso. L'attività proposta mira ad approfondire la comprensione delle tecnologie impiegate e a far sì che l'allievo acquisisca autonome capacità operative e progettuali.
Prerequisiti richiesti
- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
- 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)
- LABORATORIO
- Conoscenza dei linguaggi di programmazione C e Java.
- Capacità di sviluppo di codice di natura sistemistica in C e Java.
- Conoscenza operativa dei sistemi Unix e della shell, compresi elementi di amministrazione Unix
- Conoscenza delle principali system call Unix
- Conoscenza dei principali problemi della programmazione concorrente e della codifica in C e Java delle rispettive soluzioni.
Frequenza lezioni
- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
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.
- LABORATORIO
La frequenza è vivamente raccomandata, al fine di conseguire una piena capacità operativa nell'impiego sul campo delle tecnologie presentate.
Contenuti del corso
- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
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, 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)
- 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
- 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
- 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
- Il pattern Model-View-Controller (MVC) per le Web application
- MVC e separazione dei concern
- il ruolo del cliente (browser): ricchi e poveri
- Applicazioni client-server basate su socket
- LABORATORIO
Verranno presentati, puntando a conferire agli allievi capacità operative e di sviluppo, gli argomenti elencati di seguito.
Si prega inoltre di tenere presente che le note del docente, pubblicate attraverso il portale Studium (in un repository unico per entrambi i moduli dell'insegnamento), documentano puntualmente e in dettaglio gli argomenti svolti.
- Sviluppo in C e Java di sistemi client-server basate su socket
- API e system call Unix per la gestione delle socket: connessione e scambio dati
- API per la gestione degli indirizzi e del DNS
- sviluppo di semplici client e server di esempio
- sviluppo di un server parallelo multi-process
- protocollo client-server: esempio di progettazione
- API del JDK Java per socket datagram e stream
- Sviluppo di applicazioni client-server basate su invocazioni remote di codice
- Remote Procedure Call (RPC) in C
- Remote Method Invocation (RMI) in Java
- Programmazione multithreaded in C/Linux e Java
- sviluppo di applicazioni multi-threaded in C
- gestione dei parametri con i thread di Linux
- esempi multi-threaded in C e Java
- programmazione di un sistema produttore-consumatore in C e Java
- Sviluppo di applicazioni Web Java e servlet: gli IDE Netbeans ed Eclipse
- esempi di uso di Netbeans: sviluppo di servlet e altre Web application
- esempi di uso di Eclipse
- Accesso a database da Web App Java
- accesso da Java: JDBC, Derby, JPA e Hibernate
- mysql: installazione e configurazione
- Deployment di applicazioni Web con l'application server Apache Tomcat
- installazione e configurazione
- deployment di Web App con Tomcat
- Web services (WS) SOAP e REST: sviluppo e consumo
- sviluppo di un WS SOAP con Netbeans
- sviluppo di un cliente per WS SOAP con Netbeans
- sviluppo di un servizio REST con Netbeans
- Elementi di PHP per il Web
- ambiente PHP
- linguaggio PHP
- query SQL in PHP
- PHP e oggetti
- Pattern MVC e servizi REST
- Java e il framework Spring Boot
- PHP e il framework Laravel
- Altre soluzioni architetturali per il Web
- Sviluppo di Web API in Laravel (JSON e REST)
- Client e framework per la fruizione di API REST
- Thin client Python
- Sviluppo in C e Java di sistemi client-server basate su socket
Testi di riferimento
- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
- 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
- LABORATORIO
- 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
TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB | |||
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 Servlet: concetti | 1,4 | |
10 | Web Application: principi e concetti | 1,4 | |
11 | Web services: SOAP | 1 | |
12 | Web services: REST con JSON | 1 | |
LABORATORIO | |||
Argomenti | Riferimenti testi | ||
1 | Sviluppo di un server parallelo mediante socket | 1 | |
2 | Sviluppo di un sistema client-server con protocollo applicativo mediante socket | 1 | |
3 | Impiego della socket API Java | 1,2,3 | |
4 | Sviluppo di un sistema client-server con Remote Procedure Call RPC Sun | 1 | |
5 | Sviluppo di un sistema client-server con Remote Method Invocation RMI Java | 1,2,3 | |
6 | Sviluppo di applicazioni multi-threaded in ambiente Linux | 1 | |
7 | Sviluppo di applicazioni multi-threaded Java | 1,2,3 | |
8 | Sviluppo di una Web Application | 1,4 | |
9 | Le servlet Java | 1,2,4 | |
10 | L'application server Apache Tomcat e il deployment delle Web App | 1,4 | |
11 | Il backend (database) di una Web App: tecnologie Java | 1,2,4 | |
12 | Sviluppo di Web App nell'ambiente IDE Netbeans | 1 | |
13 | Sviluppo di Web App nell'ambiente IDE Eclipse | 1 | |
14 | Sviluppo di Web Services SOAP | 1 | |
15 | Sviluppo di Web Services REST e linguaggio di interscambio JSON | 1 | |
16 | Pattern MVC per lo sviluppo di Web App | 1 | |
17 | Sviluppo di thin client in linguaggio Python | 1 | |
18 | Il linguaggio e l'ambiente PHP per lo sviluppo Web | 1 | |
19 | Il framework Laravel per web App e web API | 1 | |
20 | Clienti e framework per Web API | 1 |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
- TECNOLOGIE PER I SISTEMI DISTRIBUITI E IL WEB
Colloquio orale sugli argomenti del corso, a partire dalla correzione e discussione delle prove di laboratorio svolte e superate in precedenza.
- LABORATORIO
Prove di laboratorio, consistenti nell'implementazione di codice che faccia ricorso alle tecnologie presentate nel corso integrato.
È prevista una prova in itinere nel periodo di sospensione delle lezioni frontali indicato nel calendario didattico del corso di laurea.
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.
- Caratteristiche del linguaggio PHP
- Il pattern MVC in Spring Boot e Laravel
- LABORATORIO
Nello svolgimento delle prove di laboratorio, viene richiesto di realizzare semplici sistemi distribuiti, o applicazioni web, che Impieghino le tecnologie presentate nel corso.
La raccolta ragionata delle simulazioni di prove d'esame svolte durante il corso sarà disponibile sul repository Studium.
Un'ampia rassegna di esercizi risolti da un allievo è disponibile a questa URL.
Seguono alcuni esempi di prove d'esame assegnate di recente.
- 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