Scheda programma d'esame
COMPUTER PROGRAMMING 2
GIAN-LUIGI FERRARI
Academic year2020/21
CourseCOMPUTER SCIENCE
Code273AA
Credits9
PeriodSemester 1
LanguageItalian

ModulesAreaTypeHoursTeacher(s)
PROGRAMMAZIONE IIINF/01LEZIONI72
GIAN-LUIGI FERRARI unimap
Obiettivi di apprendimento
Learning outcomes
Conoscenze

Al termine dell'insegnamento:

  • lo studente avrà acquisito conoscenze in merito alle tecniche e alle metodologie di base per la progettazione e realizzazione di semplici applicazioni nel pradigma a oggetti.
  • lo studente avra' acquisire conoscenze rispetto allla progettazione e realizzazione dei lin guaggi di progreammazione
Knowledge

The student who successfully completes the course will have the ability to design and verify advanced programming abstractions using the abstraction mechanism provided by object-oriented programming languages like Java. He or she will have a good understanding of the basic components of the run-time supports of high-level programming languages.

Modalità di verifica delle conoscenze

Per l'accertamento delle conoscenze saranno svolte delle prove in itinere (prove scritte) e progetti di programmazioneo

Assessment criteria of knowledge

During the written exam the student must demonstrate to be able to put into practice some notions of programming language semantics learned during the course. The student's ability to explain correctly the main topics presented during the course at the board will be assessed during the oral exam.

Methods:

  • Final oral exam
  • Final written exam
  • Periodic written tests
  • Programing assignments
Capacità

Al termine del corso:

  • lo studente saprà utilizzareil linguaggio Java per la progettazione e realizzazioe di applicazioni nekl paradigma object oriented

  • lo studente avra' le conoscente per com prendere quali sono le tecniche per la realizzazione dei linguaggi di programmazione,. 
  • lo studnete avra' utilizzato il linfguaggio OCAML per simulare la struttura del run-time dei linguaggi di programmazione
Skills

At the end of this course, students will acquire a good knowledge of object oriented programming techniques and programming language implementationt. In particular, students will (i) know the main programming paradigms; (ii) be able to exploit object oriented programming techniques in the context of modern programming languages, and in particular, those mixing object-oriented and functional paradigms;

Modalità di verifica delle capacità
  • Durante le attività di laboratorio saranno saranno svolte attività pratiche di programamzionee
  • Lo studente dovrà preparare e presentare una relazione scritta che riporti i risultati delle attività di progetto
Assessment criteria of skills

Programming assignment and written tests.

Comportamenti

Abilità nel lavoro di gruppo (team work)

Behaviors

Programming projects will focus on learning and using techniques that are valuable for professional practice in software development. 

Modalità di verifica dei comportamenti

Verra' valutata la corretteza  e la documentazione delle attiviotà (progetti) di programmazione.

Assessment criteria of behaviors

Code analysis and test of the programming assignments.

Evaluation of the written exams.

Oral discussion

Prerequisiti (conoscenze iniziali)

Conoscenza della programmazione imperativa e delle tecniche algoritmiche di base.

Prerequisites

Basic knowledge on programming, data structures and algorithms

Indicazioni metodologiche

La frequenza non e' obbligatoria ma e' fortemente consigliata. Il corso e' pensato ed organizzato per una frequenza attiva e continua.

Teaching methods

Delivery: face to face

Learning activities:

  • attending lectures
  • participation in discussions
  • individual study

Attendance: Advised

Teaching methods:

  • Lectures
  • project work
Programma (contenuti dell'insegnamento)

Il corso si articola attorno a due argomenti principali.

  • Programmazione orientata ad oggetti. Il nucleo del linguaggio Java: classi, oggetti, ereditarieta', astrazioni sui dati (tecniche di progettazione, specifica e implementazione, tecniche di verifica), astrazione mediante gerarchie, polimorfismo a' la Java. Tecniche di programmazione concorrente (cenni).
  • Paradigni dei linguaggi di programmazione. Strutture a run time: ambiente, memoria, heap; blocchi, sottoprogrammi, records di attivazione, pila dei records di attivazione; oggetti; interpretazione, compilazione. Progettazione di interpreti in Ocaml.
Syllabus

Programming Language Paradigms. Run-time structures: environment, memory, heap; blocks, subprograms, activation records, stack; objects; interpretation, compilation. Object-Oriented Programming. The kernel of the Java language: classes, objects, inheritance, data abstraction (specification and implementation, verification techniques based on induction), abstraction through hierarchies, Java polymorphism. Concurrent programming techniques.

Bibliografia e materiale didattico

Per la parte relativa alla tecniche di programmazione orientata agli oggetti il testo di riferimento e':

  • Object-Oriented: B. Liskov (with J. Guttag), Program Development in Java: Abstraction, +Specification and Object-Oriented design, Addison-Wesley, 2000

Note didattiche per la programmazione in Java: Programming Languages and Techniques, Zdancewic, Pierce, Weirich (2018) download .

Per la parte relativa ai paradimi di programmazione il testo di riferimento:

  • M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill, 2006

Per la parte relativa alla programmazione di interpreti in OCAML si consulti:

 

Ulteriore materiale didattico e' indicato nella descrizione degli argomenti trattati a lezione

Bibliography

Possible readings to cover the various parts of the course include the following. Programming language paradigms: 1) M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill, 2006 2) Michael L. Scott, Programming Language Pragmatics, Third Edition, Morgan-Kaufmann, 2009 3) Peter Sestoft Programming Language Concepts, Springer, 2012 Object-Oriented Programming: 4) B. Liskov (with J. Guttag), Program Development in Java: Abstraction, + Specification and Object-Oriented design, Addison-Wesley, 2000 Concurrent Programming Techniques: 5) The art of multiprocessor programming (Cap 1-2-9), Maurice Herlihy, Nir Shavit, 2012 Elsevier Other material will be available for downloading from the course web page.

Modalità d'esame

A partire AA 22-22, l'insegnamento di programmazione 2 è stato disattivato.

Per gli studenti del vecchio ordinamento che devono sostenere l'esame di Programmazione 2, le opzioni sono due:
- sostenere l'esame con il Prof. Ferrari (docente de corso A) in uno degli appelli dedicati agli studenti del vecchio ordinamento ( https://didattica.di.unipi.it/laurea-in-informatica/passaggi-al-nuovo-regolamento-2020-21/ ). In questo caso la prova di esame consiste in uno scritto con una breve discussione orale.
- sostenere l'esame di Paradigmi di Progammazione con il proprio docente e chiedere che il voto sia verbalizzato come Programmazione 2 (sarà il Prof. Ferrari a fare la verbalizzazione riconoscendo la mutuazione)

 

Assessment methods

Writen exams and oral discussion.

Altri riferimenti web

Sono presenti nella pagina web del corso.

Updated: 01/12/2021 14:28