Metodologie di Programmazione

Corso di LAUREA TRIENNALE in INFORMATICA

Corso A

Università di Pisa
Anno Accademico 2008
docente: prof. Marco Bellia


Programma del corso

Testo: B. Liskov, J. Guttag. Program Development in Java. Abstraction, Specification and Object-Oriented Design, Addison-Wesley 2001.

link utili
- Sun: packages delle api di Java 1.4 - java.sun.com/j2se/1.4/docs/api
- Gosling J. and B.J.G. Steele: The Java language Specification (second/third Edition) Addison-Wesley 2005 - java.sun.com/docs/books


Modalita' di esame:

appelli anno 2006 (per i successivi appelli vedi, in calendario attività, i punti relativi)

Svolgimento del corso

Si alterneranno lezioni con esercitazioni in aula sugli argomenti trattati nelle lezioni precedenti

Avvisi

Prima prova intermedia 3 aprile 2008:

testo della prova - esito

Seconda prova intermedia 6 giugno 2008: esito I e II prova e ammissione orale

appello III del 16.6.2008: testo esito

appello IV del 2.7.2008: testo esito

appello V del 18.7.2008: testo esito

appello VI del 18.7.2008: testo esito una soluzione del secondo esercizio

appello I del 19.1.2009: testo esito una soluzione del secondo esercizio

appello II del 9.2.2009: testo esito una soluzione del secondo esercizio


Notizie Essenziali

 Orario delle lezioni

Giorno

Dalle

Alle

Aula

lunedì

11:00

13:00

A

venerdì

11:00

13:00

C

 Calendario delle attività 2006

martedì 14 febbraio

aggiornato 06

Introduzione: Scopo, contesto, motivazioni del corso.
Decomposizione: le tre proprietà. Astrazione: generalizzazione e specifica. Combinazione di decomposizione e astrazione. Quattro forme di astrazione: procedurale, di dato, di iterazione, di gerarchia di tipo.
Interpretazione, Compilazione e run time support. Macchima astratta, intermedia, realizzazioni miste.
Materiale: testo: cap1 testo
introduzione[1] (.pdf)
LList (.pdf)

giovedì 16 febbraio

aggiornato 06

Programmazione orientata a oggetti e meccanismi per: Classi ed ereditarietà, Variabili di istanza e statiche. Le strutture per formalizzare i nuovi meccanismi: Estendiamo la struttura dei descrittori di classe, di oggetto, e dello stack di controllo.
Materiale: copia dei lucidi presentati
Esercizi proposti

martedì 21 febbraio

aggiornato 06

Struttura di Classe e superclasse: semantica per varibili statiche, di istanza, metodi statici e di istanza e costruttore. Inizializzazione o meno delle variabili dichiarate.
Materiale: copia dei lucidi presentati
Esercizi proposti

giovedì 23 febbraio

aggiornato 06

Struttura delle espressioni: new, identificatori e identificatori qualificati. Semantica dell'espressione new. Expression Statement di Java. Regole di transizione naming e path.
Materiale: copia dei lucidi presentati
Esercizi proposti ed una prima soluzione

martedì 28 febbraio

aggiornato 06

Esercizio proposto: discussione sulla soluzione completa (.zip archive).
Struttura dei comandi: dichiarazioni e comandi. Blocco, dichiarazione con inizializzazione (assegnamento come esercizio: vedi esercizi proposti lezione del 21/02).
Materiale: copia dei lucidi presentati

giovedì 2 marzo
aggiornato 06

Struttura dei comandi: invocazione. Modifiche dello stack di controllo: Trasmissione dei parametri per valore, valutazione del blocco. Esercizio: invocazione ed evoluzione dello stack. Discussione della soluzione.
Materiale: completa lucidi del 28/2

martedì 7 marzo

aggiornato 06

Java: Osservazioni generali. Overloading, Overriding, late binding e dispatching. Scoping e Visibilità. Modificatori e Accessibilità. Modificatori di Java. Esecuzione: JIT, JVM. Analisi statica: La tabella R e il record di attivazione. Analisi dei metodi. Analisi delle espressioni e dei comandi. Esercizio: analisi statica di un programma.
Materiale: copia dei lucidi presentati

giovedì 9 marzo

aggiornato 06

Esercitazione
Analisi statica(nota1): Regole di analisi (ambiente R e record di attivazione)
Semantica: Applicazione delle regole di transizione
Materiale:
copia dei lucidi presentati: completare
esercizi proposti: analsi, semantica 1, 2

martedì 14 marzo

aggiornato 06

Modificabilità e condivisione. Trasmissione per valore e oggetti modificabili. Affidabilità: controllo statico dei tipi e casting, garbage collection.
Programmazione procedurale: classi, procedure stand-alone, metodi statici. Astrazione Procedurale: località e modificabilità. Specifica e Implementazione.
Materiale:
copia dei lucidi presentati
Semantica: soluzioni esercizi del 21/2
Specifica di procedure stand_alone: esercizi
cap. 2 e 3 del testo

giovedì 16 marzo
aggiornato 06

Specifica e Implementazione: Overview, requires, effects, modifies. Progettazione di Astrazioni procedurali. Requires: Funzioni parziali e totali.
Eccezioni in Java. Definizione, sollevamento, cattura, mascheramento e riflessione.
Esercitazione. Discussione soluzione esercizio del 9/3 (semantica).
Materiale:
copia dei lucidi presentati
Specifica: soluzioni esercizi del 14/3
Eccezioni e Progettazione di stand_alone: esercizi
cap. 3 e 4 del testo

martedì 21 marzo
aggiornato 06

Eccezioni: Metodologie, Checked e Unchecked. Overview. Esempi e applicazioni: Fattoriale, Liste, Compressione di files.
Astrazioni di dati: introduzione, meccanismo, astrazione, interfaccia, incapsulazione. Specifica, Classe e Valori modificabili e non: modificatori, produttori, osservatori. Funzioni di astrazione e Invariante di rappresentazione. Applicazioni: Insieme di interi, Polinomi, Stack di interi. Materiale:
copia dei lucidi presentati (nota2)
Specifica dati astratti: esercizi
cap. 5.1, 5.2, 5.3, 5.5 del testo

giovedì 23 marzo
aggiornato 05

Astrazione di dati: discussione esercizio 5 Metodi toString e repOk.
Implementazione: Invariante e data type induction. Correttezza e verifica.
Iniettività: Benevolent side effects Metodi additionals: clone e equals nei dati modificabili e non modificabili.
Materiale:
copia dei lucidi presentati: completa lucidi del 21/3/06
Specifica dati astratti: esercizio discusso Esercizi proposti:Testo
cap. 5 del testo: completare

martedì 28 marzo
aggiornato 06

I sei punti della metodologia per astrazioni di dati in Java.
Esercitazione: Specifica, Rappresentazione, AF ed I di coppia non modificabile e di Funzione finite estendibili D->C per arbitrarie classi D e C.
Materiale:
Esercizi del testo (cap.1-5)
Esercizi Proposti e Risolti.

giovedì 30 marzo
aggiornato 06
 

Esercitazione: Specifica, Rappresentazione, AF ed I di insieme modificabile di int. Discussione su Invariante: Quando l'invariante consente AF non iniettive. Come sopra per insieme non modificabile di coppie.
Materiale: vedi Proposti e Risolti del 28 marzo.

4-5-6 aprile
aggiornato 06
 

I verifica intermedia
TESTO e SOLUZIONE.
ESITO

8/18 aprile
aggiornato 05
 

interruzione: vacanze

giovedì 20 aprile
aggiornato 05
 

Discussione delle prove del primo compitino: soluzioni esercizio 1 e 3

giovedì 27 aprile
aggiornato 06
 

Esercitazione. Verifica invariante e correttezzadi di dati astratt: Insieme di interi, stack di interi.
Iteratori: Introduzione alle collezioni e alle visite dei componenti di dati strutturati.
Materiale:
Esercizi: Set, Queue_certifica

martedì 2 maggio
aggiornato 06
 

Iteratori: Visite dei componenti di dati astratti strutturati. Generatori come implementazioni dell'interfaccia Iteratori: stato concreto, AF, I, ed implementazione delle operazioni next, hasNext, remove. Classi nested come veicolo per inserire generatori in una classe per dati astratti. Un esempio: intSet con un generatore.
Classi con più generatori: intSet con generatori con filtro e generatori per visite ordinate.
Materiale: copia dei lucidi
Testo: cap. 6
Esercizi proposti (vedi lucidi) e esercizi del testo pag. 144-146

giovedì 4 maggio
aggiornato 06
 

Esercitazione:
Una classe di insiemi con un generatore
Aggiungiamo un secondo generatore: una differente visita e una classe con due generatori
Una classe con 3 generatori: Una visita che filtra elementi
Gerarchia di tipi: motivazioni, classi, interfacce, classi astratte.

martedì 9 maggio
aggiornato 06
 

Gerarchia di tipi: Specializzazione e implementazioni multiple.
Specializzazione: riuso del codice, estensione dello stato concreto (AF e I) ereditarietà o overriding. Esempi: 1) MaxIntSet estende IntSet con il metodo max. 2) CMaxIntSet estende IntSet con Max ed implementa l'interfaccia Comparable. 3) CMaxIntSet estende MaxIntSet ed implementa Comparable.
Implementazione multipla: Estensioni di Classi astratte e partizione del dominio dei valori. Applicazioni. Esempi: Implementazione di liste.
Materiale: Testo: cap. 7 fino a pag. 174
copia dei lucidi

giovedì 11 maggio
aggiornato 06
 

Gerarchia di tipi: I e AF ereditate e nuove. Principio di sostituzione. Condizioni sufficienti: regola della signature, metodi e proprietà. Esempi. La classe delle funzioni finite e la sua estensione nelle funzioni iniettive.
Materiale: Testo: cap. 7 (completare)
copia dei lucidi
una Gerarchia: IntSet e GrowSet

martedì 16 maggio
aggiornato 06
 

Esercitazione. Una gerarchia per StringIntFun, funzioni finite da String in Int, e la sottoclasse InjFun, delle iniettive.
StringIntFun: Specifica, AF, I, implementazione dei metodi, verifica invariante e correttezza di StringIntFun.
PoorInjFun: Specifica, AF, I, implementazione di una prima sottoclasse per InjFun. Dimostrazione di non legalità di PoorInjFun
PoorInjFunB: Specifica, AF, I, implementazione di una seconda sottoclasse per InjFun. Dimostrazione di non legalità di PoorInjFunA
InjFun: Specifica, AF, I, implementazione di una terza sottoclasse per InjFun. Dimostrazione di legalità di InjFun
PoorHierarchy: Testo di un esercizio proposto sull'argomento - Invertiamo la gerarchia tra StringIntFun e InjFun.
Materiale: StringIntFun, PoorInjFun, PoorInjFunB, PoorHierarchy

giovedì 18 maggio
aggiornato 06 

sospensione attività didattica

martedì 23 maggio
aggiornato 06
 

Polimorfismo: Significato come astrazione, Le tre famiglie (generico, di sottotipo, overloading).
Polimorfismo di sottotipo: Top di una gerarchia, uso di classi astratte, e interfacce come top, uso dei tipi esplicito e la classe Class. Situazioni particolari: Container.
Materiale: Testo cap. 8
copia dei lucidi

giovedì 25 maggio
aggiornato 06
 

Esercitazione. Una gerarchia con implementazioni multiple e polimorfismo di sottotipo: Specifica, AF, I, implementazione dei metodi, Verifica invariante, correttezza, sottoclasse legale. Testo e soluzione , AnAdder , Fun

29-30-31 maggio
aggiornato 06
 

II verifica intermedia
ESITO

giovedì 8 giugno aggiornato 06

III appello scritto
TESTO ESITO

giovedì 15 giugno aggiornato 06

III appello orali
aula L1

giovedì 29 giugno aggiornato 06

IV appello scritto
ESITO

giovedì 20 luglio
aggiornato 06

V appello scritto
ESITO

martedì 25 luglio
aggiornato 06

V appello orali
aula seminari ovest: ore 9.30

giovedì 14 settembre aggiornato 06

VI appello scritto
ESITO

mercoledì 20 settembre aggiornato 06

VI appello orali
aula seminari ovest: ore 9.00

lunedì 8 gennaio 2007

I appello scritto
ESITO

giovedì 11 gennaio 2007

I appello: Orale
sala riunioni est: ore 16.00

lunedì 29 gennaio 2007

II appello scritto
ESITO

mercoledì 7 febbraio 2007

II appello: Orale
sala riunioni est: ore 16.00

nota1: versione corretta 15/3/06 con 3 esercizi aggiunti.
nota2: versione corretta (e completa) 24/3/06.