Guida degli insegnamenti

Syllabus

Partially translatedTradotto parzialmente
[51219] - LINGUAGGI DI PROGRAMMAZIONEPROGRAMMING LANGUAGES
Alessandro CUCCHIARELLI
Lingua di erogazione: ITALIANOLessons taught in: ITALIAN
Laurea Magistrale - [IM12] INGEGNERIA INFORMATICA E DELL'AUTOMAZIONE Master Degree (2 years) - [IM12] COMPUTER AND AUTOMATION ENGINEERING
Dipartimento: [040040] Dipartimento Ingegneria dell'InformazioneDepartment: [040040] Dipartimento Ingegneria dell'Informazione
Anno di corsoDegree programme year : 2 - Primo Semestre
Anno offertaAcademic year: 2020-2021
Anno regolamentoAnno regolamento: 2019-2020
Crediti: 9
Ore di lezioneTeaching hours: 72
TipologiaType: B - Caratterizzante
Settore disciplinareAcademic discipline: ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

LINGUA INSEGNAMENTO LANGUAGE

Italiano

Italian


PREREQUISITI PREREQUISITES

Conoscenza dei principi di base della programmazione e di almeno un linguaggio di programmazione.

Basic knowledge of computer programming and programming languages.


MODALITÀ DI SVOLGIMENTO DEL CORSO DEVELOPMENT OF THE COURSE

Lezioni teoriche: 72 ore.

Lectures: 72 hours.


RISULTATI DI APPRENDIMENTO ATTESI LEARNING OUTCOMES
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.


Capacità di applicare conoscenze e comprensione.

Al termine del percorso formativo 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.


Knowledge and Understanding.

The course aims to provide students with advanced knowledge on different programming paradigms, along with the characteristics of the languages and the programming techniques associated with them. The acquisition of such knowledge will allow the students to expand the skills acquired in the other courses related to programming languages and programming methodologies.


Capacity to apply Knowledge and Understanding.

At the end of the course the student will be able to design software applications using the most appropriate programming paradigm and choosing the best programming language with respect to the application context. In particular, she/he will have the skills to use the declarative, functional, concurrent, stateful, multi-agent, relational and constraints based programming paradigms, along with the related programming techniques.


Transversal Skills.

The process of knowledge acquisition required by the course will enhance the student’s learning skills, the ability to deal with programming problems and make judgments to choose the solutions to be adopted, with respect to their efficiency and effectiveness. The illustration and the following deep analysis of a problem solving exercise, during the examination, will stimulate the improvement of the student's communication skills.



PROGRAMMA PROGRAM

(1) Introduzione
Concetti generali relativi alla programmazione. Il computation Model dichiarativo. Il modello dei dati: Single-Assignment Store, variabili dataflow, celle. La programmazione basata su funzioni.
(2) I Linguaggi di Programmazione
Aspetti caratterizzanti: sintassi, semantica, pragmatica. Context Free Grammar. EBNF. Ambiguità sintattica. Parser LL e LR. Gestione degli errori. I traduttori. Schemi di traduzione.
(3) Un modello astratto di linguaggio di programmazione: il kernel language
Definizione: astrazione linguistica, tipi di dato, variabili e valori parziali, operatori, unificazione, istruzioni ed espressioni. La macchina astratta: componenti e processo di esecuzione delle istruzioni. La semantica del linguaggio.
(4) L’astrazione procedurale nei linguaggi di programmazione
Programmazione tramite procedure: i dati di una procedura, lo Scope, la chiusura, procedure come valori. High Order Programming.
(5) Tecniche di programmazione dichiarativa
Last Call optimization. Uso di accumulatori. Ricorsione ed iterazione. Gestione delle eccezioni. Tecniche di programmazione basate sul tipo di dato astratto.
(6) Concorrenza nel modello dichiarativo
Definizione di concorrenza. Meccanismi di concorrenza. Thread e Coroutine. Stream e Stream Object. Esecuzione Demand-Driven. Funzioni Lazy. Modello message-passing concorrente.
(7) La programmazione basata su stati
Concetto di stato. Rappresentazione dello stato: celle ed array. Relazione tra programmazione basata su stato e programmazione dichiarativa. Uso dello stato.
(8) La programmazione Object Oriented
Strumenti di modellazione: Classi ed Oggetti. Astrazione: ereditarietà, forwarding e delegation. Visibilità. Tecniche di programmazione OO ed esempi applicativi.
(9) La programmazione Relazionale
Strumenti di modellazione. Choice a Fail. Spazio delle soluzioni e strumenti di ricerca: Search. Cenni di programmazione logica. Esempi applicativi.
(10) La programmazione Vincolata
Definizione di vincolo. Tecniche di soluzione. Ricerca delle soluzioni. Il modello computazionale Constraint-Based. Esempi applicativi.

(1) Introduction
Programming concepts. Declarative model: main characteristics. Data model: single assignment store, dataflow variables, cells. Functional programming
(2) Programming Languages
Syntax, semantics and pragmatics. Context Free Grammars. EBNF. Syntactic ambiguity. LL and LR Parsers. Translators. Translation schemas
(3) A model of programming language: the kernel language
Definition: linguistic abstractions, data types, variables and partial values, operators, unification, statements and expressions. The abstract machine: components and statement execution process. Language semantics.
(4) Procedural abstraction in programming languages
Procedural programming. Procedures: data, lexical scoping, closure, procedures as values. High order programming
(5) Declarative programming technique
Last call optimization. Accumulators. Recursion and Iteration. Exception handling. Abstract data type programming
(6) Declarative concurrency
Definition. Threads and Coroutines. Streams and stream objects. Demand-driven execution. Lazy functions. Message passing concurrency.
(7) Stateful programming
State definition. State representation: cells and arrays. Stateful programming vs. declarative programming. Programming with state.
(8) Object Oriented programming
Modelling tools; Class and Objects. Abstraction: inheritance, forwarding and delegation. Visibility of properties and methods. OOP techniques. Examples.
(9) Relational programming
Modelling tools. Choice and Fail. Solutions Space and Search strategies. Hints of Logic Programming. Examples.
(10) Constraint programming.
Constraint definition. Solution techniques and Search strategies. The constraint-based computation model. Examples.


MODALITÀ DI SVOLGIMENTO DELL'ESAME DEVELOPMENT OF THE EXAMINATION
Modalità 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 calcolato in base alle valutazioni delle singole risposte. La lode viene assegnata agli studenti che abbiano dimostrato una conoscenza approfondita delle tematiche oggetto del corso.


Learning Evaluation Methods.

The examination consists of an oral test, aimed at verifying the level of knowledge of the programming languages characteristics, the main programming paradigms and the programming techniques acquired by the student during the course. In order to assess the ability to define algorithms by using the concepts learned, the test begins with the request to code a simple function, according to given specifications, in the programming language adopted in the course and by applying the programming techniques learned. A correct coding is a prerequisite to continue the examination.


Learning Evaluation Criteria.

The candidate must show an adequate knowledge of the theoretical aspects related to the programming languages and the tools used for the validation of the lexical and syntactic correctness of programs coded in these languages. He/she must also show an adequate knowledge of the main programming paradigms, their correlation and the associated programming techniques, by solving simple application problems. A proper use of the technical language will be also evaluated. The maximum mark will be achieved by demonstrating in-depth knowledge of the course topics and the ability to efficiently and effectively use the knowledge learned to solve the proposed problems.


Learning Measurement Criteria.

The student's learning will be measured with a maximum of 30 points.


Final Mark Allocation Criteria.

During the examination at least three questions are asked to the student, one of which implies the coding of a simple function by using the programming language adopted in the course. The mark is assigned taking into account the evaluations of the answers. The ‘laude' is given to the students who have demonstrated a thorough understanding of the course topics.



TESTI CONSIGLIATI RECOMMENDED READING

(1) Van Roy, S.Haridi, “Concepts, Tecniques, and Models of Computer, MIT Press.
(2) Copia delle slides e testi degli esempi illustrati a lezione, che possono essere scaricati dal sito del corso (https://learn.univpm.it).

(1) P.Van Roy, S.Haridi, “Concepts, Tecniques, and Models of Computer Programming”, MIT Press. (2) Slides copies and code of the examples used for the lectures, downloadable from the course site (https://learn.univpm.it).


E-LEARNING E-LEARNING

No

No


Scheda insegnamento erogato nell’A.A. 2020-2021
Le informazioni contenute nella presente scheda assumono carattere definitivo solo a partire dall'A.A. di effettiva erogazione dell'insegnamento.
Academic year 2020-2021

 


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