Linguaggi Dinamici
Informazioni generali dell'insegnamento
Nome dell'insegnamento: | Linguaggi
Dinamici [MN1-1151] |
Docenti: | Giacomo Cabri
Mauro Andreolini
|
Corso di Studio: | Informatica [16-209] |
Tipologia: | Caratterizzante |
CFU: | 9 |
Periodo Didattico: | Secondo Ciclo Semestrale |
Obiettivo dell'insegnamento
Il corso intende fornire una presentazione dei principali linguaggi
dinamici di programmazione (Perl, Ruby, Python, PHP), con particolare
riguardo alle caratteristiche innovative che li differenziano dai
linguaggi statici (C, C++, Java).
Gli obiettivi formativi sono molteplici:
- mettere lo studente nelle condizioni di comprendere bene i vantaggi
derivanti dall'uso di tali caratteristiche dinamiche, limitandone al
tempo stesso ben noti "potenziali" svantaggi (come, ad esempio, una
minore robustezza ed efficienza rispetto ai linguaggi statici);
- presentare una visione d'insieme di tali caratteristiche, tale da
rendere semplice lo studio e l'assimilazione di un nuovo linguaggio;
- arricchire la formazione di base con ulteriori strumenti di
programmazione utili in diversi contesti (applicazioni Web-based,
sistemi di interfacciamento con database, scripting avanzato);
- fornire strumenti per la scelta del linguaggio dinamico piadatto al
contesto considerato.
La presentazione degli argomenti del corso saraffiancata allo studio
dettagliato di linguaggi di programmazione dinamici, in particolare
Perl e Python.
Al termine del corso, gli studenti avranno modo di
verificare le competenze acquisite tramite il progetto e l'implementazione
di una applicazione tipo.
Programma dell'insegnamento
Linguaggi dinamici
- Introduzione e concetti generali
- Pro e contro di un linguaggio dinamico
- Caratteristiche di un linguaggio dinamico
L'ambiente di esecuzione di un linguaggio dinamico
- Formati portabili del codice: byte code, syntax tree
- Compilazione, Byte Compiling, Just in Time Compiling, interpretazione
- Struttura di una macchina virtuale
Caratteristiche di un linguaggio dinamico
- Tipizzazione dei dati (forte, debole, statica, dinamica)
- Gestione dinamica della memoria (allocazione, distruzione, reference,
garbage collection)
- Gestione dinamica del codice (callback, closure)
- Gestione degli errori a tempo di esecuzione
- Ispezione e modifica del comportamento di un programma a tempo di
esecuzione (metaprogramming, reflection, type introspection)
Una introduzione a Python
Teoria e sperimentazioni
- Costrutti di base
- Studio delle caratteristiche dinamiche
- Gestione file e directory
- Organizzazione "ad oggetti"
- Creazione di strutture dati complesse
- Documentazione
- Debugging
Applicazioni avanzate
- Metaprogramming
- Text processing ed espressioni regolari
- Interfacce grafiche
- Applicazioni scientifiche
- Programmazione remota e distribuita
- Unit testing
Orario delle lezioni
Orario per l'AA 2010/11:
- Lun 11.00 - 13.00, Lab Zironi Dip. Matematica;
- Mar 11.00 - 13.00, Lab Zironi Dip.
Matematica;
- Mer 11.00 - 13.00, Lab Zironi Dip. Matematica;
Orario per l'AA 2009/10:
- Mar 11.00 - 13.00, Lab Zironi Dip.
Matematica;
- Mer 11.00 - 13.00, Lab Zironi Dip. Matematica;
- Gio 14.00 - 16.00, Lab Zironi Dip. Matematica;
Avvisi (in ordine cronologico inverso)
È stata pubblicata la
traccia per il progetto 2009/10.
La lezione di giovedì 11 marzo 2010 si tiene
regolarmente.
La lezione di mercoledì 10 marzo 2010 non si tiene a
causa della neve.
Materiale didattico
Slide
Caratteristiche dei linguaggi dinamici
Presentazione del
corso
Introduzione al linguaggi
dinamici
Architettura dei
linguaggi dinamici
Esempio
(codice visto a lezione)
Tipizzazione
(codice visto a lezione)
Gestione della memoria
(codice visto a lezione)
Gestione del codice
(codice visto a lezione)
Librerie software
(codice visto a lezione)
Supporti allo sviluppo
(codice visto a lezione)
Il linguaggio Python
Introduzione a
Python
(codice visto a lezione)
Esercitazione
sui concetti base di Python
(esempi di soluzioni)
Moduli in Python
(codice visto a lezione)
Oggetti in
Python
(codice visto a lezione)
Esercitazione
sugli oggetti in Python
(esempi di soluzioni)
Gestione dei file in
Python
(codice visto a lezione)
Esercitazione
su sulla gestione dei file in Python
(esempi di soluzione)
Documentazione in Python
(codice visto a lezione)
Esercitazione su Documentazione in Python
(esempi di soluzioni)
Unit Testing in Python
(codice visto a lezione)
Esercitazione su
Unit testing in Python
(esempi di soluzioni)
Esercitazione su
pickle e liste in Python
(esempi di soluzioni)
Applicazioni avanzate
Metaprogramming in Python
(Versione stampabile)
(esempi visti a lezione)
Testo esercitazione - Metaprogramming in Python
Codice sorgente applicazione zoo
Soluzione
Text processing in Python
(Versione stampabile)
(esempi visti a lezione)
Testo esercitazione - Text processing in Python
File di log log.txt
Soluzione
Interfacce grafiche in Python
(Versione stampabile)
Interfacce grafiche con Glade
(Versione stampabile)
(esempi visti a lezione)
Logging e configurazione in Python
(Versione stampabile)
(esempi visti a lezione)
Testo esercitazione - GUI, config, logging in Python
File di configurazione zoo.ini
File di log zoo.log
Soluzione
Programmazione multi threaded in Python
(Versione stampabile)
(esempi visti a lezione)
Opzioni da linea di comando in Python
(Versione stampabile)
(esempi visti a lezione)
GUI multi threaded in Python
(Versione stampabile)
(esempi visti a lezione)
Testo esercitazione - GUI multithreaded, opzioni linea di comando in Python
Soluzione
Calcolo scientifico in Python
(Versione stampabile)
(esempi visti a lezione)
Oggetti remoti in Python
(Versione stampabile)
(esempi visti a lezione)
Testo esercitazione - Calcolo scientifico, oggetti remoti in Python
Soluzione
Strumenti software
Linux e MacOS
l'interprete di Python è di solito disponibile nelle distribuzioni
Linux e nelle versioni più recenti di MacOs.
Windows
È possibile installare il seguente interprete:
Python (http://www.python.org) versione
2.6
Eclipse
È disponibile un plugin per Eclipse:
PyDev (Python http://pydev.org/)
Esami
L'esame è composto dallo sviluppo di un progetto in
linguaggio Python, e da una prova orale.
Il progetto viene svolto in gruppi di
2 persone.
Quando il gruppo è pronto a iniziare il lavoro, contatta i
docenti che forniscono una traccia su una delle seguenti
tematiche scelta dal gruppo:
- gestione distribuita di sensori
- calcolo parallelo
- analisi distribuita/parallela di testi di grandi dimensioni
I requisiti non funzionali che deve avere il progetto sono:
- sfruttamento delle caratteristiche di
dinamicità del linguaggio
- uso delle librerie disponibili
- produzione di documentazione dei moduli
- presenza di una interfaccia grafica
- uso di PyRO per la distribuzione degli oggetti
- unit testing dei moduli sviluppati
- portabilità del codice sulle principali architetture
Il progetto insieme alla documentazione deve essere inviato via email ad entrambi i docenti
tassativamente entro 7 giorni prima della data dell'appello in cui
si intende sostenere l'esame.
Il progetto deve essere contenuto in un archivio compresso
portabile (ad es. .zip, .tar.gz, .tgz, ...).
L'esame orale verterà su tutto il programma presentato
durante l'insegnamento.