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: 11:00 -- 13:00 aula c.
- 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 (2013) 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 uffiale per scaricare le versioni piu' recenti della ditribuzione di OCaml OCaml Download
- 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 8 API.
- Java Standard Edition
- Java Tutorial.
- Java Code Conventions.
- Java Language Specification.
- The Java Virtual Machine Specification.
Eclipse.
Programming Languages.
-
DMOZ Programming Languages Project.
- Una visione di prospettiva sui linguaggi di scripting di John K. Ousterhout download.
Esame
L'esame consiste di un progetto, una prova scritta e di una prova orale. Per accedere alla prova orale è necessario aver superato la prova scritta e avere una valutazione postiva del progetto. La prova orale consiste di norma nella discussione della prova scritta e, opzionalmente, anche di altri argomenti del programma del corso. 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 (parte 1)]. [Java Exception -- pdf (parte 2)].
- 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
- Esercitazione: programmazione in java
- Java programming: Descrizione
- Java programming: Traccia soluzioni (zip)
- 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 ]
- [Esempio: Specifica Java Vector ]
- 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: implementazione
- Materiale presentato a lezione: [Astrazione dat: implementazionei ]
- 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
- Gerarchie di tipi: specifica e implementazione
- Materiale presentato a lezione: [Astrazione dat: Gerarchie dei tipi ]
- 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
- 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
- Esercitazione: specifica e implementazione di astrazioni in Java
- Struttura e indicazioni
- [Testo Esercizi ]
- [Soluzioni (zip) ]
- Esercitazione: specifica e implementazione di astrazioni in Java
- Struttura e indicazioni
- [Testo e soluzione esercizi ]
- Esercitazione: specifica e implementazione di astrazioni in Java
- Struttura e indicazioni
- [Testo Esercizi ]
- [Soluzione Esercizi (zip) ]
- 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
- Linguaggi di Programmazione: macchine astratte, compilatori e interpreti
- Materiale presentato a lezione:[ Linguaggi ]
- Cosa leggere per studiare e approfondire l'argomento: Cosa leggere per studiare e approfondire l'argomento: Capitolo 1: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill
- Tecniche di programmazion e in OCAML.
- Materiale presentato a lezione: [OCAML]
- Cosa leggere per studiare e approfondire l'argomento: Real world Ocaml: online book
- Programmare un interprete in OCAML.
- Materiale presentato a lezione: [download pdf]
- Codice dell'interprete: Ocaml Code
- Elementi di semantica operazionale: interpreti.
- Materiale presentato a lezione: [Interpreti e semantica operazionale]
- Cosa leggere per studiare e approfondire l'argomento: Introduzione alla semantica operazionale
- Elementi di semantica operazionale: type checking
- Materiale presentato a lezione: [download pdf]
- Cosa leggere per studiare e approfondire l'argomento: Introduzione al type checking
- Dati e loro rappresentazione.
- Materiale presentato a lezione: [Dati]
- 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
- Funzioni e procedure: recordi di attivazione
- Materiale presentato a lezione: [Record di attivazione]
- 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
- La struttura di un interprete di un linguaggio funzionale.
- Materiale presentato a lezione: [Interprete mini ML]
- Cosa leggere per studiare e approfondire l'argomento: Nota didattica: Note on Programming Language Concepts Note (pdf)
- Esercitazione.
- Materiale presentato a lezione: [Testo Esercitazione]
- Il Pradigma a oggetti: tecniche di implementazione.
- Materiale presentato a lezione: [Classi, oggetti e ereditarieta' ]
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 10: M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hil
- 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: simulazione del run time stack e visione
dell'ambiente
Run time stack
li>La struttura della Java Virtual Machime.
- Materiale presentato a lezione: [Java Virtual Machine ]
-
Cosa leggere per studiare e approfondire l'argomento:
- The Java Virtual Machine Specification: JVMSE8
- JVM: una review: JVM Internal
- Esercitazione: implementazione di un linguaggio funzionale con diochiarazioni globali [ testo esercitazione ] Soluzione: soluzione esercizio 3 Soluzione: soluzione esercizio 5
- Esercitazione: Esercizi [ testo esercitazione ]
- Esercitazione: definizione e implementazione di interpreti [ testo esercitazione ]
- Esercitazione: Simulazione Struttura Run Time [ testo esercitazione ]
Progetto
- Primo progetto Intermedio Testo
- Seconod progetto Intermedio Testo
- Per la sessione estiva (Giugno - Luglio 2018), il progetto da elaborare e consegnare prima della discussione orale consiste nei due progetti intermedi.
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 Risultati .
- Orali Gli studenti che hanno superato entrambe le prove intermedie possono sostenere la prova orale il 10 Gennaio 2018 a partire dalle ore 10:30 presso l'ufficio del docente al Dipartimento diInformatica. Per iscriversi e' indispensabile inviare una mail al dcoente con la richiesta di iscrizione entro il giorno 8 Gennaio 2018.
- Risultati primo appello (Gernnaio 2018) Risultati . Testo e soluzione della prova scritta:
- Discussione scritti e calendario orali: Lunedi 22 Gennaio ore 16:30 Ufficio Docente
- Risultati secondo appello (Febbraio 2018)
Risultati .
- Testo e soluzione della prova scritta: zip file
- Discussione scritti e calendario orali: Mercoledi 14 Febbraio ore 16:30 Ufficio Docente
- Risultati Straordinario (Aprile 2018)
Risultati
- Testo e soluzione della prova scritta: zip file
- Discussione scritti e calendario orali: Martedi 24 Aprile ore 16:30 Ufficio Docente
- Risultati Appello 20 Giugno 2018
Risultati
- Discussione scritti e calendario orali: Mercoledi 27 Giugno ore 16:00 Ufficio Docente
- Risultati Appello 19 Luglio 2018
Risultati
- Discussione scritti e calendario orali: Venerdi 20 Luglio Giugno ore 9:30 Ufficio Docente
- Risultati Appello 4 Settembre 2018
Risultati
- Discussione scritti e orali: Lunedi 10 Settembre ore 15:30 Ufficio Docente
Materiale Didattico Anni Accademici Precedenti
In questa pagina troverete il diario delle lezioni e delle esercitazioni per lì'anno accademico 2015-16 aa2015-16Contatti
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