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:

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.

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':

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: Per la parte relativa alla programmazione di interpreti in OCAML si consulti:

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

OCAML.

  1. 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.
  2. Il sito web del libro Introduction to Objective CAML di Emmanuel Chailloux, Pascal Manoury and Bruno Pagano.
  3. Developing Applications with OCAML di Jason Hickey (versione preliminare)
  4. Java Site.
  5. Il sito uffiale per scaricare le versioni piu' recenti della ditribuzione di Java Download di Java per tutti i sistemi operativi,
  6. Java 10 API.
  7. Java Standard Edition
  8. Java Tutorial.
  9. Java Code Conventions.
  10. Java Language Specification.
  11. The Java Virtual Machine Specification.

Eclipse.

    Eclipse Home Page.

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.

  1. Introduzione al corso. I linguaggi di programmazione: paradigmi e metodologie di programmazione
  2. La transizione da C a Java: classi e oggetti
  3. Tipi statici, tipi dinamici e Dynamic Dispatch in Java
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. Esercitazione: specifica e implentazione di astrazioni di dato in Java: Descrizione
  10. Esercitazione: specifica di astrazioni: Specifica
  11. Esercitazione: specifica di Java API: Vector Specifica Vector
  12. 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
  13. 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
  14. Esercitazione: specifica e implentazione di astrazioni di dato in Java: Descrizione
  15. Esercitazione: esempio di prova di esame. Testo e soluzione della prova:
    1. Testo
    2. Gamae (Java File)
    3. ArrayGame (Java File)
    4. FullGame (Java File)
  16. Esercitazione: specifica e implentazione di astrazioni di dato in Java: Descrizione
  17. La programmazione funzionale in OCAML.
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. Esercitazione: realizzazione in OCAML dell'interprete di un nucleo di un liguaggio funzionale.
    • Materiale presentato a lezione: [Mini CAML]
  25. 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
  26. Esercitazione: specifica e implentazione di un interprete per un linguaggio funzionale: Descrizione
  27. I sistemi per il controllo dei tipi nei linguaggi funzionali.
  28. Esercitazione [testo esercitazione ]
  29. 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
  30. 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
  31. Esercitazione riassuntiva testo

Progetto

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

Materiale Didattico Anni Accademici Precedenti

In questa pagina troverete il diario delle lezioni e delle esercitazioni per lì'anno accademico 2017-18 aa2017-18

Contatti

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
a