ADVANCED PROGRAMMING LANGUAGES

Anno accademico 2018/2019 - 2° anno
Docenti: Vincenza CARCHIOLO e Giuseppe MANGIONI
Crediti: 9
SSD: ING-INF/05 - Sistemi di elaborazione delle informazioni
Organizzazione didattica: 225 ore d'impegno totale, 146 di studio individuale, 49 di lezione frontale, 30 di esercitazione
Semestre:
ENGLISH VERSION

Obiettivi formativi

Gli obiettivi principali sono quello di introdurre i principali costruttidei linguaggi di programmazione e di fornire gli strumenti necessari per la valutazione critica dei linguaggi di programmazione.

Un secondo obiettivo è quello di fornire approfondite conoscenze sulle strutture dei linguaggi di programmazione che consentano di comprendere l’effettiva funzionalità nei diversi campi di applicazione.

Il corso illustra i linguaggi di programmazione fornendo una tassonomia basata sulle applicazioni. Saranno studiati i linguaggi formali e alcuni linguaggi di programmazione orientati ad applicazioni specifiche quali cloud e Big Data. Saranno studiate le tecniche avanzate dei moderni linguaggi di programmazioni con particolare attenzione ai linguaggi multi paradigma, all’uso dei tipi, al type checking dinamico, programmazione concorrente. Tali tecniche saranno analizzate nel contesto dei seguenti linguaggi: Scala, R, C++, GO.


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.


Prerequisiti richiesti

Conoscenza delle architetture dei calcolatori base e le relative problematiche, i linguaggi assembly.

 

Conoscenze di base di Informatica e di programmazione ad oggetti


Frequenza lezioni

La frequenza non è obbligatoria ma è fortemente consigliata


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 – Linguaggi formali per la descrizione del lessico della sintassi e della semantica dei 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; Programmazione funzionale orientata agli oggetti: il linguaggio SCALA

SINTASSI SCALA: 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, Attori e concorrenza, GUI

Modulo 3: 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 4: 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

Modulo 5: il linguaggio R

Introduzione al Linguaggio R, Sintassi del linguaggio R, arrays, matrices e data frames. Uso e definizione di procedure, funzioni e packages. Vectorisation, loops, control structures (if, while, for), Ottimizzazione non-lineare e convergenza. I/O e visulizzazione


Testi di riferimento

[[T1] Materiale fornito del docente on line

[T2] Sebesta, Concepts of Programming Languages, 11th Edition - Pearson

[T3] Martin Odersky, Lex Spoon, and Bill Venners: Programming in Scala, Third Edition, Artima

[T4] Alan A. A. Donovan and Brian W. Kernighan, Go Programming Language, Addison-Wesley Professional Computing Series

[T5] Norman Matloff, The Art of R Programming, ISBN-13: 978-1-59327-384-2

[T6] Thinking in C++, Vol 1 Thinking in C++, Bruce Eckel



Programmazione del corso

 ArgomentiRiferimenti testi
1Valutazione dei linguaggi di programmazione[T2] 1.1-1.4 (inclusive), 1.6 
2Storia dei linguaggi di programmazione[T2] 2 
3Descrizione della sintassi e della semantica di un linguaggio di programmazione[T2]+ capitolo 3 
4Analisi lessicale e sintattica[T2] capitolo 4 
5Naming, Binging e Scope[T2] capitolo 5 
6Data Type e Valutazione delle Espressioni[T2] capitolo 6, 7 
7Gestione della memoria e Garbage CollectionAho Ulmann, Compilers: Principles, Techniques, and Tools, 2nd Edition, cap 7.4 -7.8 
8Strutture di controllo e sottoprogrammi[T2] capitolo 8,9,10 
9Tecniche avanzate di programmazione[t2] capitolo 13,14 
10SCALA: Sintassi Classes and Objects, Basic Types and Operations, Functional Objects Built-in Control Structures, Functions and Closures[T1] CAP1, 2, 3, 4,5,6,7 e 8 
11SCAlA: Astrazione, Ereditarieta e gerarchia delle classi[T3] CAP da 9 a 13 
12SCALA: Liste[T3] cap 16 
13SCALA: Pattern Maching[T3] cap 15 
14SCALA: Attori e concorrenza[T3] cap 30 
15SCALA: GUI[T3] cap 32 
16C++ 
17GO: Sintassi,  
18Sintassi del Linguaggio R 

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 almeno 7 giorni prima dell'esame attraverso il portale Studium.

L'elaborato dovra essere sviluppato da gruppi di 2 studenti. Solo in casi motiviati sara possibile sviluppare l'elaborato in modo individuale. La discussione dell'elaborato dovra essere effettuata in modo congiunto dai componenti del gruppo.


Esempi di domande e/o esercizi frequenti

Disponibili su Studium