UNIVERSITÀ DEGLI STUDI DI TRENTO

Dipartimento di Ingegneria e Scienza dell'Informazione

Laurea in INFORMATICA

Tesi Finale

Re-Design e Valutazione di un'Interfaccia di End-User Development per Serious Games

Laboratorio di programmazione per sistemi mobili e tablet

Introduzione alla programmazione mobile, introduzione ad Android, architettura Android, Android UI e Java avanzato, grafica Android e multimedia, network awareness, security, sviluppo widget Android.

Introduzione alla programmazione per il web

Architetture software per applicazioni di rete: architetture client-server, architetture N-Tier, web server, architetture di applicazioni basate su componenti web, canali di comunicazione di rete (socket), tecnologie: Java Server Pages, Java Servlets, Java Server Faces, interfacce standard per l’accesso ai dati (JDBC).

Interazione uomo-macchina

Stili e paradigmi di interazione, introduzione all'ingegneria dell'usabilità, elementi di psicologia cognitive e psicologia dell'utente ed implicazioni per la progettazione, introduzione alla progettazione basata su compiti e utenti, concetti di utilità, usabilità e esperienza dell'utente, valutazioni: valutazioni formative, summative, e approcci alla valutazione, elementi dell'interfaccia, pratica della progettazione di interfacce.

Sistemi informativi

Data sul web: object-oriented databases, dati semistrutturati e XML, schemi per XML: DTDs e XML schema, navigazione con XPath, il linguaggio di interrogazione XQuery, typing per XML, il progettazione di XQuery e il suo relazione a XSLT, basi di dati XML, integrazione di basi di dati e basi di dati P2P OLAP e data mining, techniche per la ricerca su web.

Linguaggi di programmazione semantica

Introduzione di metodi formali per la definizione, progettazione e implementazione di linguaggi di programmazione.

Algoritmi avanzati

Esplorazione di tecniche avanzate di progetto ed analisi di algoritmi, algoritmi di machine learning e tecniche di ottimizzazione per problemi discreti e continui, anche basati su "Learning and Intelligent Optimization" (LION), capacità di agire nel campo della "data science": partire dai dati per costruire modelli, usare modelli per identificare soluzioni migliorative.

Fisica

Presentazione di alcuni concetti fondamentali della fisica e di alcuni aspetti applicativi che possono assumere rilevanza per l'informatica, il metodo scientifico: osservazione, esperimento e modellizzazione, dinamica, meccanica, termodinamica, elettromagnetismo.

Sistemi operativi 1

Introduzione ai sistemi operativi, cenni di architetture, gestione dei processi, threads, scheduling della CPU, sincronizzazione dei processi e deadlocks, gestione della memoria, memoria virtuale, file system, memoria di massa, input/output, sistemi multiprocessore, sicurezza, sistemi operativi real-Time, sistemi operativi multimediali.

Ingegneria del software

Sviluppo di un progetto software complesso, in tutte le sue fasi, fondamenti sul processo di sviluppo del software e tipologie di processi di sviluppo, UML, diagrammi dei casi d'uso, delle classi, delle attività, degli Stati e delle sequenze, analisi dei requisiti e loro gestione, analisi e design del software, sviluppo e controllo del codice, manutenzione del codice.

Algoritmi e strutture dati

Introduzione agli algoritmi, analisi di algoritmi, tipi di dato e strutture di dati, strutture dati elementari, alberi, alberi bilanciati di ricerca, tabelle hash, insiemi e dizionari, grafi, code con priorità e insiemi disgiunti, strutture di dati e progettazione di algoritmi, divide et impera, programmazione dinamica, greedy, ricerca locale, backtrack, algoritmi probabilistici, cenni su problemi intrattabili.

Basi di dati

Il modello entità-relazioni, il linguaggio SQL e la sua relazione con l'algebra relazionale, query semplici e complesse sulle relazioni, views, ricorsione, vincoli (chiavi, chiavi esterne e altri vincoli), query analisi e la conversione al algebra, ottimizzazione algebrica, ottimizzazione delle query.

Calcolo delle probabilità e statistica

Spazi di probabilità, eventi, indipendenza, calcolo combinatorio, variabili aleatorie: distribuzioni, indipendenza, vettori aleatori, lo schema di Bernoulli, legge dei grandi numeri, processi di Markov: classificazione degli stati, proprietà ergodiche, processo di Poisson: processi di conteggio, teoremi limite, stime di medie e varianza.

Reti di calcolatori

Basi teoriche delle reti di comunicazione, formalizzando la nozione di protocollo e di architettura di rete, la rete di calcolatori per eccellenza: internet, tecnologie di accesso e trasmissione che supportano internet stessa e che spesso sono confuse con essa.

Programmazione funzionale

Introduzione alla programmazione funzionale e motivazioni, tipi di base, funzioni, ricorsione, strategie di valutazione, polimorfismo, liste e algoritmi di ordinamento su liste, pattern matching, eccezioni, alberi, funzioni di ordine superiore, specifica e verifica di programmi, inferenza di tipo.

Programmazione 2

Programmazione orientata agli oggetti, introduzione a Java, eccezioni e blocco try/catch, modificatori e costruttori, interfacce, esempi di interfacce e ereditarietà nelle API di Java, variabili e metodi statici, introduzione alla grafica in Java, le principali classi grafiche, modelli di gestione degli eventi.

Programmazione 1

Elementi di programmazione in C++, ingresso/uscita dei dati, variabili, costanti, tipi, espressioni, istruzioni semplici e strutturate, funzioni e passaggio di parametri, array, puntatori e riferimenti, passaggio di parametri per puntatore, stringhe, struct, allocazione dinamica di memoria (new & delete), allocazione dinamica di array, allocazione dinamica di struct, I/O su files (argc & argv), organizzazione di un programma su piu' file, strutture dati fondamentali (liste, stack, code), alberi binari.

Matematica discreta 2

Teoria degli insiemi: insiemi e loro cardinalita' (calcolo combinatorio), aritmetica degli interi e aritmetica modulare (induzione, divisibilita', algoritmo di Euclide, congruenze, scrittura di numeri in basi diverse), grafi.

Matematica discreta 1

Introduzione all'algebra lineare, sistemi lineari, metodo di Gauss, spazi vettoriali, sottospazi vettoriali e formula di Grassman, teoria delle applicazioni lineari, applicazioni lineari e matrici, rango di una matrice, inversa di una matrice con il determinante, autovalori e autovettori di una applicazione lineare, diagonalizzabilità di un'applicazione lineare, prodotto scalare euclideo, norma e distanza in Rn.

Architettura degli elaboratori

Nozioni di base sull'organizzazione e l'architettura delle macchine da calcolo, modalità di indirizzamento (registri, memoria principale, immediata), linguaggio macchina assembler, operazioni base di I/O, code e pile di esecuzione, controllo della CPU e del sistema organizzazione dell'I/O, struttura di comunicazione interna, memorie RAM statiche/dinamiche, memorie cash, memorie ROM e EPROM, memoria virtuale, pipelining, processori CISC e RISC.

Analisi matematica

Acquisizione dei concetti base dell'analisi matematica con buone capacità di ragionamento in soluzioni di problemi inerenti ad essa, una variabile reale: funzioni e loro limiti, continuità, derivabilità e studio in generale, integrazione, successioni, serie numeriche e serie di Taylor, equazioni differenziali del primo e secondo ordine, più variabili reali: studio di funzioni ed integrazione.