Programmazione
I e laboratorio - corso A - a.a. 2003-04
Programma d'esame del corso, con paragrafi da studiare sul libro di testo
Principi fondamentali della programmazione imperativa tipata procedurale
e introduzione a Java.
Capitolo 1 – Introduzione
- 1.1 Che cosa è un computer?
- 1.2 Che cos’è la programmazione?
- 1.3 L’anatomia di un computer
- 1.4 Tradurre in codice macchina programmi leggibili dalle persone
- 1.5 Linguaggi di programmazione
- 1.6 Il linguaggio di programmazione Java
- 1.7 Prendere confidenza con il computer
- 1.8 Compilare un semplice programma
- 1.9 Errori
- 1.10 Il processo di compilazione in JAva, bytecode
- Interpretazione e macchina virtuale Java.
- Le aree di memoria della macchina virtuale Java (vedi Calendario lezioni)
Capitolo 2 - Introduzione a classi e oggetti
- 2.1 Usare e costruire oggetti
- 2.2 Variabili di tipo riferimento-a-oggetto.
--- Nota bene: sul libro
di testo tali variabili sono chiamate variabili oggetto:
si tratta di un'espressione fuorviante e non molto corretta,
che non si deve usare.
- 2.3 Definire una classe
- 2.4 Provare ad usare una classe.
--- Nota bene: nella traduzione italiana del libro di testo
viene usato il terminecollaudare, non del tutto appropriato.
- 2.5 Variabili di istanza (instance variables), o campi non-statici,
o campi degli oggetti.
--- Nota bene: nella traduzione italiana del libro di testo l'espressione originale inglese instance variables è tradotta
erroneamente come variabili istanza;
tale espressione non deve essere usata: si prega di correggere il libro,
aggiungendo a mano la preposizione "di" tutte le volte
in cui compare la suddetta espressione.
- 2.6 Costruttori
- 2.7 Progettare l'interfaccia pubblica di una classe
- 2.8 Commentare l'interfaccia pubblica
- 2.9 Realizzare una classe
- 2.10 Tipi di variabili
- 2.11 Metodi: parametri espliciti e parametro implicito this
Capitolo 3 – Tipi di dati fondamentali
- 3.1 Tipi numerici, inclusi i caratteri.
- 3.2 Assegnazioni
- 3.3 Costanti
- 3.4 Aritmetica e funzioni matematiche
- 3.5 Invocare metodi statici
- 3.6 Conversione dei tipi di dati
3.7 Stringhe
- 3.8 Leggere dati in ingresso
- 3.10 Confronto fra tipi primitivi e tipi di riferimento a oggetto
--- Nota bene: nella traduzione italiana del libro di testo il titolo del paragrafo è ERRATO
- Le aree di memoria della macchina virtuale Java (vedi Calendario lezioni):
Rappresentazione dello stato della memoria durante
l'esecuzione di un programma: pila e heap.
Capitolo 5 – Decisioni (deve essere letto e studiato per intero)
5.1 L’istruzione if 5.2 Confrontare valori
5.3 Alternative multiple 5.4 Utilizzare le espressioni
booleane
Capitolo 6 – Iterazioni (deve essere letto e studiato per intero)
6.1 Cicli while 6.2 Cicli for (e cicli do)
Argomenti avanzati 6.2 (pag. 247-248): Visibilità delle variabili definite nell'intestazione del for
Errori comuni 6.3 e 6.4 (pag. 248-250)
6.3 Cicli annidati 6.4 Elaborazione dei dati in ingresso
Argomenti avanzati 6.8: Invariante di ciclo ed esponenziale veloce;
sullo stesso argomento vedere anche le slides sull'espenziale veloce
Note di cronaca 6.2: Dimostrazioni di correttezza
Capitolo 7 – Progettazione di classi
7.1 Scegliere le classi 7.3 Metodi di accesso e metodi
modificatori 7.4 Effetti collaterali
7.5 Precondizioni
7.6 Metodi statici
7.7 Variabili statiche
7.8 Visibilità
Capitolo 10
10.7.1 Ridefinire il metodo toString
Capitolo 12 – Array e vettori: soltanto la parte riguardante gli array
- 12.4 Dichiarare array e accedervi
- 12.5 Leggere e copiare array
- 12.6 Array riempiti solo in parte
- Algoritmi semplici su array di interi totalmente, parzialmente riempiti e su sottoarray:
- somma degli elementi e media
- inversione: su un secondo array e sul posto
- verificare se un array e' l'inverso di un array dato
- verificare se un array gode di una proprieta' data, es. tutti i suoi elementi sono pari
- lunghezza della max sequenza positiva
- Come risolvere problemi algoritmici su array per mezzo dell' iterazione
usando gl'invarianti di ciclo (vedi Calendario delle lezioni).
Capitolo 16 – Ordinamento e ricerca
- 16.6 Effettuare ricerche (con analisi della complessità temporale)
- Ricerca sequenziale (vedi procedure illustrate a lezione).
- Ricerca sequenziale su array ordinati (vedi procedure allegate al Calendario delle lezioni)
- 16.7 Ricerca binaria
- Ricerca del minimo (del massimo, del viceminimo) in un array
- Il problema della bandiera tricolore (vedi Calendario lezioni)
- Eliminazione di elementi in un array con compattazione e non
- Inserimento in array ordinato (vedi lucidi ed esempi)
- Algoritmi di ordinamento (vedi lucidi ed esempi):
- Creazione di una copia ordinata di un array non ordinato, per inserimenti successivi.
- Ordinamento per inserimento (senza creazione di un nuovo array) (vedi lucidi ed esempi)
Analisi della complessità temporale nei casi peggiore, migliore, e medio.
- Ordinamento per selezione, con analisi della complessità temporale:
- 16.1 Ordinamento per selezione
- 16.3 Analisi delle prestazioni
- Algoritmi di fusione, intersezione e unione di array ordinati (vedi esempi), con analisi della complessità temporale.
- 16.8 Esplorare e ordinare dati veri.
|