WEB PROGRAMMING, DESIGN & USABILITY

Anno accademico 2021/2022 - 3° anno - Curriculum Sistemi e Applicazioni
Docente: Federico Fausto SANTORO
Crediti: 6
SSD: INF/01 - Informatica
Organizzazione didattica: 150 ore d'impegno totale, 102 di studio individuale, 24 di lezione frontale, 24 di esercitazione
Semestre:

Obiettivi formativi

Il corso è incentrato sull'introduzione allo sviluppo Fullstack di Web Applications. Il corso introdurrà le basi dello sviluppo Frontend fino allo sviluppo Backend, ottenendo le basi necessarie allo sviluppo di un progetto completo e alla comprensione di nuove tecnologie e frameworks.


Modalità di svolgimento dell'insegnamento

Le lezioni saranno incentrate nella spiegazione teorica e dello stato dell'arte dello sviluppo web Fullstack. Durante le varie lezioni saranno svolte delle attività di esercitazione. Le esercitazioni potranno anche essere assegnate in via opzionale agli studenti per poi presentarle in aula, cercando di coltivare al meglio le proprie conoscenze assieme a quelle degli altri studenti.


Prerequisiti richiesti

Requisiti Generali:

Conoscenza dello stack di rete TCP/IP, conoscenza generale dei Database relazionali e non relazionali, programmazione ad oggetti.

Propedeuticità (per L-31):

Programamzione II e Interazione e Multimedia.


Frequenza lezioni

E' consigliata la frequenza alle lezioni ma non è obbligatoria.


Contenuti del corso

Il programma verterà sulle conoscenze basilari allo sviluppo Full-Stack, in particolar modo:

Front-End:
Network Application Layer
HTTP Introduction
Client - Server
URLs and Verbs
Status Codes
HTML Introduction
Web Browsers and HTML Documents
Block and inline Elements
Text Elements
Attributes
List and Tables
Forms
CSS Introduction
Simple Selectors
Selector Combinators
Pseudo-classes and elements
Box Model
CSS Style rules
Cols System
Flexbox System
Grid System
Javascript Introduction
Variables
Data Types
Expressions
Statements
Conditionals
Arrays
Functions
Arrow Functions
Scope and Closures
Objects and Notations
Classes
DOM
Events
Asynchronous
Callbacks
Promises
Async/Await
Ajax and Fetch
JQuery Introduction
Selectors
Elements
DOM Traversing
Typescript Introduction
Differences and Story
The compiler
Workflow and Configuration
Objects and Arrays
Explicit and Dynamic Types
Functions and Aliases
DOM and Casting
Classes
Modules
Interfaces
Enums and Tuples

Back-End:
Introduction to Back-End Development
HTTP & Client - Server Re-Introduction
Server and Services
SOA and Microservices
Workflow of a Server
Database Types
Back-end Languages
Back-end Technologies
Back-end Systems
REST Architecture
Security Aspects
Introduction to NodeJS
History of NodeJS
Installation
Difference between Browser and NodeJS
Hello World!
Environment Variables
Application Arguments
Exports
The NPM
The package.json
Dependencies
The Event Loop
Event Emitter
NodeJS - Development Introduction
Simple HTTP Server and request
Files operations
Streams
Error handling
NodeJS - Express Introduction
Hello Express
Route Handlers
Middlewares
Static Files
NodeJS - WebSockets Introduction
HTTP Polling and Streaming
Messaging Transmission
Node JS - SocketIO Introduction
Difference between WebSockets and SocketIO
Simple Server Example
Simple Client Example
Events and Rooms


Verifica dell'apprendimento

Modalità di verifica dell'apprendimento

L'esame verterà su tre prove obbligatorie:
Scritto, Orale e Laboratorio.
La prova di laboratorio può essere sostituita con la presentazione da parte dello studente di ogni singola esercitazione assegnatagli. La mancata presentazione di un'esercizio annullerà tutte le presentazioni svolte fino a quel momento e renderà la prova di laboratorio di nuovo obbligatoria.

Solo dopo aver superato le due/tre prove obbligatorie sarà possibile, in via opzionale, farsi assegnare un progetto da sviluppare secondo le tematiche affrontate durante il corso e da consegnare entro 30 giorni dall'assegnazione. Il progetto può essere proposto dallo studente e può coincidere con un progetto di altra materia. Il progetto dovrà essere poi pubblicato in maniera PUBBLICA sul repository ufficiale del corso (https://github.com/UniCT-WebDevelopment).