 |
     |
Programmazione a Oggetti
dott. Ivano Salvo anno accademico 2007/08
|
Object
Subject Luca Cardelli, 1995
|
Ultima modifica: 13 dicembre 2007
Introduzione
Il corso di
Programmazione ad Oggetti vengono introdotti i
concetti chiave della programmazione ad oggetti,
poi applicati a specifici linguaggi di programmazione (Smalltalk, Java,
C++).
Sarà dato ampio
spazio alle nozioni di classe, oggetto,
ereditarietà,
incapsulamento, scambio messaggi, polimorfismo e
come queste nozioni possano aiutare a produrre software elegante,
estensibile, riusabile.
Scopo del corso è quello di analizzare i principi base
della programmazione ad oggetti,
inseriti nel contesto dell'evoluzione
dei linguaggi di programmazione,
e quindi analizzare quali obiettivi
persegue e come li raggiunge.
Si cercherà di stimolare non solo l'apprendimento di linguaggi e
concetti,
ma di stimolare la concettualizzazione dei problemi
seguendo la metodologia Object-Oriented.
Programma del corso
- Evoluzione dei linguaggi di Programmazione
- Astrazione sul controllo:
- goto
- programmazione strutturata
- funzioni e procedure
- Astrazione sui dati:
- cella di memoria
- variabili con tipi
- costruttori di tipo
- tipi astratti di Dati
- Unendo astrazione sui dati e sul controllo: la Programmazione
a Oggetti.
- Il linguaggio Java
- Definizione di classi:
- regole di visibilità
- variabili di istanza e di classe;
- creazione degli oggetti; Costruttori.
- definizione di metodi; overloading.
- Definizione di interfacce:
- implementazione di interfacce
- Sottotipaggio.
- tipo statico e dinamico.
- Type Soundness
- polimorfismo indotto dal sottotipaggio.
- Definizione di sottoclassi
- costruttori
- overriding di metodi
- lookup dinamico dei metodi
- relazioni IS-A e IS-LIKE
- metodi, variabili, classi final.
- Eccezioni e Packages
- Tipi Generici
- Cenni ai thread e alla programmazzione concorrente in
Java.
- Cenni alla progettazione di applet e interfacce
grafiche.
Materiale e testi di consultazione
-
Lucidi (a.a. 2007/08)
1. Evoluzione dei Linguaggi di Programmazione, astrazione
(.pdf)
2. Concetti generali della Programmazione a Oggetti
(.pdf)
3. Il linguaggio Java: Aspetti Generali
(.pdf)
4. Definizioni di Classi in Java
(.pdf)
5. Interfacce e Sottotipi
(.pdf)
6. Ereditarietà
(.pdf)
7. Eccezioni
(.pdf)
8. Astrazioni sui Dati e Iteratori
(.pdf)
9. Tipi Generici
(.pdf)
Esempi e Programmi visti a Lezione
Libri
-
Smalltalk
Esistono numerosi testi scaricabili in formato pdf in rete
su
Smalltalk
di ottima
qualità. Personalmente seguo prevalentemente il testo di John Hunt:
Smalltalk and Object Orientation: an Introduction.
In particolare i primi capitoli generali sulla programmazione ad oggetti e
i capitoli da 4 a 15 per quanto riguarda Smalltalk.
Il libro di Ted Kaehler e Dave Patterson
A Taste of Smalltalk è molto simpatico, di piacevole lettura,
tutto concentrato attorno al problema della Torre di Hanoi. E contiene
eccellenti citazioni all'inizio di ogni capitolo!
Informazioni interessanti si trovano anche nel libro di Alex Sharp
SmallTalk by Example: the Developer's Guide"
-
Java
Il libro di Bruce Eckel,
Thinking in Java, liberamente scaricabile dalla rete, contiene tutte
le informazioni necessarie per il corso. E' un po' prolisso (piu' di mille
pagine), ma non c'e' di che spaventarsi: e' di facile lettura.
Esistono numerosi tutorial in rete: vivamente consigliato e' il
Java Sun
Tutorial, che tra l'altro contiene nell'ipertesto anche le specifiche
di molte classi e librerie standard.
Sul sito della Sun si puo' anche
scaricare il compilatore ed essere aggiornati sulle ultimi sviluppi di
Java.
-
ML: Esistono numerosi libri e tutorial disponibili in rete su
ML.
Vi consiglio di andare al sito ufficiale di Standard ML New Jersey per trovare sia
compilatori che tutorial on line.
Potete consultare ad esempio le note di Riccardo Pucella:
Notes on
Programming Stardard ML of New Jersey (ai fini di questo corso solo
i capitoli 1 e 2) o quelle di Robert Harper.
Homework
Quest'anno saranno assegnati 6-8 homework, ciascuno studiato per stimolare
la riflessione su uno o più argomenti visti a lezione.
E' preferita la consegna in forma cartacea durante la lezione che
si svolge in corrispondenza della data di consegna. Chi fosse
impossibilitato, può inviarlo via mail al docente, indicando
[PROGOGG] nel subject della mail.
Esame Scritto
Ecco finalmente i risultati dello scritto.
Letture consigliate:
-
Design Principles behind SmallTalk
Daniel H. H. Ingalls, 1981
Interessante articolo sull'idea di costruire un linguaggio attorno ad
alcune (poche!) metafore ben scelte. Da leggere assolutamente.
-
Go To Statement Considered Harmful
Edsger W. Dijkstra, 1968
Un grande classico sempre attuale per la freschezza espositiva di un
grande "padre fondatore" degli algoritmi e dei linguaggi di
programmazione. Da leggere assolutamente.
Compilatori e tool software
Un buon compilatore Smalltalk da scaricare può essere la versione
non commerciale di Visual Works, reperibile sul sito della
Cincom .
Basta scaricare la virtual machine per la vostra architettura e il
pacchetto base di classi.
Se siete utenti Linux o Windows, potete anche scaricare il compilatore
exept .
Esonero
C'è stata una prova intermedia, giovedì 15 novembre
2007
La prova ha attribuito i seguenti bonus riportati nella tabella dei
risultati.
Come sempre, interessante la distribuzione distribuzione spaziale dei
voti.
Nota: Alcuni si troveranno con un risultato che differisce di 1
punto rispetto a quello calcolato in aula: ciò è dovuto a
un'errata valutazione della domanda 23, la cui risposta esatta è la
(c) e non la (a) come detto in aula.
Spero che ognuno di voi, aldilà dei bonus, abbia
fatto una serena autovalutazione della propria
preparazione.
A breve la pubblicazione delle soluzioni commentate
Ecco i test degli anni precedenti: i curiosi potranno concedersi un
piacevole detour nel mondo dei
Reality TV,
o in quello dei Fumetti.
Abbastanza istruttive, a mio modo di vedere, le soluzioni commentate,
che vi sveleranno i segreti di
Pupe e Secchioni
e di Paperi e Xman.
Progetto
Ecco finalmente il testo del progetto: Scacchi in Java
La discussione avverrà in concomitanza con l'orale, e la consegna
sarà entro tre giorni prima della data stabilita per l'orale.
Per facilitare la discussione, chi è in possesso di un portatile,
può portarlo all'esame. Altrimenti verificate che il vostro
progetto sia compilabile da riga di comando con l'istruzione javac.
(qualche IDE organizza i package in modo particolare).
Orario
-
Lezioni: mercoledì 16-18 e giovedì 16-17;
Aula 3, Dip. Fisica, Istituto Fermi.
-
Ricevimento studenti (Via Salaria, stanza 310): giovedì,
ore 11:30 - 12:30.
Modalità d'esame
Quest'anno per superare l'esame sarà necessario consegnare gli
homework e un progetto e sostenere l'orale.
Chi non consegna almeno 3
homework durante il corso, dovrà sostenere una prova
scritta.
La prova orale, consisterà nella discussione del progetto.
Nel corso del colloquio saranno poste domande sui contenuti del
corso (quindi studiate!)
Consegna
Progetti
I progetti andranno consegnati qualche giorno prima della data
dell'esame.
Per la consegna spedire un file (in formato tar.gz o .zip, non rar!) al
docente (salvo[_at_]di.uniroma1.it).
La consegna del progetto funge automaticamente da prenotazione.