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
|
|