- Docente: Enrico Denti
- Crediti formativi: 8
- SSD: ING-INF/05
- Lingua di insegnamento: Italiano
- Modalità didattica: Convenzionale - Lezioni in presenza
- Campus: Bologna
- Corso: Laurea Magistrale in Ingegneria informatica (cod. 5826)
Conoscenze e abilità da conseguire
Al termine del corso lo studente possiede conoscenze approfondite relativamente ai linguaggi, ai paradigmi di programmazione e ai relativi modelli computazionali; possiede inoltre le basi della teoria della computabilità e conosce i concetti base della programmazione funzionale, secondo un approccio multi-paradigma e multi-linguaggio. In particolare: - conosce i principali metodi per la definizione della sintassi e della semantica dei linguaggi - sa applicare le principali tecniche di riconoscimento e valutazione per la costruzione di interpreti e compilatori, utilizzando gli strumenti più diffusi - conosce e sa applicare in modo appropriato paradigmi di programmazione differenti, anche in modo blended, secondo un approccio multi-paradigma e multi-linguaggio.
Contenuti
Il corso discute sotto diverse angolazioni il rapporto fra i linguaggi di programmazione, le relative tecniche di riconoscimento e interpretazione e i corrispondenti modelli computazionali, unendo una solida base teorica a una forte componente di sperimentazione pratica.
La prima parte del corso presenta i concetti fondamentali e le metodologie per la definizione della sintassi e della semantica dei linguaggi di programmazione, discute le relative tecniche di riconoscimento, interpretazione e valutazione e ne mostra l'applicazione pratica in casi concreti discussi sistematicamente.
La seconda parte del corso si focalizza invece sui modelli computazionali e in particolare sulla basi di functional programming, secondo un approccio multi-paradigma e multi-linguaggio.
Principali contenuti:
- Computabilità e Macchine di Turing (5h)
- Descrizione formale dei linguaggi: grammatiche formali e loro proprietà, classificazione di Chomsky. Relazione fra tipi di grammatiche e automi riconoscitori. Analisi lessicale e tecniche di analisi sintattica top-down e bottom-up per linguaggi regolari e context-free. Cenni sulla descrizione formale della semantica. (18h)
- Organizzazione e costruzione di interpreti e compilatori e relativi supporti a tempo di esecuzione: architettura ed esempi concreti in Java. Strumenti per la generazione di analizzatori lessicali e sintattici. (14h)
- Cenni ad approcci Model-Driven: il caso Xtext (3h)
- Processi computazionali iterativi e ricorsivi, concetti base della programmazione funzionale, modelli per la valutazione di funzioni, basi di Lambda calcolo. (9h)
- Javascript come linguaggio dinamico, funzionale a oggetti basato su prototipi (6h)
- Scala e Kotlin come esempi di linguaggi blended basato su un approccio multi-paradigma e interoperabile con Java. (9h)
Testi/Bibliografia
Un elenco aggiornato di testi di riferimento e manuali è consultabile sia sul sito sotto indicato, sia sulle diapositive del corso disponibili su VirtuaLe.
Metodi didattici
Il corso adotta un approccio costruttivo, in cui alle lezioni frontali in aula (tramite slide Powerpoint) e alle parti più fondazionali e teoriche sono affiancate dimostrazioni ed esercitazioni pratiche, sia in aula sia come proposte e spunti di ulteriore approfondimento e sviluppo individuale, secondo la formula del laboratorio individuale continuo.
Lezioni ed esercitazioni sono quindi intenzionalmente continuamente intercalate, compatibilmente con i diversi argomenti. Forme di laboratorio online e/o pratico sono inoltre messe in atto per specifici argomenti.
In considerazione della tipologia di attività e dei metodi didattici adottati, che prevedono l'uso di laboratori informatici, la frequenza di questa attività formativa richiede la preventiva partecipazione di tutti gli studenti ai Moduli 1 e 2 di formazione sulla sicurezza nei luoghi di studio, [https://elearning-sicurezza.unibo.it/] in modalità e-learning.
Modalità di verifica e valutazione dell'apprendimento
La prova d'esame consiste in un colloquio orale, durante il quale è richiesto non solo di discutere le tematiche del corso ma anche di sapere svolgere esercizi, proporre esemplificazioni inerenti alle tematiche del corso ed esemplificazioni dei concetti discussi anche in modo comparativo, collegando le tematiche fra loro e/o comparando diversi approcci in diversi linguaggi per una data tematica.
Se lo studente ha inserito nel piano di studi anche l'Attività Progettuale corrispondente, durante il colloquio potrà essere discusso anche il progetto svolto: è comunque sempre possibile sostenere i due colloqui separatamente.
Strumenti a supporto della didattica
Sono disponibili sul repository di Ateneo tutte le diapositive proiettate e discusse a lezione, nonché ogni altro materiale di approfondimento e dispense integrative.
Un elenco esaustivo di testi di riferimento e manuali è consultabile sia sul sito del corso al link sotto-indicato, sia sulle slide.
Il sito elenca altresì un'ampia selezione di strumenti disponibili online per la sperimentazione pratica sia degli aspetti più teorici, sia di quelli pratici relativamente ai diversi argomenti affrontati.
Link ad altre eventuali informazioni
http://enricodenti.disi.unibo.it/
Orario di ricevimento
Consulta il sito web di Enrico Denti
SDGs
L'insegnamento contribuisce al perseguimento degli Obiettivi di Sviluppo Sostenibile dell'Agenda 2030 dell'ONU.