DIPARTIMENTO   DI   INFORMATICA
Università di Torino

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.


[Barbara Demo's HOME] [Corsi di laurea in Informatica] [Department's HOME]

Last update: Nov 19, 2001