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 2017
Erogato Erogato nel 2018/19
Erogato altro regolamento
Attività Caratterizzante
Ambito Ingegneria informatica
Settore ING-INF/05
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 nella tecnologia JFC/Swing (Java). Programmazione di app per Android. Analisi di due casi di studio consistenti nello 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, O'Reilly, 2015.

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.
Creating a JavaFX GUI - The Java™ Tutorials, Oracle Java.
Android Developers - Android Open Source Project.
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 l'ambiente JFC/Swing per quanto concerne le applicazioni desktop e l'ambiente 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 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 eventuali criticità relative sia alla fase di modellazione logica che a quella di implementazione 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.
• 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 degli errori 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:
• organizzazione logica generale e semplicità di comprensione (2/30);
• descrizione del problema affrontato (2/30);
• descrizione dei requisiti/funzionalità (2/30);
• descrizione dell'architettura generale del sistema (2/30);
• descrizione dei singoli moduli architetturali (2/30);
• descrizione dei problemi riscontrati (2/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: Model-View-Controller (MVC), Model-View-Adapter (MVA), Model-View-Presenter (MVP) e Separable-Model-Architecture (SMA).

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.

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.
• Principali linee guida per lo sviluppo di app portabili (funzionanti su dispositivi diversi).
• 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