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
Anno di corsoDegree programme year : 2 - Primo Semestre
Anno offertaAcademic year: 2018-2019
Anno regolamentoAnno regolamento: 2017-2018
Obbligatorio
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 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.


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 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.

(1) Introduction to programming concepts - Computation model, programming model and reasoning model. Declarative model: main characteristics. (2) The Programming Languages - Syntax, semantics and pragmatics. Context Free Grammars. EBNF. Syntactic ambiguity. Parsing Techniques. Compilers and interpreters. Data representation: simple types (Integer, Real, Char) and structured types (record, tuple and lists). (3) A model of programming language: the kernel language - Motivation for its use. Definition: linguistic abstractions, data types, variables and partial values, statements and expressions. Language semantics. (4) Procedural abstraction in programming languages - Procedures: lexical scoping, closure, procedures and values, procedures activation. High order programming: procedural abstraction, genericity, instantiation and embedding. Application examples: loop abstraction and folding. (5) Declarative programming techniques - Last call optimization, recursion and iteration, recursion on tuples, exception handling. Data type definition. Abstract data type. Abstract data type programming. (6) Declarative concurrency - Definition. Threads Streams and stream objects. Demand-driven execution. Triggers. Lazy functions. Principles of real-time programming and message-passing. (7) Stateful programming - State definition. The stateful programming model. State representation: cells and arrays. Stateful programming vs. declarative programming. (8) Object Oriented programming - General characteristics. Modelling tools; Class and Objects. Abstraction: inheritance, forwarding and Delegation. Visibility of properties and methods. OOP techniques. Examples. (9) Relational programming - General characteristics. Modelling tools. Choice and Fail. Solutions Space and Search strategies. Logic Programming. Examples. (10) Constraint programming. Contraint definition. Solution techinques and Search strategies. The constraint-cased 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/course/view.php?id=7850).

(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/course/view.php?id=7850).


E-LEARNING E-LEARNING

No

No


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

 


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