Informazioni Generali
L'insegnamento Programmazione 2 e' un insegnamento del Corso di Laurea in Informatica (Classe L31, DM 270/04). Il corso e' strutturato in un unico modulo didattico e si svolge nel primo semestre nelle aule del Polo Didattico Fibonacci, con il seguente orario:- Mercoledi: 14:00 -- 16:00 aula C.
- Giovedi: 14:00 -- 16:00 aula A1.
- Venerdi: 14:00 -- 16:00 aula C.
Il corso di programmazione si propone di illustrare le caratteristiche principali dei linguaggi di programmazione e le loro stritture di implementazione. La strategia adottata nel corso prevede l'utilizzo di tecniche basate sulla semantica operazionale strutturata come meccanismo per descrivere sia i paradigmi di programmazione che le strutture di implementazione. Infine, il corso si propone presentare e discutere le tecniche per la programmazzione a oggetti (programmazione per contratti,programmazzione concorrente) esemplificate e sperimentate utilizzando il linguaggio Java. 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.
La frequenza non e' obbligatoria ma e' fortemente consigliata. Il corso e' pensato ed organizzato per una frequenza attiva e continua.
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
- Note on Programming Language Concepts Note (pdf)
OCAML.
- Il sito web ufficiale di OCAML OCAML Site. In questo sito si trova tutta la documentazione di OCAML, i manuale e la descrizione delle librerie standard.
- Il sito web del libro Introduction to Objective CAML di Emmanuel Chailloux, Pascal Manoury and Bruno Pagano.
- Developing Applications with OCAML di Jason Hickey (versione preliminare)
- Java Site.
- Il sito uffiale per scaricare le versioni piu' recenti della ditribuzione di Java Download di Java per tutti i sistemi operativi,
- Java 10 API.
- Java Standard Edition
- Java Tutorial.
- Java Code Conventions.
- Java Language Specification.
- The Java Virtual Machine Specification.
Eclipse.
Esame
L'esame consiste di un progetto e di una prova scritta. Durante le prove non è consentito l'uso di libri o appunti. Per partecipare alle prove scritte è necessario iscriversi mediante il portale di ateneo per l'scrizione alle prove di esame (Portale Iscrizioni).
Traccie di testi di esame degli anni precedenti: Download (zip file)
Argomenti Trattati a Lezione
In questa pagina troverete il diario delle lezioni e delle esercitazioni. Per ogni argomento svolto potrete trovare una breve descrizione e il materiale didattico relativo.
- Introduzione al corso. I linguaggi di programmazione:
paradigmi e metodologie di programmazione
- Materiale presentato a lezione: [Lezione 1 -- pdf].
- La transizione da C a Java: classi e oggetti
- Materiale presentato a lezione: [Da C a Java -- pdf].
- Materiale presentato a lezione: [Il modello a oggetti e Java -- pdf].
- Materiale presentato a lezione: [Un modello operazionale di Java -- pdf].
- Cosa leggere per studiare e approfondire l'argomento: David Eck Java Notes
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 19, Capitolo 20, Capitolo 21 delle note didattiche download
- Tipi statici, tipi dinamici e Dynamic Dispatch in Java
- Materiale presentato a lezione: [Dynamic Dispatth -- pdf].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 25 delle note didattiche download
- Eccezioni in Java
- Materiale presentato a lezione: [Java Exception -- pdf].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 28 delle note didattiche download
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 7 David Eck Java Notes Exception
- Astrazioni Poliforme e tipi generici
- Materiale presentato a lezione: [Java Generics ]
- Cosa leggere per studiare e approfondire l'argomento: Articolo orginale di Bracha download
- Cosa leggere per studiare e approfondire l'argomento: < Capitolo 10 David Eck Java Notes Java Notes
- Astrazione procedurale: la specifica
- Materiale presentato a lezione: [Astrazione procedurale ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5 B. Liskov (with J. Guttag), Program Development in Java: Abstraction, +Specification and Object-Oriented design
- Astrazione sui dati. I tipi di dato astratti: la specifica
- Materiale presentato a lezione: [Astrazione dati ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5 B. Liskov (with J. Guttag), Program Development in Java: Abstraction, +Specification and Object-Oriented design
- Astrazione sui dati. I tipi di dato astratti: l'implementazione e
l'invariante di rappresentazione
- Materiale presentato a lezione: [RepInvariant ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5 B. Liskov (with J. Guttag), Program Development in Java: Abstraction, +Specification and Object-Oriented design
- Esercitazione: specifica e implentazione di astrazioni di dato in Java: Descrizione
- Esercitazione: specifica di astrazioni: Specifica
- Esercitazione: specifica di Java API: Vector
Specifica Vector - Java Collection Framework (JCF) e Iterazione generalizzata
- Materiale presentato a lezione:[ JCF ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 6 B. Liskov (with J. Guttag), Program Development in Java: Abstraction, +Specification and Object-Oriented design
- Cosa leggere per studiare e approfondire l'argomento: Oracle JCF
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 10 David Eck Java Notes Java Notes
- Sottotipi, ereditarieta' e il principio di sostituzione
- Materiale presentato a lezione: [Principio di Sostituzione ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 7 B. Liskov (with J. Guttag), Program Development in Java: Abstraction, +Specification and Object-Oriented design
- Cosa leggere per studiare e approfondire l'argomento: Il principio di sostituzione di B. Liskov: wikipedia
- Esercitazione: specifica e implentazione di astrazioni di dato in Java: Descrizione
- Esercitazione: esempio di prova di esame. Testo e soluzione della prova:
- Esercitazione: specifica e implentazione di astrazioni di dato in Java: Descrizione
- La programmazione funzionale in OCAML.
- Materiale presentato a lezione [OCAML]
- Cosa leggere per studiare e approfondire l'argomento: Real World Ocaml -- online book
- Linguaggi di Programmazione: macchine astratte, compilatori e interpreti
- Materiale presentato a lezione:[ Linguaggi ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 1: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill
- Linguaggi di Programmazione. Un interprete in OCAML: esempio completo
- Materiale presentato a lezione :Dalle regole operazionali alle regole di interpretazione [ Regole ]
- Materiale presentato a lezione: [ Interprete in OCAML ]
- Cosa leggere per studiare e approfondire l'argomento: Note didattiche on Programming Language Concepts Note (pdf) didattiche
- Linguaggi di Programmazione. I dati e la loro implementazione
nella macchina astratta della realizzazione del linguaggio.
- Materiale presentato a lezione: [ I dati e le strutture di implementazione ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 8: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hil
- Nomi, Binding e la nozione di ambiente
- Materiale presentato a lezione: [Blocchi e Ambiente ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 4: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hil
- Regole, Interprete e compilazione per un linguaggio di espressioni
- Materiale presentato a lezione: [Regole e interprete ]
- Cosa leggere per studiare e approfondire l'argomento: Note didattiche on Programming Language Concepts Note (pdf) didattiche
- Funzioni e procedure: record di attivazione. Scoping Statico e
scoping dinamico
- Materiale presentato a lezione: [Record di attivazione]
- Esercitazione [Simulazione del Run-time]
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 5 e 7: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hil
- Esercitazione: realizzazione in OCAML dell'interprete di un nucleo
di un liguaggio funzionale.
- Materiale presentato a lezione: [Mini CAML]
- Passaggio dei parametri: esempi e esercizi
- Materiale presentato a lezione: [Pass-Parametri]
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 7: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hil
- Esercitazione: specifica e implentazione di un interprete per un linguaggio funzionale: Descrizione
- I sistemi per il controllo dei tipi nei linguaggi funzionali.
- Materiale presentato a lezione: [Sistema dei tipi]
- L'implementazione del typechecker in OCAML [Type Checker (ocaml code)]
- Esercitazione [testo esercitazione ]
- Il paradigma a oggetti: tecniche di implementazione e ]la
struttura del run-time.
- Materiale presentato a lezione: [Classe, oggetti la la JVM ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 10: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill
- The Java Virtual Machine Specification: JVMSE11
- JVM: una review: JVM Internal
- Gestione della memoria: tecniche di garbage collection.
- Materiale presentato a lezione: [Garbage Collection ]
- Un esempio in Java :Java GC (zip)
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hil
- Esercitazione riassuntiva testo
Progetto
- Primo progetto Intermedio Testo
- Second progetto Intermedio Testo
- Nota: Tutti coloro che non hanno presentato i due progetti intermedi devono realizzare e consegnare un progetto complessivo costituito dai due progetti intermedi includendo obbligatoriamente le parti opzionali.
FAQ
Questa parte della pagina raccoglie sotto forma di domande alcune risposte a quelle che sembrano essere le domande e i dubbi piu' comuni tra gli studenti di Programmazione II .Durante la prova scritta è consentito l'uso di libri o appunti?
Durante le prove non è consentito l'uso di libri o appunti.
Iscrizione obbligatoria?
Per partecipare alle prove scritte è necessario iscriversi mediante il portale di iscrizione agli esami dell'ateneo.
Esiste una differenza di programma tra studenti frequentanti e studenti non frequentanti?
No. Il programma e' lo stesso. Chi frequenta e' facilitato.
News
- Risultati prima valutazione intermedia Risultati . Testo e soluzione della prova:
- Risultati seconda valutazione intermedia e risultati complessivi Risultati . Discussione e visione scritti (prima e seconda valutazione intermedia): Lunedi 7 Gennaio 2019 ore 16, ufficio docente Dipartimento di Informatica.
- Risultati Scritto del 14 Gennaio 2019:
- Risultati .
- Traccia della soluzione: testo e traccia sintetica soluzione .
- Traccia della soluzione: descrizione del run-time .
- Risultati Scritto del 13 Febbraio 2019:
- Risultati .
- Traccia della soluzione: testo e traccia sintetica soluzione .
- Traccia della soluzione: descrizione del run-time .
- Risultati Scritto del 25 Giugno 2019:
- Risultati .
- Discussione, visione scritti e calendario discussione progetti: Mercoledi 3 Luglio 2019 ore 16:30, ufficio docente Dipartimento di Informatica.
- Risultati Scritto del 15 Luglio 2019:
- Risultati .
- Discussione, visione scritti e calendario discussione progetti: Mercoledi 24 Luglio 2019 ore 16:30, ufficio docente Dipartimento di Informatica.
- Risultati scritto 11 Settembre 2019:
- Risultati .
- Discussione, visioni scritto e calendario discussione progetti: Martedi 17 Settembre ore 15:30, S studio del docente, Dipartimento di Informatica.
Materiale Didattico Anni Accademici Precedenti
In questa pagina troverete il diario delle lezioni e delle esercitazioni per lì'anno accademico 2017-18 aa2017-18Contatti
Prof. Gian Luigi Ferrari
Ricevimento : Su appuntamento (Dipartimento di Informatica)Tel: 050 22 12 766
E-mail: gian-luigi.ferrari at unipi.it
www: http://pages.di.unipi.it/ferrari