ADVANCED PROGRAMMING LANGUAGES
Anno accademico 2025/2026 - Docente: MARCO GRASSIARisultati di apprendimento attesi
Conoscenza e capacità di comprensione
Il corso consente agli studenti di acquisire conoscenze sui diversi paradigmi di programmazione, sulle tecniche di gestione della memoria e sulle modalità di traduzione del codice. Inoltre, vengono affrontati i metodi per la gestione della comunicazione e della concorrenza, così come le strategie per il trattamento degli errori.
Capacità di applicare conoscenza e comprensione
Gli studenti svilupperanno la capacità di progettare e realizzare applicazioni utilizzando C++, C#, Python e Go.
Autonomia di giudizio
Grazie alla conoscenza di diversi linguaggi e paradigmi di programmazione, lo studente sarà in grado di valutare criticamente e scegliere il linguaggio più appropriato in funzione del problema da risolvere.
Abilità comunicative
Lo studente sarà in grado di motivare e giustificare la scelta del linguaggio di programmazione più adatto per l’implementazione di un’applicazione che risolva un determinato problema.
Capacità di apprendimento
Il corso si propone di introdurre i principali costrutti dei linguaggi di programmazione e di fornire gli strumenti necessari per una valutazione critica degli stessi. Inoltre, lo studente acquisirà conoscenze approfondite sulle strutture dei linguaggi, che gli consentiranno di comprenderne la reale funzionalità nei diversi ambiti applicativi.
Modalità di svolgimento dell'insegnamento
Il corso è organizzato in moduli.
Il corso prevede come metodo di insegnamento principale le lezioni frontali per acquisire le conoscenze teoriche di base e tutti gli elementi sintattici e lo svolgimento di esercitazioni proposte dal docente per acquisire la capacità di risolvere i problemi, applicare la conoscenza e utilizzare gli ambienti e le metodologie di sviluppo.
Il docente propone, inoltre, delle esercitazioni individuali che consistono nella soluzione di un problema, che lo studente deve affrontare in autonomia che vengono successivamente corrette o discusse in classe.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel Syllabus.
Prerequisiti richiesti
Conoscenza delle architetture dei calcolatori base e le relative problematiche, i linguaggi assembly.
Conoscenze di base di Informatica.
Conoscenze di base di ingegneria del software.
Cobnoscenza dei paradigmi di programmazione procedura ed ad oggetti
Conoscenza dei linguaggi C e Java
Frequenza lezioni
Contenuti del corso
Modulo 1: Caratteristiche dei linguaggi di programmazione e Linguaggi formali per la specifica e la traduzione dei linguaggi di programmazione
Evoluzione dei principali linguaggi di programmazione
Tipi di dati - Espressioni e dichiarazioni di assegnazione - Strutture di controllo a livello di dichiarazione - Sottoprogrammi e loro implementazione – Gestione della memoria - Garbace collector – Exception e event handler
Modulo 2: IL linguaggio C++
Introduzione al C++, utilizzo di classi predefinite, creazioni di classi in C++, puntatori e riferimenti, overloading delle funzioni e degli operatori, creazione di oggetti a tempo di esecuzione, reimpiego di codice in C++, scrittura di programmi estensibili, argomenti e valori di ritorno, classi contenitore e modelli in C++, gestione delle eccezioni, Standard C++ Library, STL
Modulo 3: Programmazione funzionale orientata agli oggetti: il linguaggio C#: Sintassi C#: Classes and Objects, Basic Types and Operations, Functional Objects Built-in Control Structures, Functions and Closure, Astrazione, Ereditarieta e gerarchia delle classi, Lambda Calculus, Liste, Pattern Maching, Programmazione ad eventi, Concorrenza, GUI
Modulo 4: Il Linguaggio Python:
Introduzione a Python, Strutture dati, Stringhe, Funzioni avanzate e OOP, Standard Library, Strumenti di sviluppo, Networking , Crawling and Scraping, Serializzazione e persistenza dei dati,Programmazione GUI, Distributing Python
Modulo 5: Il linguaggio GO
Introduzione al linguaggio Go, Sintassi del linguaggio :Tipi dati e variabili e Costrutti di controllo e decisione, Strutture dati: array, slice e map, Funzioni e defer Struttura della mamoria e puntatori Programmazione Object-Oriented, P, Gestione dell’Input e Output su terminale e file, Il compilatore e il garbage collector
Testi di riferimento
[T1] Materiale fornito del docente on line
[T2] Sebesta, Concepts of Programming Languages, 12th Edition - Pearson, ISBN-13: 9781292436821
[T3] Mark Michaelis, Essential C# 8.0,Addison-Wesley Microsoft Technology English, ISBN-13. 978-0135972267
[T4] Alan A. A. Donovan and Brian W. Kernighan, Go Programming Language, Addison-Wesley Professional Computing Series, ISBN-13: 978-0134190563
[T5] Thinking in C++, Vol 1 Thinking in C++, Bruce Eckel, ISBN-13: 978-0139798092
Programmazione del corso
| Argomenti | Riferimenti testi | |
|---|---|---|
| 1 | Valutazione dei linguaggi di programmazione | [T2] 1.1-1.4 (inclusive), 1.6 |
| 2 | Storia dei linguaggi di programmazione | [T2] 2 |
| 3 | Naming, Binging e Scope | [T2] capitolo 5 |
| 4 | Data Type e Valutazione delle Espressioni | [T2] capitolo 6, 7 |
| 5 | Gestione della memoria e Garbage Collection | Aho Ulmann, Compilers: Principles, Techniques, and Tools, 2nd Edition, cap 7.4 -7.8 |
| 6 | Strutture di controllo e sottoprogrammi | [T2] capitoli 8,9,10 |
| 7 | Tecniche avanzate di programmazione | [T2] capitoli 13,14 |
| 8 | Il linguaggio C++ | Dispense del docente |
| 9 | Il linguaggio C# | Dispense del docente |
| 10 | Il linguaggio Python | Dispense del docente |
| 11 | Il linguaggio GO | Dispense del docente |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
E' previsto lo sviluppo di un elaborato assegnato dal docente e una prova orale successiva alla discussione dell'elaborato.
Lo studente dovrà compilare un form di richiesta di assegnazione dell'elaborato contenente alcune infomazioni sulla base delle quali il docente procedera all'assegnazione dell'elaborato.
La richiesta dovrà essere effettuata durante il periodo delle lezioni e l'elaborato assegnato potra essere presentato entro l'anno accademico.
La consegna dell'elaborato (codice e relazione) dovra essere sottomessa attraverso il portale Microsoft Team entro la data concordata al momento dell'assegnazione dell'elaborato.
L'elaborato dovra essere sviluppato da gruppi di 2 studenti. Solo in casi motiviati sara possibile sviluppare l'elaborato in modo individuale.
L’esame sarà organizzato in due parti che si svolgeranno nello stesso giorno.
La prima riguarderà la discussione dell’elaborato svolto, la seconda prevede una discussione su l’intero programma e verrà richiesta la capacita di sviluppare codice nei 4 linguaggi previsti.
La prima parte dell’esame avrà un valore del 25% mentre la seconda parte del restante 75%.
La rinunzia allo sviluppo dell’elaborato consentirà il raggiungimento di una votazione massima di 23.
La scala di valutazione è: non approvato, 18–23, 24–27, 28–30 e lode.
La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
Gli studenti con disabilità e/o DSA dovranno contattare con sufficiente anticipo il docente, il referente CInAP del DMI (prof.ssa Daniele) e il CInAP per fruire delle opportune misure compensative.
Esempi di domande e/o esercizi frequenti
Disponibili su Microsoft Teams. Si precisa che tali domande hanno carattere puramente indicativo: le domande proposte all'esame potranno divergere, anche in modo significativo.