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 secondo semestre nelle aule del Polo Didattico Fibonacci, con il seguente orario:- Lunedi: 14:00 -- 16:00 aula A1.
- Martedi: 09:00 -- 11:00 aula A.
- Giovedi: 11:00 -- 13:00 aula A1 ;
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 (specifica e implementazione, tecniche di verifica induttiva), astrazione mediante gerarchie, polimorfismo a' la Java. Tecniche di programmazione concorrente
- 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.
La frequenza non e' obbligatoria ma e' fortemente consigliata. Il corso e' pensato ed organizzato per una frequenza attiva e continua.
Materiale Didattico
Note didattiche per la prima parte del corso: Programming Languages and Techniques, Zdancewic, Pierce, Weirich (2013) download
Numerosi libri sull'argomento sono utili da consultare per gli argomenti trattati nel corso. Non viene indicato un unico libro di testo ma diversi testi di copnsultazione per i differenti argomenti trattati nel corso. Per la parte relativa ai paradimi di programmazione e' consigliata la consultazione di- M. Gabbrielli and S. Martini, Linguaggi di Programmazione: Principi e Paradigmi, McGraw-Hill, 2006
- Michael L. Scott, Programming Language Pragmatics, Third Edition, Morgan-Kaufmann, 2009
- Peter Sestoft Programming Language Concepts, Springer, 2012
- Object-Oriented: B. Liskov (with J. Guttag), Program Development in Java: Abstraction, +Specification and Object-Oriented design, Addison-Wesley, 2000
- The art of multiprocessor programming (Cap 1-2-9), Maurice Herlihy, Nir Shavit, 2012 Elsevier
Testi di consultazione.
-
Bob Harper, Practical Foundations for Programming Languages, Draft Book, CMU, 2011. download (pdf file)
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.
- Il sito web ufficiale di Java Java Site.
- Il sito uffiale per scaricare le versioni piu' recenti della ditribuzione di Java Dowload di Java per tutti i sistemi operativi,
- Java 7 API.
- Java Tutorial.
- Java Code Conventions.
- Java Language Specification.
- The Java Virtual Machine Specification.
- Il sito ufficiale di Java Modeling Language JML. Java Modelling Language (JML) e' un linguaggio di specifica che permette di definire astrazioni procedurali sul modello di programmazione descritto nel corso. Attualmente JML e' disponibile solamente per Java 1.4.2. Le specifiche vengono aggiunte all'interno del codice sorgente Java, tramite commenti dotati di una speciale sintassi che precedono il metodo interessato. Questo significa che il codice JML non viene letto dal compilatore Java, ma solo dagli strumenti di JML.
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 la pagina del sito WEB del dipartimento dedicato alla didattica.
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: [download].
- Astrazioni e metodologie di programmazione
- Materiale presentao a lezione: [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 1 B. Liskov (with J. Guttag), Program Development in Java: Abstraction,Specification and Object-Oriented design
- OCaml e value oriented programming: Primitive lingustiche e
metodi di programmazione
- Materiale presentato a lezione: [download]
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 2-8 delle note Didattiche (Zdancewic, Pierce, Weirich)
- Esempi di programmazione in OCaml (zip file) [download].
- OCaml e strutture mutabili
- Materiale presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 13-14-15 delle note Didattiche (Zdancewic, Pierce, Weirich)
- Esempi di programmazione di moduli in OCaml (zip file) [download].
- Esempi di programmazione di moduli in OCaml (zip file) [download].
- Da OCaml a Java
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 19-20-21 delle note Didattiche (Zdancewic, Pierce, Weirich)
- Una visione Operazionale di Java
- Materiale didattico presentato a lezione: [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 23-24 delle note Didattiche (Zdancewic, Pierce, Weirich)
- Java: Dynamic Dispatch
- Materiale didattico presentato a lezione: [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 25 delle note Didattiche (Zdancewic, Pierce, Weirich)
- Programmare un valutatore di espressioni in OCaml (ml file) [download].
- Java: Eccezioni
- Materiale didattico presentato a lezione: [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 28 delle note Didattiche (Zdancewic, Pierce, Weirich)
- Esercitazione
- Struttura dell'esercitazione: [download(zipfile)].
- Eccezioni una visione operazionale [download].
- Astrazioni sui dati. Specifica dei tipi di dato astratti in
Java.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5 (Liskov)
- Astrazioni sui dati. Specifica dei tipi di dato astratti in
Java.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5 (Liskov)
- Astrazioni sui dati. Implementare tipi di dato astratti in
Java.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5 (Liskov)
- Generici in Java.
- Astrazioni sui dati. Analizzare e validare le proprieta' di astrazioni sui dati. Come impostare il "bug-checking"
- Astrazioni sui dati. Le gerarchie dei titolo e il principio di sostituzione
- Esercitazione
- Struttura dell'esercitazione: [download(zipfile)].
- Esercitazione
- Struttura dell'esercitazione: [download(textfile)].
- Java Collection Framework (JCF) e astrazioni sul controllo: iteratori
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 6 (Liskov)
- Cosa leggere per studiare e approfondire l'argomento: JCF
- Esempio di programmazione con JCF download (text file)
- Esempio di ieratore su un albero binario dowload (java file)
- Linguaggi di programmazione: macchine astrate, compilatori e interpreti
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 1 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- Linguaggi di programmazione: elementi di semantica
operazionale.
Interpreti compilatori e codice intermedio.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Semantica Operazionale eseguibile: Mike Grant Zachary Palmer Scott Smith, Principles of Programming Languages, Cap2. download
- Cosa leggere per studiare e approfondire l'argomento: Semantica Operazionale BigStep e SmallStep,Note di Mathhew Hennessy. download
- Cosa leggere per studiare e approfondire l'argomento: Il codice Intermedio, F.Chow Intermediate Representation Chow, ComACM Nov. 2013. download
- Linguaggi di programmazione: controlli dei tipi e macchine a stack.
- Materiale didattico presentato a lezione [download].
- Sperimentazione in Ocaml: Codice Ocaml degli interpreti presentati a lezione. download (zip file)
- Strutturare i dati nei linguaggi di programmazione.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 8 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- I nomi e la nozione di ambiente.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 4 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- Controllo della sequenza: espressioni e comandi.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 6 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- Funzioni e procedure: le strutture di implementazione.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitoli 5 e 7 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- Implementazione dell'interprete di un semplice linguaggio funzionale
- Materiale didattico presentato a lezione [download].
- Il passaggio dei parametri.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 7 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- Esercitazione.
- Materiale per l'esercitazione [download (zip)].
- Traccia della soluzione download(file .ml)
- Implementazione dei linguaggi orientati a ogetti.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 10 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- Tecniche per la gestione della memoria: Garbage Collection.
- Materiale didattico presentato a lezione [download].
- Cosa leggere per studiare e approfondire l'argomento: Capitolo 5 (Gabbrielli Martini: Linguaggi di Programmazione: Principi e Paradigmi)
- Esercizi: [download (text file)].
Progetto
- PROGETTO SESSIONE INVERNALE: descrizione del progetto download
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 la pagina del sito WEB del dipartimento dedicato alla didattica.
Esiste una differenza di programma tra studenti frequentanti e studenti non frequentanti?
No. Il programma e' lo stesso. Chi frequenta e' facilitato.
News
- Prima valutazione Intermedia 31 Marzo 2014
- Risultati: download
- Testo della prova con soluzione degli esercizi download(pdf file)
- Specifica: download(java file)
- Implementazione: download(java file)
- Implementazione (soluzione alternativa): download(java file)
- Test: download(java file)
-
Seconda valutazione intermedia e risultati complessivi
- Risultati seconda valutazione intermedia: download
- Testo della prova con raccia della soluzione degli esercizi: download
- Risulati complessivi valutazioni intermedie. Sono ammessi direttamente alla prova orale coloro che hanno ottenuto un risultato sufficiente (maggiore o uguale a E) in entrambe le prove in itinere: Risultati Complessivi
- Pre-appello: Martedi 10 Giugno ore 15:00, Dipartimento di Informatica. Contattare direttamente il docente.
- Prova Scritta 12 Giugno 2014:
- Testo della prova scritta download.
- Prova Scritta del 10 Luglio 2014
- Testo della prova scritta download.
- Prova Scritta del 5 Settembre 2014
- Testo della prova scritta download.
- Prova Scritta del 6 Novembre 2014
-
Testo della prova scritta download.
- Progetto di Programmazione Sessione Invernale: download
Materiale Didattico Anni Accademici Precedenti
In questa pagina troverete il diario delle lezioni e delle esercitazioni per lì'anno accademico 2012-13 aa2012-13Contatti
Prof. Gian Luigi Ferrari
Ricevimento : Su appuntamento (Dipartimento di Informatica)Tel: 050 22 12 766
E-mail: giangi at di.unipi.it
www: http://www.di.unipi.it/~giangi