Salta al contenuto principale
CODICE 117994
ANNO ACCADEMICO 2026/2027
CFU
SETTORE SCIENTIFICO DISCIPLINARE ING-INF/03
LINGUA Italiano
SEDE
  • GENOVA
PERIODO 2° Semestre

PRESENTAZIONE

L’insegnamento fornisce metodologie e strumenti avanzati per la progettazione, lo sviluppo e la verifica di sistemi software per l’elaborazione numerica dei segnali. Attraverso lo studio della programmazione orientata agli oggetti e l’utilizzo del linguaggio C++, gli studenti acquisiscono competenze per realizzare applicazioni modulari, efficienti e manutenibili, affrontando problematiche tipiche dei sistemi di telecomunicazioni e dell’elaborazione dell’informazione.

L’insegnamento introduce inoltre i principi dell’ingegneria del software, la modellazione mediante UML, l’utilizzo di sistemi di controllo versione basati su Git e le tecniche fondamentali di unit testing. Le attività di laboratorio consentono di applicare le conoscenze acquisite mediante lo sviluppo e la validazione di applicazioni software complesse, favorendo l’acquisizione di competenze progettuali e operative richieste nel contesto professionale e industriale.

OBIETTIVI E CONTENUTI

OBIETTIVI FORMATIVI

Lo studente che abbia seguito con profitto l'insegnamento sarà in grado di progettare, creare e verificare il funzionamento di un sistema complesso per l'elaborazione dei segnali. Gli studenti acquisiranno le competenze avanzate di programmazione orientata agli oggetti e progettazione software con particolare attenzione alla metodologia UML.

OBIETTIVI FORMATIVI (DETTAGLIO) E RISULTATI DI APPRENDIMENTO

La frequenza delle lezioni e delle attività di laboratorio, unitamente allo studio individuale, consentirà allo studente di acquisire conoscenze e competenze avanzate per la progettazione, lo sviluppo e la verifica di sistemi software per l’elaborazione dei segnali, applicando metodologie moderne di ingegneria del software e programmazione orientata agli oggetti.

Al termine dell’insegnamento lo studente sarà in grado di:

  • descrivere i principi della programmazione orientata agli oggetti e dell’ingegneria del software applicati alla realizzazione di sistemi per l’elaborazione dei segnali;
  • utilizzare il linguaggio C++ per sviluppare applicazioni modulari e riutilizzabili mediante classi, ereditarietà, polimorfismo, template e librerie standard;
  • progettare l’architettura di un sistema software utilizzando la metodologia UML e i relativi diagrammi per rappresentare requisiti, struttura e comportamento del sistema;
  • utilizzare sistemi di controllo versione basati su Git per gestire l’evoluzione del codice sorgente e supportare attività di sviluppo collaborativo;
  • progettare e implementare test unitari per verificare il corretto funzionamento dei componenti software e contribuire alla qualità del codice sviluppato;
  • applicare tecniche di debugging, testing e validazione per individuare e correggere errori e verificare il rispetto delle specifiche progettuali;
  • sviluppare applicazioni software per l’elaborazione numerica dei segnali integrando competenze di programmazione, progettazione e verifica;
  • valutare criticamente le soluzioni sviluppate in termini di correttezza, efficienza, modularità, manutenibilità e qualità del software, utilizzando una terminologia tecnica appropriata per descriverne caratteristiche e prestazioni.

PREREQUISITI

Per affrontare efficacemente i contenuti dell’insegnamento sono richieste conoscenze di base di programmazione procedurale, con particolare riferimento a strutture di controllo, funzioni, tipi di dato, strutture dati fondamentali e algoritmi. È inoltre richiesta familiarità con l’utilizzo di un ambiente di sviluppo software e con i principali concetti dell’architettura degli elaboratori.

Sono inoltre utili le conoscenze di base relative ai segnali e ai sistemi acquisite negli insegnamenti del settore delle telecomunicazioni e dell’elettronica, che consentono di comprendere più agevolmente le applicazioni sviluppate durante le attività di laboratorio.

MODALITA' DIDATTICHE

L'insegnamento prevede 40 ore di lezioni frontali e 20 ore di attività di laboratorio informatico.

Le lezioni frontali sono finalizzate all'acquisizione delle conoscenze teoriche relative alla programmazione orientata agli oggetti in linguaggio C++, ai principi dell'ingegneria del software, alla modellazione UML, ai sistemi di controllo versione e alle metodologie di testing. Durante le lezioni verranno presentati esempi applicativi e casi di studio tratti dall'ambito dell'elaborazione dei segnali.

Le attività di laboratorio consentiranno agli studenti di applicare le conoscenze acquisite attraverso esercitazioni pratiche e attività progettuali. In particolare, gli studenti utilizzeranno strumenti di controllo versione basati su Git, svilupperanno applicazioni software in linguaggio C++, realizzeranno test unitari e modelleranno sistemi software mediante UML. Le attività laboratoriali prevedono inoltre la progettazione, l'implementazione e la verifica di componenti software per l'elaborazione numerica dei segnali.

Durante l'insegnamento saranno resi disponibili tramite AulaWeb il materiale didattico, esempi di codice, esercitazioni e documentazione di supporto. Agli studenti sarà richiesto di svolgere attività di studio individuale e di approfondimento degli argomenti trattati a lezione e in laboratorio.

Gli studenti con certificazioni valide per Disturbi Specifici dell’Apprendimento (DSA), per disabilità o altri bisogni educativi sono invitati a contattare il docente e il referente di Scuola per la disabilità all’inizio dell’insegnamento per concordare eventuali modalità didattiche che, nel rispetto degli obiettivi dell’insegnamento, tengano conto delle modalità di apprendimento individuali. I contatti del referente di Scuola per la disabilità sono disponibili al seguente link Comitato di Ateneo per l’inclusione delle studentesse e degli studenti con disabilità o con DSA | UniGe | Università di Genova

PROGRAMMA/CONTENUTO

L'insegnamento affronta i principali strumenti e le metodologie per la progettazione, lo sviluppo e la verifica di sistemi software orientati all'elaborazione dei segnali.

  1. Introduzione agli strumenti per lo sviluppo software
    • Ciclo di vita del software.
    • Ambienti di sviluppo integrati.
    • Sistemi di controllo versione.
    • Introduzione a Git.
    • Repository locali e remoti.
    • Commit, branch, merge e gestione dei conflitti.
    • Principali workflow di sviluppo collaborativo.
  2. Programmazione orientata agli oggetti in C++
    • Richiami di programmazione procedurale.
    • Classi e oggetti.
    • Incapsulamento e information hiding.
    • Costruttori e distruttori.
    • Overloading di operatori e funzioni.
    • Ereditarietà.
    • Polimorfismo statico e dinamico.
    • Classi astratte e interfacce.
    • Gestione delle eccezioni.
  3. Programmazione generica e librerie standard
    • Template di funzione e di classe.
    • Standard Template Library (STL).
    • Container, iteratori e algoritmi.
    • Smart pointers e gestione della memoria.
    • Organizzazione modulare del software.
  4. Qualità del software e unit testing
    • Principi di verifica e validazione del software.
    • Testing funzionale e strutturale.
    • Test unitari.
    • Progettazione dei casi di test.
    • Introduzione a framework di unit testing per C++.
    • Debugging e analisi degli errori.
  5. Ingegneria del software e modellazione UML
    • Analisi dei requisiti.
    • Principi di progettazione orientata agli oggetti.
    • Unified Modeling Language (UML).
    • Diagrammi dei casi d'uso.
    • Diagrammi delle classi.
    • Diagrammi di sequenza.
    • Dalla progettazione all'implementazione.
  6. Applicazioni all'elaborazione dei segnali
    • Architettura software di sistemi per l'elaborazione dei segnali.
    • Progettazione e sviluppo di componenti software per l'elaborazione numerica dei segnali.
    • Organizzazione e integrazione di moduli software.
    • Verifica delle prestazioni e della correttezza delle applicazioni sviluppate.

Attività di laboratorio
Le attività di laboratorio prevedono l'utilizzo di Git per la gestione del codice sorgente, lo sviluppo di applicazioni in C++, la realizzazione di test unitari, la modellazione UML di casi di studio e l'implementazione progressiva di un progetto software per l'elaborazione dei segnali.

TESTI/BIBLIOGRAFIA

Le slide utilizzate durante le lezioni, gli esempi di codice, le esercitazioni di laboratorio e l'eventuale materiale integrativo saranno resi disponibili tramite AulaWeb. Il materiale fornito dal docente costituisce parte integrante del materiale didattico dell'insegnamento.

Testo principale di riferimento:

  • B. Stroustrup, Programming: Principles and Practice Using C++, Addison-Wesley.

Testi di approfondimento:

  • B. Stroustrup, The C++ Programming Language, Addison-Wesley.
  • S. Lippman, J. Lajoie, B. Moo, C++ Primer, Addison-Wesley.
  • E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley.
  • G. Booch, J. Rumbaugh, I. Jacobson, The Unified Modeling Language User Guide, Addison-Wesley.

Per gli argomenti relativi ai sistemi di controllo versione, al testing e agli strumenti di sviluppo software potranno essere fornite dispense e documentazione tecnica aggiuntiva durante lo svolgimento dell'insegnamento.

Gli studenti non frequentanti potranno utilizzare il materiale didattico disponibile su AulaWeb e sono invitati a contattare il docente per eventuali indicazioni integrative.

DOCENTI E COMMISSIONI

LEZIONI

Orari delle lezioni

L'orario di questo insegnamento è consultabile all'indirizzo: Portale EasyAcademy

ESAMI

MODALITA' D'ESAME

L'esame consiste in una prova scritta e una prova orale.

La prova scritta prevede quesiti teorici ed esercizi riguardanti gli argomenti trattati durante l'insegnamento, con particolare riferimento alla programmazione orientata agli oggetti in C++, alla progettazione software mediante UML, ai sistemi di controllo versione, alle metodologie di testing e allo sviluppo di applicazioni per l'elaborazione dei segnali.

L'accesso alla prova orale è subordinato al superamento della prova scritta. La prova orale verte sugli argomenti dell'insegnamento e può includere la discussione delle soluzioni proposte nella prova scritta e delle attività svolte durante il laboratorio.

La valutazione finale è determinata tenendo conto dell'esito di entrambe le prove.

Gli studenti non frequentanti sostengono l'esame secondo le stesse modalità previste per gli studenti frequentanti.

MODALITA' DI ACCERTAMENTO

La prova scritta è finalizzata ad accertare l'acquisizione delle conoscenze e delle competenze operative relative alla programmazione orientata agli oggetti in linguaggio C++, alla progettazione software mediante UML, ai sistemi di controllo versione e alle metodologie di testing. Attraverso quesiti teorici ed esercizi applicativi verranno valutate la capacità di analizzare problemi, progettare soluzioni software e sviluppare codice corretto ed efficace.

La prova orale è finalizzata a verificare il livello di comprensione degli argomenti trattati nell'insegnamento, la capacità di motivare le scelte progettuali adottate e di collegare tra loro i diversi concetti affrontati durante le lezioni e le attività di laboratorio. Durante il colloquio sarà inoltre valutata la capacità di utilizzare correttamente la terminologia tecnica propria dell'ingegneria del software e della programmazione orientata agli oggetti.

Nel complesso, la valutazione consentirà di verificare la capacità dello studente di:

  • applicare i principi della programmazione orientata agli oggetti nello sviluppo di applicazioni software;
  • utilizzare le principali caratteristiche avanzate del linguaggio C++ per realizzare soluzioni modulari e riutilizzabili;
  • progettare sistemi software mediante diagrammi UML;
  • utilizzare strumenti di controllo versione per la gestione del codice sorgente;
  • progettare e interpretare test unitari per la verifica del corretto funzionamento del software;
  • analizzare criticamente la qualità, la correttezza e la manutenibilità delle soluzioni sviluppate.

Ai fini della valutazione saranno considerati la correttezza delle soluzioni proposte, la capacità di applicare le conoscenze acquisite alla risoluzione di problemi, l'autonomia di ragionamento, la completezza delle risposte e la chiarezza espositiva.

ALTRE INFORMAZIONI

Durante lo svolgimento dell'insegnamento saranno utilizzati strumenti software e ambienti di sviluppo che verranno indicati all'inizio delle lezioni e resi disponibili tramite AulaWeb. Eventuali aggiornamenti relativi al materiale didattico, alle esercitazioni di laboratorio e alle attività integrative saranno comunicati attraverso AulaWeb.

Gli studenti sono invitati a dotarsi di un computer portatile per partecipare attivamente alle attività di laboratorio e alle esercitazioni pratiche.

Agenda 2030

Agenda 2030
Istruzione di qualità
Istruzione di qualità
Lavoro dignitoso e crescita economica
Lavoro dignitoso e crescita economica
Imprese, innovazione e infrastrutture
Imprese, innovazione e infrastrutture