Home | Search | Help  
Home Page Università di Genova

Corso di Linguaggi di Programmazione

Programma - Crediti previsti = 7 + 2 laboratorio

Il programma è pensato sulla base di 1 credito = circa 8 h di lezione "media" (cioè con anche esempi, esercizi etc.) oppure di esercitazione guidata in laboratorio + 16 h di approfondimento dello studente.

Elementi di un linguaggio di programmazione: crediti 2 + 0.5

  • Generalità, storia, diversi paradigmi
  • Sintassi
    Stringhe e linguaggi, grammatiche libere da contesto, alberi di derivazione, ambiguità e tecniche per eliminarla, sintassi astratta.
  • Schema di implementazione di un linguaggio
    Analisi lessicale, sintattica e statica dei linguaggi di programmazione. Nozione di semantica statica e dinamica. Schema di implementazione di un linguaggio giocattolo guidata dalla definizione formale: analizzatore lessicale (scanner), analizzatore sintattico (parser), analizzatore statico (type-checker) ed interprete propriamente detto.

Paradigma Object Oriented: crediti 3.5 + 1

  • Introduzione, motivazioni e note storiche
  • Oggetti e classi
    Classi. Riferimento all'oggetto ricevente. Diverse nozioni di uguaglianza tra oggetti e copia. Clientship. Confronto tra oggetti e i puntatori. Accessibilità nelle classi clienti. Inizializzazione e deallocazione di oggetti. Variabili e metodi di classe. Esempi di programmazione "ad oggetti".
  • Inheritance e sottotipo
    Classi eredi, overriding, binding dinamico. Sottotipo, tipi statici e dinamici. Interfacce e classi astratte. Importanza dell'inheritance per lo sviluppo incrementale del software e confronto con la programmazione "per casi". Un esempio di implementazione di tipo di dato (le liste). Esempi di classi che codificano tipi primitivi. Inheritance e accessibilità. Uso di super. Costruttori e inheritance. Varianti della nozione di inheritance.
  • Java
    Le nozioni precedenti nel caso di Java. Generalità. Array. Hiding di campi. Regole sull'overriding. Risoluzione dell'overloading. Casting. Eccezioni. Package. Accessibilità e modificatori. Inizializzatori. Tipi enumerazione. Cenni ai tipi generici. Cenni alle classi predefinite. Confronto con C e C++.

Paradigma Funzionale: crediti 1 + 0.5

  • Introduzione, motivazioni e note storiche.
  • Concetti base: espressioni che denotano funzioni, funzioni higher-order, polimorfismo, applicazione parziale, currying.
  • Uso del sistema Caml.
  • Simulazione di algoritmi imperativi. Parametri di accumulazione.
  • Liste ed algoritmi relativi. Funzioni higher order su liste (map, itlist).
  • Tipi user-defined (prodotto e somma). Tipi ricorsivi. Alberi.
  • Tipi Caml e inferenza di tipo.

Per suggerimenti e commenti si prega di scrivere a:
Elena Zucca zucca@disi.unige.it

Ultima modifica: 10 ottobre 2007