- Docente: Danilo Pianini
- Crediti formativi: 9
- SSD: IINF-05/A
- Lingua di insegnamento: Italiano
- Moduli: Danilo Pianini (Modulo 1) Gianluca Aguzzi (Modulo 2) Paolo Baldini (Modulo 3)
- Modalità didattica: Lezioni in presenza (totalmente o parzialmente) (Modulo 1); Lezioni in presenza (totalmente o parzialmente) (Modulo 2); Lezioni in presenza (totalmente o parzialmente) (Modulo 3)
- Campus: Cesena
- Corso: Laurea in Tecnologie dei sistemi informatici (cod. 6007)
-
Orario delle lezioni (Modulo 1)
dal 18/09/2026 al 18/12/2026
-
Orario delle lezioni (Modulo 2)
dal 17/09/2026 al 17/12/2026
-
Orario delle lezioni (Modulo 3)
dal 22/09/2026 al 15/12/2026
Conoscenze e abilità da conseguire
Al termine del corso, lo studente possiede le conoscenze di base dei paradigmi di programmazione per software in-the-large, quali il paradigma object-oriented e quello funzionale, dei suoi principali pattern di progettazione, della sua incarnazione in linguaggi moderni e relativi framework di sviluppo. È in grado quindi di progettare e sviluppare applicazioni complete di medio-piccole dimensioni, usando processi di sviluppo e tecniche agili, tra cui l'approccio DevOps alla conduzione del progetto.
Contenuti
- Modulo 1 — Progettazione del software e DevOps
-
Fondamenti di analisi e progettazione orientata agli oggetti.
-
Principi di progettazione del software e tecniche per la realizzazione di codice modulare, riusabile e manutenibile, anche con riferimento ai principali design pattern.
-
Tecniche di programmazione efficace.
-
Organizzazione e gestione di un progetto software.
-
Controllo di versione con Git e organizzazione collaborativa del codice sorgente.
-
Automazione della build e gestione delle dipendenze con Gradle.
-
Testing automatico e verifica della qualità del software.
-
Principi e pratiche DevOps.
-
Linguaggio Java, ambiente di esecuzione e strumenti di sviluppo.
-
Classi, oggetti, metodi, campi, costruttori e incapsulamento.
-
Ereditarietà, polimorfismo, interfacce e classi astratte.
-
Programmazione generica.
-
Gestione delle eccezioni.
-
Elementi di programmazione funzionale in Java: espressioni lambda, interfacce funzionali e operazioni su collezioni e flussi di dati.
-
Librerie fondamentali per la realizzazione di applicazioni.
-
Gestione dell’input/output.
-
Sviluppo di interfacce grafiche mediante le librerie e i framework adottati nel corso.
-
Esercitazioni guidate sugli argomenti affrontati nei Moduli 1 e 2.
-
Configurazione e utilizzo dell’ambiente di sviluppo.
-
Sviluppo, esecuzione e debugging di applicazioni Java.
-
Applicazione dei principi della programmazione orientata agli oggetti e funzionale.
-
Utilizzo di Git per il controllo di versione e la collaborazione.
-
Utilizzo di Gradle per l’automazione della build e la gestione delle dipendenze.
-
Realizzazione ed esecuzione di test automatici.
Testi/Bibliografia
Materiali necessari
Le slide, gli esempi di codice, le esercitazioni e gli altri materiali necessari per la preparazione dell’esame saranno resi disponibili sulla piattaforma Virtuale. Durante il corso saranno inoltre indicate le sezioni rilevanti della documentazione tecnica ufficiale relativa al linguaggio, alle librerie e agli strumenti utilizzati.
Testi consigliati
- Joshua Bloch, Effective Java, Third Edition, Addison-Wesley, 2018.
- Bruce Eckel, Thinking in Java, Fourth Edition, Prentice Hall, 2006.
Testi di approfondimento
- Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994.
L’acquisto dei testi non è richiesto. I materiali necessari per la preparazione dell’esame saranno disponibili su Virtuale.
Metodi didattici
La didattica si articola in lezioni frontali ed esercitazioni in aula nei Moduli 1 e 2 e in esercitazioni di laboratorio parzialmente guidate nel Modulo 3.
Durante le lezioni vengono presentati i principi e le tecniche, gli strumenti e le pratiche di sviluppo trattati nel corso. La presentazione degli argomenti è accompagnata da esempi ed esercizi, con discussione delle possibili soluzioni.
Durante le attività di laboratorio, gli studenti configurano e utilizzano gli strumenti di sviluppo e svolgono esercizi di programmazione finalizzati all’applicazione e al consolidamento delle conoscenze e delle competenze acquisite nei Moduli 1 e 2.
In considerazione della tipologia di attività e dei metodi didattici adottati, la frequenza dell’attività formativa richiede la preventiva partecipazione di tutti gli studenti ai moduli 1 e 2 di formazione sulla sicurezza nei luoghi di studio, erogati in modalità e-learning.
Modalità di verifica e valutazione dell'apprendimento
L’esame consiste nella progettazione, realizzazione, documentazione e discussione di un progetto software sviluppato in gruppo. Non sono previste prove scritte o verifiche intermedie.
Il progetto viene normalmente svolto da gruppi di tre o quattro studenti. L’impegno previsto è di circa 70 ore per studente. Ciascun componente deve essere responsabile di una parte del progetto chiaramente identificabile, che comprenda un contributo individuale significativo alla progettazione e alla programmazione.
La proposta di progetto deve essere sottoposta preventivamente ai docenti e può essere sviluppata solo dopo la sua approvazione. La proposta deve indicare gli obiettivi, le funzionalità previste, le principali difficoltà progettuali e la suddivisione del lavoro. La scadenza per la consegna viene scelta dagli studenti tra quelle previste all’interno dei periodi d’esame. Le modalità dettagliate per la proposta, lo svolgimento e la consegna del progetto sono pubblicate su Virtuale.
La consegna comprende:
-
il codice sorgente, gestito mediante Git;
-
la configurazione del sistema di build e dei test automatici;
-
un’applicazione eseguibile;
-
una relazione in formato PDF, redatta secondo il modello fornito.
Dopo la consegna, il progetto viene discusso con tutti i componenti del gruppo. La discussione comprende una breve dimostrazione dell’applicazione, l’analisi dell’architettura complessiva e una parte individuale relativa al contributo personale e alle scelte progettuali e implementative. Durante la discussione vengono utilizzati l’applicazione, il codice sorgente e la relazione consegnati.
Al termine della discussione, a ciascuno studente viene assegnato un voto individuale espresso in trentesimi. Il voto può pertanto differire tra i componenti dello stesso gruppo.
La prova verifica:
-
la capacità di progettare e sviluppare un’applicazione software;
-
l’applicazione corretta dei principi della programmazione orientata agli oggetti;
-
la qualità dell’architettura e delle scelte progettuali;
-
la correttezza, leggibilità, modularità, riusabilità e manutenibilità del codice;
-
la qualità dei test, della configurazione del progetto e dell’uso degli strumenti di sviluppo;
-
la qualità, la chiarezza e la completezza della relazione;
-
la capacità di motivare le scelte effettuate e di discutere eventuali soluzioni alternative;
-
l’entità e la qualità del contributo individuale.
La graduazione del voto segue i seguenti criteri:
-
18–21: progetto complessivamente funzionante, ma con limitazioni nella progettazione, nella qualità del codice o nella documentazione; conoscenza sufficiente degli aspetti fondamentali e capacità limitata di motivare le scelte effettuate;
-
22–25: progetto corretto e adeguatamente strutturato; applicazione generalmente appropriata dei principi di progettazione e programmazione; contributo individuale riconoscibile e discussione corretta;
-
26–29: progetto completo e di buona qualità, con architettura coerente, codice manutenibile, test e documentazione adeguati; buona autonomia nell’analisi e nella discussione delle scelte progettuali;
-
30–30 e lode: progetto di qualità elevata, caratterizzato da scelte progettuali rigorose e da implementazione, test e documentazione particolarmente curati; piena padronanza degli argomenti, autonomia critica e capacità di discutere approfonditamente le soluzioni adottate e le possibili alternative.
La prova è superata con un voto minimo di 18/30. Una valutazione negativa può derivare, in particolare, da un contributo individuale insufficiente, da gravi carenze progettuali, da errori rilevanti e ripetuti nell’applicazione dei principi della programmazione orientata agli oggetti o dall’incapacità di discutere consapevolmente il materiale consegnato.
Utilizzo dell’intelligenza artificiale generativa
L’utilizzo di strumenti di intelligenza artificiale generativa è consentito. La responsabilità per tutto il materiale consegnato rimane pienamente in capo allo studente.
L’uso di tali strumenti deve essere dichiarato nell’apposita sezione della relazione, indicando le parti del progetto per le quali sono stati utilizzati e le modalità del loro impiego.
Lo studente deve conoscere, comprendere e avere fatto proprio qualsiasi frammento di codice, schema, documentazione o parte della relazione generati con il supporto dell’intelligenza artificiale. Durante la discussione, il docente potrà porre domande specifiche volte a verificare tale comprensione.
L’incapacità di spiegare termini, schemi, frammenti di programma, documentazione o parti della relazione presenti nel materiale consegnato costituisce motivo per il mancato superamento dell’esame. La discussione individuale costituisce quindi anche una verifica critica obbligatoria dell’eventuale materiale prodotto con strumenti di intelligenza artificiale generativa.
Studenti con DSA o disabilità
Studenti e studentesse con DSA o disabilità temporanee o permanenti: si
raccomanda di contattare per tempo l’ufficio di Ateneo responsabile (https://site.unibo.it/studenti-con-disabilita-e-dsa/it); sarà sua cura proporre agli studenti e alle studentesse interessati/e eventuali adattamenti, che dovranno comunque essere sottoposti, con un anticipo di 15 giorni, all’approvazione del/della docente, che ne valuterà l'opportunità anche in relazione agli obiettivi formativi dell'insegnamento.
Strumenti a supporto della didattica
Strumenti a supporto della didattica
I materiali didattici, comprendenti slide, esempi di codice, esercizi, documentazione tecnica e indicazioni relative al progetto, saranno resi disponibili in formato digitale sulla piattaforma Virtuale.
Le slide sono inoltre disponibili sul sito del corso e vengono aggiornate regolarmente dai docenti durante lo svolgimento dell’insegnamento.
Per le attività didattiche e di laboratorio saranno utilizzati il Java Development Kit, un ambiente di sviluppo integrato, Git per il controllo di versione e Gradle per l’automazione della build e la gestione delle dipendenze.
Le istruzioni per l’installazione e la configurazione degli strumenti richiesti sui principali sistemi operativi sono disponibili nella guida alla configurazione dell’ambiente di sviluppo.
Gli studenti potranno utilizzare i computer disponibili nei laboratori informatici oppure i propri dispositivi, previa installazione e configurazione degli strumenti richiesti.
Le attività di laboratorio saranno svolte con il supporto di un tutor.
Link ad altre eventuali informazioni
https://unibo-lptsi-pss.github.io/
Orario di ricevimento
Consulta il sito web di Danilo Pianini
Consulta il sito web di Gianluca Aguzzi
Consulta il sito web di Paolo Baldini