IN490 - Linguaggi di Programmazione - AA 2017-2018
Lezioni
Diario delle lezioni dell'AA 2017-2018
Le lezioni si tengono nel II semestre con
il seguente orario:
- [-] lunedì ore 11.00-13.00 (lezione, Aula 009);
- [-] mercoledì ore 9.00-11.00 (esercitazioni, Laboratorio Informatico);
- [-] giovedì ore 11.00-13.00 (lezione, Aula 311/Laboratorio Informatico).
Lezione n. 1 - Wednesday 28 February 2018
- Presentazione del Corso. Introduzione storica ai linguaggi di programmazione: le origini dei calcolatori elettronici, i primi linguaggi. Il linguaggio assembly (della macchina RAM di S. Cook). Calcolo del logaritmo di un intero in assembly. Assemblatore: traduzione da linguaggio assembly alla lista degli opcodes.
Lezione n. 2 - Thursday 1 March 2018
- Panoramica dei linguaggi di programmazione, in particolare linguaggi funzionali e linguaggi orientati agli oggetti. Primo esempio di programma java. Dichiarazione di classe: attributi e metodi. Metodo main. Compilazione con java compiler (javac). Esecuzione con l'interprete del java bytecode (java).
Lezione n. 3 - Wednesday 7 March 2018
- Linguaggi di alto livello. Linguaggi obiettivo. Implementazione compilativa pura di un linguaggio. Implementazione interpretativa pura. Implementazioni tramite linguaggio intermedio. Il caso di Java, Javabytecode, Java Virtual Machine.
Lezione n. 4 - Thursday 8 March 2018
- Il sistema dei Package. La creazione di classi. L'istanziazione di classi. Metodi costruttori, modificatori e osservatori. La visibilita' dei metodi e delle classi. Implementazione della classe Item. La classe String e la classe Integer. Conversione da String a Integer e a int. Accesso alla documentazione delle classi predefinite.
Lezione n. 5 - Monday 12 March 2018
- Richiami e definizioni formali di tipo di dato, sistema di tipi di un linguaggio di programmazione, sicurezza di un sistema di tipi. Controllo statico e dinamico dei tipi. Astrazione sui dati: interfaccia, implementazione, occultamento dell'informazione, controllo dell'accessibilità.
Lezione n. 6 - Wednesday 14 March 2018
- Classi e oggetti, principi di organizzazione, estendibilità, riuso del codice. Overloading.
Lezione n. 7 - Thursday 15 March 2018
- Ridefinizione di metodi (overriding) e mascheramento di campi (shadowing) Relazione con i sottotipi, supertipo immediato, erditarietà singola e multipla.
Lezione n. 8 - Monday 19 March 2018
- La sintassi dei linguaggi di programmazione. Grammatica di un semplice linguaggio di esempio. Semantica Denotazionale. Semantica Operazionale. Semantica Operazionale del linguaggio dato di esempio. Definizione di Semantica Operazionale. Esempio di Semantica di un programma. Esempio di grammatica ambigua per espressioni aritmetiche. Nomi e Oggetti: introduzione al modo di specificare nomi per oggetti.
Lezione n. 9 - Wednesday 21 March 2018
- Ambiente, associazione di un oggetto a un nome, blocchi di codice: visibilità, Definizione di scope dinamico. Confronto fra scope statico e scope dinamico.
Lezione n. 10 - Thursday 22 March 2018
Lezione n. 11 - Monday 26 March 2018
Lezione n. 12 - Wednesday 28 March 2018
Lezione n. 13 - Thursday 29 March 2018
Lezione n. 14 - Wednesday 4 April 2018
- Problemi legati all'ereditariet\`a di classi: ereditariet\`a a diamante, Modificatori di accesso.
Lezione n. 15 - Thursday 5 April 2018
Lezione n. 16 - Monday 16 April 2018
- Correzione Esonero Modifiche alla classe Filter in vista dell'implementazione del crivello quadratico.
Lezione n. 17 - Wednesday 18 April 2018
Lezione n. 18 - Thursday 19 April 2018
- Selezione dinamica dei metodi: differenza fra Implementazione dell'ereditariet\`a singola con tipi statici usando i record e della copia dei
Lezione n. 19 - Monday 23 April 2018
- Utilizzo di IDE eclipse nello sviluppo Java. Costruzione della classe Matrix.
Lezione n. 20 - Thursday 26 April 2018
- Gestione del controllo mediante eccezioni. Definizione di eccezione. Esempi. Propagazione Cenno al record di attivazione per le
Lezione n. 21 - Monday 30 April 2018
Lezione n. 22 - Wednesday 2 May 2018
Lezione n. 23 - Thursday 3 May 2018
Lezione n. 24 - Wednesday 9 May 2018
Lezione n. 25 - Thursday 10 May 2018
Lezione n. 26 - Monday 14 May 2018
- Implementazione del crivello quadratico: modifcata la classe Filter Discussione sulla implementazione del metodo che ricava la combinazione di righe dipendenti della matrice dei candidati.
Lezione n. 27 - Wednesday 16 May 2018
- Analisi del crivello quadratico: modificare il ciclo principale per alternare le fasi di costruzione della factor-base con quella della fattorizzazione dei candidati. Message passing: una classe puo` comunicare agli oggetti delle classi che hanno visibilita' su di essa, utilizzando gli attributi di classe. Esempio: l'attributo sieve.mode come switch tra le due fasi del programma.
Lezione n. 28 - Thursday 17 May 2018
- Utilizzo delle Java Collections: List, Set, HashMap Breve introduzione alle lambda-expression in Java.
Lezione n. 29 - Monday 21 May 2018
- Java collections: Concurrent HashMap. Implementazione del crivello quadratico: estrazione delle relazioni quadratiche dalla matrice degli esponenti.
Lezione n. 30 - Wednesday 23 May 2018
- Implementazione della classe QuadraticRelation. Implementazione del metodo di estrazione della relazione quadratica.
Lezione n. 31 - Thursday 24 May 2018