DIPARTIMENTO   DI   INFORMATICA
Università di Torino

Programmazione I e laboratorio - corso B - a.a. 2003-04

Programma del corso, con paragrafi da studiare sul libro di testo

Sistemi di numerazione: decimale, ottale, binaria, esadecimale;
operazioni aritmetiche e numeri con la virgola in basi diverse (vedi slides del corso).

Principi fondamentali della programmazione imperativa tipata procedurale
e introduzione a Java (vedi slides del corso).

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


Le aree di memoria dell'esecutore java (vedi slides)
Rappresentazione dello stato della memoria durante l'esecuzione di un programma (vedi slides).


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: sul libro di testo, nella traduzione italiana, viene usato il termine collaudare, non del tutto appropriato.

2.5 Variabili di istanza (instance variables), o campi non-statici, o campi degli oggetti
NOTA BENE: sul libro di testo l'espressione originale inglese instance variables è tradotta erroneamente come variabili istanza; tale espressione non deve MAI 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 (vedi materiale didattico)

3.1 Tipi numerici, inclusi i caratteri (3.9, ma vedi materiale didattico)
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: sul libro di testo, nella traduzione italiana, il titolo del paragrafo è ERRATO


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.4, 6.5, 6.6 (il problema del "ciclo e mezzo", le istruzioni break, leggere dati dalla consolle)
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 Il tipo universale Object
10.7.1 Ridefinire il metodo toString
10.7.2 Ridefinire il metodo equals


Capitolo 12 – Array e vettori: solo la parte riguardante gli array

12.4 Dichiarare array e accedervi
12.5 Copiare array
12.6 Array riempiti solo in parte
Semplici algoritmi sugli array (vedi esercizi)

Come risolvere problemi algoritmici su array per mezzo dell' iterazione
usando gl'invarianti di ciclo (vedi lucidi).


Capitolo 16 – Ordinamento e ricerca

16.6 Effettuare ricerche (con analisi della complessità temporale)
Ricerca sequenziale (vedi procedure illustrate a lezione).
Intersezione di array non ordinati, ecc. (vedi procedure illustrate a lezione)
Ricerca sequenziale su array ordinati (vedi procedure illustrate a lezione)
16.7 Ricerca binaria

Ricerca del minimo (o del massimo) in un array
Il problema della bandiera tricolore (vedi lezioni)
Eliminazione di elementi in un array (vedi esercizi)
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
Ricerca binaria, fusione, intersezione e unione di array ordinati (vedi esempi), con analisi della complessità temporale.

16.8 Esplorare e ordinare dati veri.



[Elio Giovannetti's HOME] [Corso di Laurea e Diploma in Informatica] [Department's HOME]

Last update: Nov 19, 2001