95648 - PROGETTAZIONE E SVILUPPO DEL SOFTWARE

Anno Accademico 2025/2026

  • Docente: Danilo Pianini
  • Crediti formativi: 9
  • SSD: ING-INF/05
  • Lingua di insegnamento: Italiano
  • Moduli: Danilo Pianini (Modulo 1) Gianluca Aguzzi (Modulo 2) Angelo Filaseta (Modulo 3)
  • Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2) Convenzionale - Lezioni in presenza (Modulo 3)
  • Campus: Cesena
  • Corso: Laurea in Tecnologie dei sistemi informatici (cod. 6007)

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

  • Fondamenti di analisi, progettazione e programmazione orientata agli oggetti

  • Linguaggio Java: panoramica e strumenti di sviluppo

  • Concetti base e tipici dei linguaggi a oggetti: classi, oggetti, metodi, campi, istanziazione

  • Polimorfismo, ereditarietà e riuso: interfacce e classi astratte

  • Aspetti avanzati: programmazione generica, annotazioni, gestione delle eccezioni, elementi di programmazione funzionale (espressioni lambda)

  • Librerie fondamentali per la realizzazione di programmi

  • Gestione dell’input/output

  • Programmazione di interfacce grafiche

  • Elementi introduttivi di programmazione concorrente

  • Cenni a design pattern e a tecniche di programmazione efficace

  • Strumenti di sviluppo e basi di DevOps: JDK, IntelliJ IDEA, Git, Gradle, continuous integration

Testi/Bibliografia

Testo di riferimento:

  • Bruce Eckel, Thinking in Java — Fourth Edition

Testi consigliati:

  • Joshua Bloch, Effective Java — Second Edition

  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns

L’acquisto di tali libri non è richiesto, poiché saranno fornite slide sostitutive. Il corso farà inoltre uso di tutorial e documentazione tecnica disponibile online.

Metodi didattici

La didattica si articola in lezioni frontali ed esercitazioni in laboratorio parzialmente guidate.

In aula vengono presentate le tecniche di programmazione a oggetti e le caratteristiche del linguaggio Java, con esercizi volti a stimolare la discussione critica con gli studenti.

In laboratorio si introducono i principali strumenti di sviluppo e vengono assegnati compiti di programmazione per consolidare le competenze pratiche attraverso approcci attivi.

Data la natura delle attività previste, la frequenza richiede la preventiva partecipazione 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

La verifica dell’apprendimento avviene tramite colloquio orale con presentazione di un progetto.

Gli studenti, organizzati in gruppi di circa tre persone, realizzano un progetto software in Java e producono una relazione che descrive requisiti, progettazione e implementazione. La valutazione tiene conto della qualità della soluzione proposta e della discussione delle scelte progettuali.

Strumenti a supporto della didattica

Il docente fornirà materiale didattico (in particolare slide ed esercizi). L’attività laboratoriale favorirà l’apprendimento pratico ed è previsto il supporto di un tutor.

Orario di ricevimento

Consulta il sito web di Danilo Pianini

Consulta il sito web di Gianluca Aguzzi

Consulta il sito web di Angelo Filaseta