Il corso studia i principali modelli teorici dell'informatica (grammatiche e automi) e fornisce elementi di progettazione e programmazione orientata agli oggetti in linguaggio C++ volti alla realizzazione di un progetto che sfrutta i temi introdotti nella parte teorica.
Il corso introduce, nella prima parte, concetti relativi a logica proposizionale e induzione. Poi, nella seconda parte, vengono presentati i principali modelli di computazione per l'informatica: Automi, grammatiche, macchine di Turing. Parallemente a questi argomenti è svolta una parte pratica nella quale, dopo una introduzione al linguaggio JAVA, i modelli e le metodologie studiate vengono mostrati attraverso applicazioni.
Nello specifico lo studente sarà in grado di:
- dato un linguaggio formale, capire da quale tipologia di grammatica può essere generato e quale automa sarà in grado di riconoscere le stringhe del linguaggio
- progettare e realizzare applicazioni object oriented in C++
- realizzare un interprete per un semplice linguaggio di programmazione
Capacità di impostare e risolvere problemi per via algoritmica utilizzando un linguaggio di programmazione. Conoscenze base di algebra e combinatorica.
L’insegnamento si compone di lezioni di teoria, per un totale di 24 ore circa, e di una parte pratica, di 24 ore circa. Tutte le lezione saranno tenute dai docenti titolari dell’insegnamento.
Il programma del corso prevede la presentazione e discussione dei seguenti argomenti:
- Espressioni regolari e automi a stati finiti
- Grammatiche libere dal contesto e automi a stack
- Progettazione orientata agli oggetti: diagramma a classi UML e Design Pattern
- Programmazione in linguaggio C++: utilizzo di stringhe e vettori dinamici, ereditarietà e polimorfismo, programmazione generica, gestione delle eccezioni, utilizzo della Standard Template Library, concetti avanzati del C++ 20 (view, stream, iteratori, funzioni anonime), utilizzo di smart pointer
Tutte le slides utilizzate durante le lezioni e altro materiale didattico (es. esercizi) saranno disponibili su aulaweb. In generale, gli appunti presi durante le lezioni e il materiale su aul@web sono sufficienti per la preparazione dell'esame.
I libri sotto indicati sono suggeriti come testi di appoggio:
(Teoria) Hopcroft, Motwani, Ullman - Introduction to Automata Theory, Languages, and Computation (3rd edition) - Pearson
(Pratica) Ray Lischner - Exploring C++ 20 (3rd edition) - Apress
Ricevimento: Su appuntamento a richiesta degli studenti tramite una email al docente.
ARMANDO TACCHELLA (Presidente)
LUCA ONETO
ENRICO GHIORZI (Presidente Supplente)
Calendario accademico | Corsi di Studio UniGe
L’esame si compone di una prova scritta ed un progetto entrambi obbligatori.
Lo scritto richiede lo svolgimento di due esercizi sugli argomenti di teoria del corso (materiale accessorio NON consultabile)
Il progetto richiede la progettazione e lo sviluppo di un interprete in linguaggio C++
Gli studenti con certificazione di DSA, di disabilità o di altri bisogni educativi speciali devono contattare il docente all’inizio del corso per concordare modalità didattiche e d’esame che, nel rispetto degli obiettivi dell’insegnamento, tengano conto delle modalità di apprendimento individuali e forniscano idonei strumenti compensativi. Si ricorda che la richiesta di misure compensative/dispensative per gli esami dovrà essere inviate al docente del corso, al referente della Scuola e al “Settore servizi per l'inclusione degli studenti con disabilità e con DSA” (dsa@unige.it) almeno 10 giorni lavorativi prima della prova, come da linee guida disponibili al link: https://unige.it/disabilita-dsa
I dettagli sulle modalità di preparazione per l’esame e sul grado di approfondimento di ogni argomento verranno dati nel corso delle lezioni.
L’esame scritto verificherà l’effettiva acquisizione delle conoscenze, competenze ed abilità tramite lo svolgimento di esercizi sugli argomenti teorici del corso.
Il progetto verificherà l’effettiva acquisizione delle conoscenze, competenze ed abilità su un più ampio spettro comprendente teoria, programazione e la loro interazione.