Insegnamento PROGRAMMAZIONE DI INTERFACCE GRAFICHE E DISPOSITIVI MOBILI

Nome del corso di laurea Ingegneria informatica ed elettronica
Codice insegnamento 70A00087
Curriculum Ingegneria informatica
Docente responsabile Luca Grilli
Docenti
  • Luca Grilli
Ore
  • 54 Ore - Luca Grilli
CFU 6
Regolamento Coorte 2021
Erogato Erogato nel 2022/23
Erogato altro regolamento
Attività Caratterizzante
Ambito Ingegneria informatica
Settore ING-INF/05
Anno 2
Periodo Secondo Semestre
Tipo insegnamento Obbligatorio (Required)
Tipo attività Attività formativa monodisciplinare
Lingua insegnamento ITALIANO
Contenuti Concetti di base sulla programmazione di applicazione grafiche interattive. Programmazione di applicazioni desktop in tecnologia JFC/Swing (Java). Programmazione di app native per Android. Analisi di semplici casi di studio relativi allo sviluppo di video-game per desktop e per mobile.
Testi di riferimento La disciplina affronta molte tematiche di recentissima introduzione riguardanti tecnologie in continua evoluzione, che non sono raccolte in un singolo libro di testo. Per questo, gran parte dei contenuti dell'insegnamento sono illustrati nelle dispense a cura del docente.

Si segnalano tuttavia alcuni testi di riferimento, tutorial e documentazione on-line per approfondimenti sui vari argomenti trattati.

Testi consigliati
Kathy Walrath, Mary Campione, Alison Huml, Sharon Zakhour. The JFC Swing Tutorial: A Guide to Constructing GUIs (2nd Edition), Addison-Wesley, 2004.

Dawn Griffiths, David Griffiths. Head First Android Development, 3rd Edition, O'Reilly, 2021.

Robert C. Martin. Clean Code: A Handbook of Agile Software Craftsmanship, Prentice Hall, 2008.

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (the Gang Of Four). Design Patterns: Elements of Reusable Object-Oriented Software, Addison Wesley, 1994.

Tutorial e documentazione on-line
The Swing Tutorial - The Java™ Tutorials, Oracle Java.
JavaFX Documentation Project.
Android Developers - Developer Guides.
Android Developers - Training Courses.
Obiettivi formativi L'obiettivo principale dell'insegnamento è fornire agli studenti i principi di base per la progettazione e la realizzazione di applicazioni grafiche interattive, sia per desktop che per dispositivi mobili. Le tecnologie di riferimento adottate sono il framework JFC/Swing per quanto concerne le applicazioni desktop, e la tecnologia Android Studio per quanto riguarda lo sviluppo di app native.

Le principali conoscenze che gli studenti acquisiranno saranno:
• tecniche avanzate di programmazione in Java e sue API per la gestione della grafica 2D;
• tecniche di programmazione di interfacce grafiche per applicazioni desktop;
• tecniche di programmazione di app (native) per dispositivi mobili, con particolare enfasi al "mondo" Android;
• elementi di base per la modellazione ad oggetti di un problema astratto o del mondo reale;
• alcuni design pattern fondamentali per la progettazione del software, quali il Singleton, il Model-View-Controller (MVC) e il Separable-Model-Architecture (SMA);
• principali ambienti di sviluppo integrati (IDE) per il linguaggio Java e per lo sviluppo di app native per Android, nello specifico Eclipse, NetBeans, IntelliJ e Android Studio.

Le principali abilità che gli studenti acquisiranno saranno:
• capacità di analizzare un problema astratto o del mondo reale e di saperlo modellare secondo i principi della modellazione ad oggetti;
• capacità di identificare criticità in fase di modellazione o di implementazione di un sistema software, e di saper escogitare soluzioni efficaci ed efficienti o, in ultima istanza, di saper prevedere delle strategie per aggirarle;
• capacità di gestire l'intero processo di realizzazione di un sistema software seguendo un modello di sviluppo iterativo ed evolutivo (agile).
• capacità di redigere un semplice documento di progetto di un software;
• capacità di utilizzo di ambienti di sviluppo integrati (IDE).
• capacità di consultare documentazioni software di vario tipo (tutorial, documentazione di riferimento) e di saper interagire con librerie, framework, e sistemi software generici sviluppati da terze parti.
Prerequisiti Il superamento dell'esame di "Fondamenti di Informatica e Laboratorio" è propedeutico a questo insegnamento. Per la comprensione delle tematiche trattate è infatti indispensabile la conoscenza dei concetti fondamentali della programmazione orientata agli oggetti e dei costrutti principali del linguaggio Java. È inoltre importante avere familiarità con alcuni argomenti avanzati quali: le classi innestate, i tipi generici, le collezioni, i tipi enumerativi, la gestione delle eccezioni e la gestione dei flussi di input/output.
Metodi didattici Ogni lezione consta tipicamente di una o più esercitazioni guidate al calcolatore, generalmente incentrate sull'esame di semplici casi di studio. Le varie esercitazioni sono precedute da un'importante fase preparatoria, finalizzata a fornire le necessarie conoscenze teoriche, metodologiche e tecnologiche. Lezioni frontali (tradizionali) saranno svolte sporadicamente, e soltanto per fornire conoscenze e strumenti teorico-metodologici fondamentali per la comprensione degli argomenti trattati.
Altre informazioni Oltre al ricevimento settimanale, il docente è disponibile a svolgere consultazioni individuali o di gruppo, in date e orari da concordare con gli studenti.
Modalità di verifica dell'apprendimento La prova consiste nella realizzazione di un'applicazione grafica per desktop o di un'app per dispositivo mobile, e nella produzione del relativo documento di progetto (o tesina), entrambe da svolgersi individualmente o in gruppi di due persone.

Tempistica
1. Proposta di progetto [da svolgersi in un qualunque momento antecedente la data di esame, tipicamente almeno 30 gg prima]
Docente e studente(i) si accordano su un possibile tema per il progetto, tipicamente un videogioco (es. Pac-Man), un'emulazione di un gioco da tavolo (es. Risiko), un rifacimento semplificato di un'app esistente, o un altro (semplice) software di utilità. Il docente è disposto ad accogliere eventuali proposte da parte degli studenti purché pertinenti agli argomenti e alle finalità dell'insegnamento.

2. Assegnazione del progetto [da svolgersi dopo la fase 1., possibilmente entro 10-15 gg]
Lo(gli) studente(i) redigono i primi due capitoli del documento di progetto comprensivi della descrizione del problema affrontato e dell'elenco dei requisiti/funzionalità del software. Dopo uno o più confronti con il docente (tipicamente via email) tesi a concordare una lista di requisiti definitiva, il docente assegna il progetto attribuendo a quest'ultimo un livello di difficoltà nella scala: molto facile, facile, normale, difficile, molto difficile.

3. Consegna del progetto [da svolgersi dopo la fase 2. e 2 gg prima della data di esame]
Lo(gli) studente(i) trasmettono al docente (tramite la piattaforma e-learning UniStudium) il documento di progetto (o tesina), il codice sorgente del software e tutte le risorse necessarie alla sua esecuzione. La tesina dovrà includere, tra le altre, una sezione in cui è descritta l'architettura generale del software, una sezione dove sono esaminati in dettaglio in singoli moduli architetturali e una sezione in cui vengono illustrati i principali problemi (di varia natura) riscontrati. I 2 gg di anticipo sulla data di esame consentiranno al docente di esaminare attentamente i vari progetti pervenuti in tutte le loro parti.

4. Discussione del progetto [da svolgersi nella data di esame, subito prima dell'eventuale verbalizzazione; richiede dai 15 ai 30 minuti]
Il docente pone delle domande puntuali riguardanti la strategia di modellazione adottata, le motivazioni delle principali scelte progettuali, le criticità riscontrate e il modo in cui sono state affrontate.

Valutazione
Il punteggio complessivo è dato dalla somma del punteggio assegnato alla tesina e di quello assegnato al sistema software, per i dettagli si consulti quanto riportato di seguito.

Punteggio tesina (12/30)
Il punteggio viene calcolato valutando la completezza e la chiarezza espositiva del documento di progetto, applicando orientativamente il seguente schema:
• accuratezza (4/30);
• completezza (3/30);
• sinteticità (3/30);
• leggibilità (1/30);
• estetica (1/30).

Punteggio sistema software (20/30)
Il punteggio viene calcolato tenendo conto del livello di difficoltà del progetto, dell'efficacia e dell'efficienza del software sviluppato, e di altri fattori che gli conferiscono una maggior qualità. In linea del tutto orientativa viene applicato il seguente schema:
• difficoltà del progetto: fino ad un massimo di 8/30 in base alla seguente scala: molto facile, facile, normale, difficile, molto difficile;
• efficacia del software sviluppato: fino ad un massimo di 8/30 in base alla percentuale di requisiti concordati funzionanti correttamente;
• efficienza e "qualità" del software sviluppato: fino ad un massimo di 4/30 in base ad una rapida analisi dell'efficienza del software e della sua "qualità" espressa in termini di modularità, espandibilità e di corretto utilizzo di tecniche polimorfiche e di pattern progettuali spiegati a lezione.
Programma esteso Unità didattica: Modulo 1 - Introduzione alla programmazione di applicazioni grafiche interattive
• Componenti grafiche.
• Programmazione basata su eventi.
• Principali pattern architetturali.
• Cenni alla gestione della concorrenza e al multithreading.

Unità didattica: Modulo 2 - Programmazione di applicazioni desktop
• Introduzione al framework JFC/Swing.
• Gestione del layout di una GUI.
• Sviluppo di GUI interattive.
• Uso del contesto grafico.
• Primitive grafiche.
• Rendering di immagini raster e animazioni.
• Interazione tramite mouse.
• Interazione tramite mouse in layout fluidi.

Unità didattica: Modulo 3 - Programmazione di app per Android
• Cenni al sistema operativo Android.
• Tecnologie per lo sviluppo di app native e non.
• Sviluppo di una prima app per Android.
• Costruzione di interfacce utente dinamiche.
• Salvataggio dei dati.
• Interazione con i sensori e con altre app.
• Gestione della grafica e animazioni.

Unità didattica: Modulo 4 - Casi di studio
• Sviluppo di video-game per desktop e per mobile.
Condividi su