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.