Scheda programma d'esame
LINGUAGGI DI PROGRAMMAZIONE CON LABORATORIO
MARCO BELLIA
Anno accademico2019/20
CdSMATEMATICA
Codice063AA
CFU9
PeriodoSecondo semestre
LinguaItaliano

ModuliSettore/iTipoOreDocente/i
LINGUAGGI DI PROGRAMMAZIONE CON LABORATORIOINF/01LEZIONI81
MARCO BELLIA unimap
Obiettivi di apprendimento
Learning outcomes
Conoscenze

Lo studente che completa con succeso il corso acquisirà conoscenze per la comprensione dei principi che stanno alla base dei Linguaggi di Programmazione (LP): Dalla necessità del loro uso nella realizzazione di processi automatici, alla loro diversa definizione, struttura ed implementazione dei meccanismi, espressività, metodolgie di programmazione supportate. Sarà inoltre, in grado di valutare le caratteristiche di ogni LP e la complesiva adeguatezza rispetto ad una data area di applicazioni. Apprenderà due importatnti e tra loro diversi LP: Uno della categoria Descrittiva, OCaml, l'altro della Categoria Prescrittiva e ad Oggetti, Java. Infine, attraverso l'attività di laboratorio sperimenterà in modo fattivo l'uso delle tecniche di formalizzazione dei LP, l'uso di un LP Funzionale e della programmazione funzionale e Higher Order, nella realizzazione di un esecutore di un LP Imperativo e dei suoi programmi.

Knowledge

The student who completes the course successfully will be able to understand the main concepts concerning programming languages (PLs) and their implementation. In particular, the student will be able understand the formal definition of any PL, to properly evaluate its characteristics for programming and adequacy with respect to a given application area. Finally, the Laboratory activities will focus on an experience in the formal definition of a new PL and on the construction of an executor of its programs.

Modalità di verifica delle conoscenze

L'accertamento delle conoscenze acquisite durante il corso è affidato:

  • all'attività settimanale di Laboratorio in cui lo studente è impegnato individualmente ad utilizzare alcuni degli strumenti e delle competenze tecniche e metodologiche introdotte nel corso e a discutere con gli altri parteci-panti le scelte fatte e le soluzioni ottenute.
  • al superamento di una prova scritta di tests sugli argomenti trattati.
Assessment criteria of knowledge

The student will be assessed on his/her demonstrated ability to discuss and elaborate on the course contents using the appropriate terminology. - In the written exam (2 hours, at most 6 questions), the student must demonstrate his/her knowledge of the course material concerning the theory part and his/her ability in problem solving, in order to produce a correct and formally written reply. - During the oral exam the student must be able to demonstrate his/her knowledge of both parts of the course, being able to discuss the content of the written exam, and the solution proposed for the laboratory report.

Methods:

  • Final oral exam
  • Final written exam
  • Laboratory report

Further information:
The written exam will be the main one, integrated by an oral exam and a discussion of the laboratory report.

Capacità
  • Lettura della definizione formale di un Linguaggio e dei suoi costrutti
  • Individuare le caratteristiche di un nuovo LP ache a partire dalla dalla sua definizione formale
  • Padroneggiare l'uso dei diversi meccanismi presenti in un LP
  • Comprendere l'espressività di un LP e il suo grado di appropriatezza per lo sviluppo di una applicazione
Modalità di verifica delle capacità

L'accertamento delle capacità acquisite è affidata alla valutazione di una prova scritta di programmazione con riuso e/o estensione di codice dato. 

Prerequisiti (conoscenze iniziali)
  • Programmazione con un LP
  • Algoritmi di base del calcolo sequenziale
Teaching methods

Delivery: face to face

Learning activities:

  • attending lectures
  • individual study
  • Laboratory work
  • Practical

Attendance: Advised

Teaching methods:

  • Lectures
  • laboratory
Programma (contenuti dell'insegnamento)

La parte teorica del corso inizia coprendo le basi della meccanizzazione dei processi, della calcolabilità e delle funzioni calcolabili. Passa quindi allo studio sistematico dei linguaggi di programmazione come strumenti per definire formalmente qualsiasi funzione calcolabile e rendere eseguibile il processo espresso dalla funzione. In particolare, nel contesto degli LP imperativi, vengono discussi i formalismi per la sintassi e la semantica dei costrutti di base e le macchine astratte per gli esecutori di conseguenza definiti. Questi argomenti sono infine applicati nello studio di Ocaml, preso dalla classe di LP funzionali, e poi, nello studio di Java, preso dalla classe di LP Object Oriented. Infine, i due LP vengono confrontati nel modo diverso in cui forniscono la definizione del codice e il suo riutilizzo o estensione. Il laboratorio offre un'esperienza pratica nella definizione di un LP attraverso:

  • motivazione della sua struttura
  • costruzione di un esecutore dei suoi programmi, derivato dalla definizione formale di Sintassi e Semantica.
  • testing dei vari passi dello sviluppo

 

Syllabus

The theory part of the course starts covering the basics of the process mechanization, computability and computable functions. It  then moves to the systematic study of Programming Languages as the tools to formally define any computable function and to make executable the process the function expresses. In particular, in the context of the Imperative LPs, Formalisms for the Syntax and Semantics of the basic constructs, and the Abstract Machines for the executors accordingly defined, are discussed. These topics are applied in the study of Ocaml, from the class of Functional LPs, and its use in programming and then, in the study of Java, from the class of OO LPs, and its use in programming. Finally, the two LPs are compared in the different way they are providing for code definition and its reuse or extention. The laboratory is an experience in the definition of an LP:

  • defining and motivating its structure;
  • providing for the construction of an executor of its programs, derivated from the language definition
  • testing the steps of the development

 

Bibliografia e materiale didattico
  • Note didattiche: Durante il corso sarà pubblicata sul sito copia dei lucidi e del materiale (note didattiche, listing del codice, testi di esercizi, etc,)

Ad integrazione delle note è indicata la lettura del seguente libri:

  • Gabrielli M., S. Martini, Programming Languages: Principles and Paradigms, Springer-Verlag, London, 2010

Come approfondimento è indicata la lettura (di capitoli) dei seguenti libri e articoli, come indicato durante il corso:

  • G. Longo, Some Topologies for Computations, invited paper of Conf. Geometrie au XX siecle, Paris (2001)
  • H.P. Barendregt, Functional Programming and Lambda Calculus, in Handbook of theoretical Computer Science, vol. B, Chapter 7, pp. 321-363, Elsevier Science Publishers, 1990
  • M. Minsky, Computation: Finite and Infinite Machines, Chapter 11, pp. 199-216, Prentice-Hall International, 1972.
  • R. Milner, J. Parrow, D. Walker, A Calculus of Mobile Processes, Information and Computations 100, pp. 1-9, 41-49, 1992
  • Hanne Riis Nielson, Flemming Nielson. Semantics With Applications: A Formal Introduction. Wiley, 1992.
  • Scott L.M., Programming Language Pragmatics, III Edition, Elsevier - Morgan Kufmann Pub., Burlington, MA, 2009
  • Leroy X. et al., The Objective Caml system release 3.10: Documentation and User's Manual , INRIA, May 16, 2007
  • Golsing J. et al., The Java Language Specification: Java SE 8 Edition, Oracle America, Inc. and/or its affiliates, Redwood City, California 94065, U.S.A, 2015

 

Bibliography
  • Didactic Notes (including manuscripts, code listings, excercises)  will be made daily available in the class web page at the end of each planned activity (note didattiche, listing del codice, testi di esercizi, etc,)

to be accompanied by the integrated reading of th book:

  • Gabrielli M., S. Martini, Programming Languages: Principles and Paradigms, Springer-Verlag, London, 2010

Further readings:

  • G. Longo, Some Topologies for Computations, invited paper of Conf. Geometrie au XX siecle, Paris (2001)
  • H.P. Barendregt, Functional Programming and Lambda Calculus, in Handbook of theoretical Computer Science, vol. B, Chapter 7, pp. 321-363, Elsevier Science Publishers, 1990
  • M. Minsky, Computation: Finite and Infinite Machines, Chapter 11, pp. 199-216, Prentice-Hall International, 1972.
  • R. Milner, J. Parrow, D. Walker, A Calculus of Mobile Processes, Information and Computations 100, pp. 1-9, 41-49, 1992
  • Hanne Riis Nielson, Flemming Nielson. Semantics With Applications: A Formal Introduction. Wiley, 1992.
  • Scott L.M., Programming Language Pragmatics, III Edition, Elsevier - Morgan Kufmann Pub., Burlington, MA, 2009
  • Leroy X. et al., The Objective Caml system release 3.10: Documentation and User's Manual , INRIA, May 16, 2007
  • Golsing J. et al., The Java Language Specification: Java SE 8 Edition, Oracle America, Inc. and/or its affiliates, Redwood City, California 94065, U.S.A, 2015
Indicazioni per non frequentanti

Sconsigliata la non frequenza.

Modalità d'esame

Lo studente dovrà mostrare la propria conoscenza degli argomenti affrontati e le competenze acquisite attraverso:

  1. La partecipazione alle attività di Laboratorio, svolte ogni settimana, durante le quali ogni studente avrà occasio-ne di mostrare le conoscenze acquisite usando in modo appropriato metodologie, tecniche e teminologia nel risolvere individualmente il problema affrontato e nel confrontare la propria soluzione con quella degli altri parte-cipanti.
  2. Una Prova (scritta) Preliminare, consistente nella soluzione (in 2 ore) di un problema che richieda l'impiego di più LP in accordo a metodologie di sviluppo e riuso viste nel corso.
  3. Un Prova (scritta) Finale, consistente nella risposta (in 1 ora) ad alcune domande tecniche su argomenti trattati nel corso.
Ultimo aggiornamento 23/08/2019 13:18