Facoltà di Ingegneria - Guida degli insegnamenti (Syllabus)

Programma

Nuova ricerca Nuova ricerca    Stampa scheda Stampa scheda

Linguaggi di Programmazione
Programming Languages
Alessandro Cucchiarelli

Sede Ingegneria
A.A. 2016/2017
Crediti 9
Ore 72
Periodo I
Lingua ITA

Prerequisiti
conoscenza dei principi di base della programmazione e di almeno un linguaggio di programmazione

Risultati di apprendimento attesi
CONOSCENZE E COMPRENSIONE:
Il corso ha l'obiettivo di fornire allo studente conoscenze avanzate sui diversi paradigmi di programmazione e sulle caratteristiche dei linguaggi e delle tecniche di programmazione ad essi associate. Il raggiungimento dell’obiettivo prefissato consentirà l’ampliamento le competenze già acquisite negli altri insegnamenti del corso di laurea relative ai linguaggi ed alle metodologie di programmazione.
CAPACITA' DI APPLICARE LE CONOSCENZE:
Al termine del corso lo studente sarà in grado di progettare applicazioni software utilizzando il paradigma di programmazione più appropriato e scegliendo, in relazione al contesto applicativo, il linguaggio di programmazione che meglio lo implementa. In particolare, avrà la capacità di applicare i paradigmi di programmazione dichiarativo, funzionale, concorrente, stateful, multi-agente, relazionale e basato su vincoli, e le relative tecniche di programmazione.
COMPETENZE TRASVERSALI:
Il processo di acquisizione delle conoscenze richieste contribuirà ad aumentare, nello studente, la capacità di apprendimento in autonomia, l’abilità di confrontarsi con problemi di programmazione e la capacità di giudizio per la scelta delle soluzioni da adottare, in un ottica di efficienza ed efficacia. L’illustrazione ed il successivo approfondimento di un esercizio di risoluzione di un problema, proposto in sede di verifica, stimoleranno il miglioramento delle capacità di comunicazione dello studente.

Programma
1. Introduzione alla programmazione - Computation Model, Programming Model e Reasoning Model. Il modello dichiarativo: caratteristiche fondamentali. 2. Definizione di Linguaggio di Programmazione - Aspetti caratterizzanti: sintassi, semantica, pragmatica. Espressione della sintassi tramite Context Free Grammar (CFG). EBNF. Ambiguità sintattica. Tecniche di parsing. Interpreti e Compilatori. Rappresentazione dei dati: tipi semplici (interi, reali, caratteri) e tipi strutturati (record, tuple e liste). 3. Un modello di linguaggio di programmazione: il kernel language - Motivazioni d’uso. Sua definizione: astrazione linguistica, tipi di dato, variabili e valori parziali, istruzioni ed espressioni. La semantica del linguaggio. 4. L’astrazione procedurale nei linguaggi di programmazione - Programmazione tramite procedure: lexical scoping, chiusura, procedure e valori, attivazione di procedure. High Order Programming: astrazione procedurale, genericità, istanziazione, embedding. Applicazioni:loop abstaction, folding. 5. Tecniche di programmazione dichiarativa - Last Call optimization, ricorsione ed iterazione, ricorsione su tuple, gestione delle eccezioni. Definizione dei tipi di dato. Tipo di dato astratto. Metodologie di programmazione basate sul tipo di dato astratto. 6. Concorrenza nel modello dichiarativo - Definizione di concorrenza. Meccanismi di concorrenza. Threads. Streams e Stream Objects. Esecuzione ‘demand-driven‘. Triggers. Funzioni ‘lazy’. Cenni sulla programmazione real-time e sul message-passing. 7. La programmazione basata su stati - Concetto di stato. Il modello di programmazione basato su stati. Rappresentazione dello stato: celle ed array. Relazione tra programmazione basata su stati e programmazione dichiarativa. Utilizzazione degli stati per la realizzazione di applicazioni. 8. La programmazione Object Oriented - Caratteristiche generali. Strumenti di modellazione: Classi ed Oggetti. Astrazione: ereditarietà, forwarding e delegation. Visibilità. Tecniche di programmazione OO ed esempi applicativi. 9. La programmazione Relazionale - Caratteristiche generali. Strumenti di modellazione. Choice a Fail. Spazio delle soluzioni e strumenti di ricerca: Search. La programmazione logica. Esempi di applicazione delle tecniche di programmazione relazionale. 10. La programmazione Vincolata - Definizione di vincolo. Tecniche di soluzione. Ricerca delle soluzioni. Il modello computazionale Constraint-Based. Esempi applicativi.

Modalità di svolgimento dell'esame
METODI DI VALUTAZIONE DELL'APPRENDIMENTO
l'esame si compone di una prova orale volta a verificare il livello di apprendimento che lo studente ha raggiunto relativamente alla conoscenza delle principali caratteristiche dei linguaggi di programmazione, dei principali paradigmi e delle tecniche di programmazione oggetto del corso. Per verificare la capacità di utilizzare i concetti appresi nello sviluppo di algoritmi, la prova inizierà con la richiesta di codificare, nel linguaggio di programmazione usato nel corso e utilizzando le tecniche di programmazione apprese, una semplice funzione elaborativa, su specifiche definite. Una corretta codifica costituisce condizione necessaria per il prosieguo dell'esame.

CRITERI DI VALUTAZIONE DELL'APPRENDIMENTO
lo studente deve dimostrare un’adeguata conoscenza degli aspetti teorici relativi ai linguaggi di programmazione e agli strumenti utilizzati per la validazione della correttezza lessicale e sintattica dei programmi codificati con tali linguaggi. Deve inoltre dimostrare un'adeguata conoscenza dei principali paradigmi di programmazione e della loro correlazione, nonché delle tecniche d'uso ad essi associate, risolvendo semplici problemi applicativi. Inoltre, costituisce oggetto di valutazione la capacità di usare un adeguato linguaggio tecnico in sede di esposizione. Il punteggio massimo verrà conseguito dimostrando un'approfondita conoscenza dei temi trattati nel corso ed una capacità di utilizzare in modo efficiente ed efficace le conoscenze apprese per la soluzione dei problemi proposti.

CRITERI DI MISURAZIONE DELL'APPRENDIMENTO
l'apprendimento dello studente verrà misurato con un voto massimo pari a 30.

CRITERI DI ATTRIBUZIONE DEL VOTO FINALE
la prova orale prevede un minimo di tre quesiti, uno dei quali implica lo sviluppo di una semplice funzione elaborativa, codificata nel linguaggio di programmazione usato nel corso. Il punteggio viene assegnato come somma delle valutazioni delle risposte. La lode viene assegnata agli studenti che abbiano dimostrato una conoscenza approfondita delle tematiche oggetto del corso.

Testi consigliati
.Van Roy, S.Haridi, “Concepts, Tecniques, and Models of Computer Programming”, MIT Press.

Corsi di laurea
  • Ingegneria Informatica e dell'Automazione (Corso di Laurea Magistrale (DM 270/04))




Università Politecnica delle Marche
P.zza Roma 22, 60121 Ancona
Tel (+39) 071.220.1, Fax (+39) 071.220.2324
P.I. 00382520427