logo sapienza

Fondamenti di Informatica, anno accademico 2011-2012
(Statistica Gestionale, 9 crediti)
Docente: Paolo Franciosa


Obiettivi Programma Materiale didattico
Orario delle lezioni Ricevimento studenti Modalità d'esame
Diario delle lezioni Prove d'esame

Per commenti e segnalazioni contatta il docente a


Obiettivi e contenuti del corso

Vengono illustrati i principi fondamentali della programmazione strutturata, con particolare riferimento alla programmazione orientata agli oggetti, utilizzando il linguaggio Java.

Vengono presentati alcuni algoritmi fondamentali per problemi di ordinamento, ricerca e selezione, alcuni problemi numerici, evidenziandone le caratteristiche di efficienza attraverso l'analisi di complessità asintotica.

Vengono descritti i principali metodi di codifica dell'informazione.

Alla fine del corso lo studente sarà in grado di:

torna all'inizio


Programma

Componenti di un sistema di elaborazione: hardware, software, principali unità periferiche. Interazione con un sistema operativo basato su finestre. Concetto di cartella, documento, applicazione. Il sistema operativo: funzioni principali, gestione dei processi, gestione della memoria, file system.

Rappresentazione dell'informazione: codifica di informazioni numeriche - sistemi di numerazione posizionali, codifica binaria, ottale, esadecimale, conversioni di base. Rappresentazione di numeri interi negativi. Rappresentazione in virgola mobile. Codifica di caratteri.

Concetto di algoritmo. Esempi di algoritmi in linguaggio naturale. Generalità sui linguaggi di programmazione, compilatori.

Programmazione in linguaggio Java: la Java Virtual Machine, ambienti di programmazione, compilazione ed esecuzione di programmi Java. Costrutti essenziali del linguaggio: variabili, espressioni, oggetti. Assegnazioni, metodi di input/output, istruzioni di selezione, ed iterazione. Uso di classi predefinite, invocazione di metodi. Consultazione della documentazione standard Java. Definizione di classi, principio della riutilizzazione del codice. Implementazione di vettori e matrici. Ereditarietà e polimorfismo.

Algoritmi fondamentali: Ricerca sequenziale, ricerca dicotomica su un vettore ordinato. Ordinamento: selection sort, merge sort, quick sort, bubble sort. Algoritmo di Euclide per la ricerca del Massimo Comun Divisore (MCD). Algoritmo per la ricerca del k-esimo elemento. Algoritmi di base su matrici.

Introduzione alla complessità computazionale: concetto di complessità di un algoritmo, notazioni asintotiche. Equazioni di ricorrenza e metodi per la loro soluzione. Complessità computazionale degli algoritmi studiati.

torna all'inizio


Materiale didattico

Testi consigliati

Testo di riferimento per il linguaggio Java:
Marco Bertacca, Andrea Guidi
Programmare in Java
McGraw-Hill, 2007.
Escludere 11.1, 11.4, 11.5, 11.7
13, 14, 15 (in programma solo classi e metodi utilizzati nelle esercitazioni per l'accesso a files di testo), 16, 17, 18, 19
Per approfondimenti:
Cay S. Horstmann.
Concetti di informatica e fondamenti di Java,
Edito da APOGEO, Terza Edizione, 2005.
Materale aggiuntivo è disponibile in http://www.apogeonline.com/libri, seguendo i link "Booksite" e poi "Area Studenti"", nell'area studenti.
Per gli argomenti di algoritmi e complessità, poche pagine dal testo seguente:
Cormen, Leiserson, Rivest: Introduzione agli algoritmi, volume 1, Jackson libri
Materiale di riferimento per la codifica dell'informazione:
Ceri, Mandrioli, Sbattella: Informatica arte e mestiere, McGraw-Hill.
Cap. 11, pagg. 243-255,
o in alternativa
Ceri, Mandrioli, Sbattella: Informatica istituzioni, McGraw-Hill.
Cap. 2 fino a 2.2.2 compreso e ad 2.3 alla fine del capitolo, pagg. 29-43

Strumenti di programmazione

Gli studenti che hanno difficoltà nel reperire il software possono rivolgersi al docente. L'intero software occupa circa 146 MByte.

Altri link rilevanti

torna all'inizio


Modalità d'esame

L'esame consiste in una prova scritta e un colloquio. Nella prova scritta si richiede di scrivere o completare sorgenti Java e di rispondere a domande su argomenti teorici.

torna all'inizio


Diario delle lezioni

26 Settembre 2011 28 Settembre 2011 30 Settembre 2011
annullata
3 Ottobre 2011 5 Ottobre 2011 (lab) 7 Ottobre 2011
10 Ottobre 2011 12 Ottobre 2011 (lab) 14 Ottobre 2011
17 Ottobre 2011 19 Ottobre 2011 (lab) 21 Ottobre 2011
24 Ottobre 2011 26 Ottobre 2011 (lab) 28 Ottobre 2011
31 Ottobre 2011
annullata
2 Novembre 2011 (lab) 4 Novembre 2011
7 Novembre 2011 9 Novembre 2011 (lab) 11 Novembre 2011
14 Novembre 2011 16 Novembre 2011 (lab) 18 Novembre 2011
21 Novembre 2011 23 Novembre 2011 (lab) 25 Novembre 2011
28 Novembre 2011 30 Novembre 2011 (lab) 2 Dicembre 2011
5 Dicembre 2011 7 Dicembre 2011 (lab) 9 Dicembre 2011
annullata
12 Dicembre 2011 14 Dicembre 2011 (lab) 16 Dicembre 2011
19 Dicembre 2011 21 Dicembre 2011 (lab)

Per commenti e segnalazioni, contatta il docente (paolo.franciosa@uniroma1.it)

torna all'inizio


26 Settembre 2011
Argomenti

Introduzione al corso

Concetto di problema e di algoritmo

Esempi di algoritmi

Riferimenti al testo

torna all'elenco delle lezioni
28 Settembre 2011
Argomenti

Tipi primitivi: interi, reali, carattere, boolean

Dichiarazione di variabili

Identificatori

Istruzione di assegnazione

Uso di literal (costanti)

Riferimenti al testo Capitolo 1, Capitolo 3
Listati ed esercizi proposti

torna all'elenco delle lezioni

3 Ottobre 2011
Argomenti

Assegnazioni, uso di semplici espressioni

Operatori aritmetici

Semplici espressioni

Precedenza tra operatori

Conversione implicita

Conversione esplicita (cast)

Assegnazioni tra tipi disomogenei

Riferimenti al testo Capitolo 3

torna all'elenco delle lezioni

5 Ottobre 2011 (laboratorio)
Argomenti

Descrizione dei pacchetti JRE (Java Runtime Environment) e SDK (Software Development Kit)

Editing di programmi Java con Blocco Note

Compilazione ed esecuzione da "Prompt dei comandi" usando gli strumenti javac e java del SDK

Cenno sull'uso di istruzioni condizionali

Esempi di semplici programmi Java

Correzione di errori sintattici e semantici

Esercizi su assegnazioni e istruzioni condizionali

Esercizi proposti Esercitazione 1

torna all'elenco delle lezioni

7 Ottobre 2011
Argomenti

Costruzione di espressioni complesse

Precedenza tra operatori

Operatori relazionali:    >   >=   <    <=   ==   !=

Istruzione if() ... else ...

Istruzione if() ...

Istruzioni if nidificate

Riferimenti al testo Capitolo 3
Listati ed esercizi proposti
  • Date tre variabili double, contenenti valori distinti a piacere, che rappresentano i coefficienti di una equazione di secondo grado in una variabile, trovare le soluzioni (se reali) oppure stampare un messaggio (se complesse). Il programma deve funzionare correttamente per qualsiasi terna di interi.
    La radice quadrata si può calcolare con l'espressione Math.sqrt(....), dove i puntini rappresentano una qualsiasi espressione numerica con valore non negativo
  • Date tre variabili int, contenenti valori distinti a piacere, stamparli in ordine crescente. Il programma deve funzionare correttamente per qualsiasi terna di interi

torna all'elenco delle lezioni

10 Ottobre 2011
Argomenti

Istruzione composta { ... } e ambito di visibilità delle variabili

Espressioni booleane complesse: operatori && || !

Istruzioni di ciclo: l'istruzione while

Riferimenti al testo Capitoli 4 e 5
Listati ed esercizi proposti
  • Ordina tre numeri: Ordina3.java
  • Verifica se tre interi sono i lati di un triangolo e individua il tipo di triangolo: Triangolo.java
  • Decidere se tre reali sono i lati di un triangolo rettangolo, acutangolo od ottusangolo
  • Dato capitale iniziale e interesse annuo, calcolare il capitale dopo un anno e dopo 3 anni
  • Date le coordinate di due punti trovare la loro distanza euclidea (usare il metodo Math.sqrt() per il calcolo della radice quadrata)
  • Scoprire cosa fa il programma seguente: Ignoto.java
  • Fare in modo che il programma Ignoto.java funzioni anche quando a e/o b contengono valori negativi
  • Scrivere un programma che, dati due numeri naturali a e/o b, stampi il valore di ab, senza utilizzare il metodo Math.pow
  • Scrivere un programma che stampi i primi 50 elementi della successione di Fibonacci

torna all'elenco delle lezioni

1" Ottobre 2011 (laboratorio)
Argomenti
Esercizi proposti Esercitazione 2

torna all'elenco delle lezioni

14 Ottobre 2011
Argomenti

Esercizi sull'uso di cicli e istruzioni condizionali

Uso di variabili boolean per il controllo di cicli

Riferimenti al testo Capitoli 4 e 5
Listati ed esercizi proposti
  • Calcola il numero di anni necessari per raggiungere un dato importo a partire da un capitale iniziale e un tasso di interesse annuo dati CapitaleObiettivo.java
  • Incremento di capitale con capitalizzazione degli interessi Capitale.java
  • Verifica se un naturale è primo
    • versione semplice Primalita.java
    • versione migliorata PrimalitaEfficiente.java
    • altri miglioramenti proposti:
      • terminare il ciclo appena trovato un divisore
      • evitare la divisione per numeri pari maggiori di 2
      • scrivere un programma che combina tutti i miglioramenti elencati
  • Stampa il numero di divisori di un naturale (si possono utilizzare alcune delle idee a proposito del test di primalità)

torna all'elenco delle lezioni

17 Ottobre 2011
Argomenti

Operatori di preincremento e postincremento ++, predecremento e postdecremento --

Uso di variabili boolean per il controllo di cicli

Istruzioni break; e continue;

Istruzione di ciclo for, analogie con istruzione while

Esempi di semplici programmi con cicli e istruzioni di selezione

Riferimenti al testo Capitoli 4 e 5
Listati ed esercizi proposti
  • Stampa della tavola pitagorica n per n TavolaPitagorica.java, assumendo che che l'input (n) sia compreso nell'intervallo [1,18]
  • Stampa di un quadrato di lato n (fornito in input) bordato di asterischi
      *******...**
      *          *
      *          *
      ............
      *          *
      *******...**
    
    
  • Stampa di un quadrato di lato n (fornito in input) con due bordi di asterischi
      *********...**
      *********...**
      **          **
      ............
      **          **
      *********...**
      *********...**
    
    
  • Stampa di un quadrato di lato n (fornito in input), con k (fornito in input) bordi di asterischi dove k < n/2 (ecco la soluzione QuadratoBordato.java)
  • Stampa di un triangolo di asterischi di lato n (fornito in input) con vari orientamenti (l'utente sceglie l'orientamento voluto inserendo un intero tra 1 e 4) StampaTriangolo.java
      ****      *            *      ****
    1 ***     2 **      3   **    4  ***
      **        ***        ***        ** 	
      *         ****      ****         *
    
    
  • Stampa di un albero di natale di altezza n (fornito in input) aggiungendo la base del tronco, centrata, di altezza 2 AlberoDiNatale.java. Ad esempio, per n=6 bisogna visualizzare il seguente disegno:
          *
         ***
        *****
       *******
      *********
     ***********
          *
          *
    

torna all'elenco delle lezioni

19 Ottobre 2011 (laboratorio)
Argomenti

Metodi di input/output della classe JOptionPane

Generazione di numeri pseudocasuali con Math.random()

Esempi di programmi con cicli: verificare varie proprietà di una sequenza di numeri reali.

Listati ed esercizi proposti Esercitazione 3

torna all'elenco delle lezioni

21 Ottobre 2011
Argomenti

Istruzione di ciclo do ... while, differenze rispetto all'istruzione while

Istruzioni di assegnazione con modifica += -= *= /= %=

Esercizi su cicli

Listati ed esercizi proposti

Soluzione degli esercizi proposti nella esercitazione del 19 Ottobre 2011

torna all'elenco delle lezioni

24 Ottobre 2011
Argomenti

Introduzione agli array monodimensionali: dichiarazione, allocazione ed uso

Inizializzazione di array

La proprietà .length di array

Input e output di array

Riferimenti al testo Capitolo 6
Listati ed esercizi proposti

Esercizi di base su array:

  • Leggi da tastiera una sequenza di double, memorizzala in un array, stampa la somma degli elementi SommaArray.java
  • Leggi da tastiera una sequenza di double, memorizzala in un array, crea un array che contiene una copia degli elementi del primo array CopiaArray.java
  • Leggi da tastiera una sequenza di double, memorizzala in un array, crea un array che contiene una copia degli elementi del primo array, ma in ordine inverso CopiaOrdineInverso.java
  • Leggi da tastiera una sequenza di int che rappresenta delle frequenze, memorizzala in un array, crea un array che contiene le frequenze cumulate e stampa, in due colonne, la sequenza delle frequenze (sulla sinistra) e la sequenza delle frequenze cumulate (sulla destra) Cumula.java


Data in input una sequenza di interi che rappresentano frequenze:

  • stampare la frequenza massima e la frequenza minima;
  • calcolare l'array delle frequenze relative e stamparlo;
  • calcolare l'array delle frequenze relative cumulate e stamparlo;
  • stampare in quale posizione si trovano la frequenza massima e la frequenza minima.

torna all'elenco delle lezioni

26 Ottobre 2011 (laboratorio)
Argomenti Semplici esercizi su arrays
Listati ed esercizi proposti Esercitazione 4

torna all'elenco delle lezioni

28 Ottobre 2011
Argomenti

Ricerca sequenziale in un array non ordinato

Esercizi su array

Riferimenti al testo Capitolo 6
Listati ed esercizi proposti

Algoritmi di base su array:

torna all'elenco delle lezioni

2 Novembre 2011 (laboratorio)
Argomenti

Introduzione agli array bidimensionali: dichiarazione, allocazione ed uso

Inizializzazione di array bidimensionali

La proprietà .length di array bidimensionali

Riferimenti al testo Capitolo 6
Listati ed esercizi proposti

Leggi da tastiera le dimensioni di una matrice e suoi elementi, memorizzandoli in un array bidimensionale LeggiMatrice.java

Esercitazione su array bidimensionali: Esercitazione 5

torna all'elenco delle lezioni

4 Novembre 2011
Argomenti

Esercizi su array bidimensionali

Listati ed esercizi proposti
  • Leggi da tastiera una sequenza di interi (la lunghezza è data anch'essa da tastiera), memorizzala in un array, verifica se la sequenza è in ordine non decrescente VerificaOrdine.java
  • Modificare il programma precedente per verificare se la sequenza è crescente, non decrescente, non crescente o decrescente
  • Leggi da tastiera una sequenza di interi (la lunghezza è data anch'essa da tastiera), memorizzala in un array, inverti l'array, stampa l'array ottenuto. Il problema deve essere risolto SENZA USARE ALTRI ARRAYS
  • Dato un array bidimensionale di int (preferibilmente inizializzato nel codice):
    • stamparlo in forma di tabella (questo punto è risolto in StampaMatrice.java)
    • stampare la somma di tutti gli elementi
    • costruire un array nel quale memorizzare la somma di ciascuna riga
    • trovare qual è la riga di somma massima (risolvere questo problema sia usando il risultato del punto precedente, sia senza utilizzare alcun altro array)
  • Dato un array bidimensionale che rappresenta una matrice quadrata, trovare il massimo elemento della diagonale
  • Dato un array di double, che rappresenta i valori di una funzione di due variabili calcolati sui punti di una griglia bidimensionale, individuare i punti in cui la funzione presenta un massimo locale (definiamo un punto di massimo locale come un punto interno alla griglia nel quale la funzione assume un valore strettamente maggiore di tutti gli otto punti adiacenti ad esso). I punti sul bordo della griglia non possono essere punti di massimo locale

torna all'elenco delle lezioni

7 Novembre 2011
Argomenti

I metodi

Definizione e chiamata di metodi static

Accesso a metodi di classi esterne, chiamata di metodi public static

Metodi void, metodi che restituiscono valori

Parametri formali e parametri attuali: il passaggio dei parametri

La signature di un metodo

overloading di metodi

Riferimenti al testo Capitolo 7
Listati ed esercizi proposti
  • Esempio di metodi con o senza parametri o valore di ritorno Metodi.java
  • Stampa i primi compresi tra 1 e un intero N fornito in input, utilizzando un metodo che verifica la primalità di un intero e restituisce un boolean
  • Scrivere un metodo che, a partire da un parametro array monodimensionale di int, lo stampa separando ciascun elemento con un carattere"\t"
  • Scrivere un metodo che, a partire da un parametro array bidimensionale di int, lo stampa per righe
  • Scrivere un metodo che, a partire da due array monodimensionali di double, restituisce true se ciascun elemento del primo è maggiore del corrisponente elemento del secondo, altrimenti restituisce false. Questa definizione ha senso solo se gli arrays hanno la stessa lunghezza, altrimenti il metodo deve restituire false

torna all'elenco delle lezioni

9 Novembre 2011
Argomenti

Esercitazione su metodi su arrays

Listati ed esercizi proposti

Esercitazione6.java

torna all'elenco delle lezioni

11 Novembre 2011
Argomenti

Implementazione di un metodo per la ricerca sequenziale in un array disordinato

Ricerca sequenziale in un array ordinato

L'algoritmo di ricerca binaria su array ordinati

Riferimenti al testo Cormen, Leiserson, Rivest, pagg. 21-26
Listati ed esercizi proposti

torna all'elenco delle lezioni

14 Novembre 2011
Argomenti

Introduzione alla complessità computazionale: concetto di risorsa

Analisi di complessità di semplici algoritmi: ricerca sequenziale, test di primalità

Analisi della complessità dell'algoritmo di ricerca binaria

Applicaizone del principio di bisezione alla soluzione numerica di una equazione definita da una funzione continua

Riferimenti al testo Cormen, Leiserson, Rivest, pagg. 21-26
Listati ed esercizi proposti

torna all'elenco delle lezioni

16 Novembre 2011
Argomenti

Assegnazione tra arrays

Passaggio di parametri array (parametri riferimento)

Metodi che restituiscono un riferimento a array

Esercitazione su metodi su arrays

Listati ed esercizi proposti

Esercitazione7.html

torna all'elenco delle lezioni

18 novembre 2011
Argomenti

Misure di complessità: le notazioni asintotiche O(), Ω(), Θ()

Esempi di classi di funzioni

Uso delle notazioni asintotiche per esprimere limitazioni superiori e inferiori della complessità di algoritmi

Riferimenti al testo

Capitolo 12 e seguenti

Cormen, Leiserson, Rivest, pagg. 21-26

torna all'elenco delle lezioni

21 Novembre 2011
Argomenti

L'algoritmo di ordinamento per selezione (selection sort)

Analisi della complessità computazionale del selection sort

Riferimenti al testo Cormen, Leiserson, Rivest, pagg. 21-26
Listati ed esercizi proposti
  • SelectionSort.java
  • Valutare la complessità dell'algoritmo di ricerca binaria nel caso in cui l'intervallo di ricerca non fosse diviso ogni volta a metà, ma in due porzioni di lunghezza rispettivamente un terzo e due terzi della lunghezza dell'intervallo di ricerca precedente. Riferirsi al caso più sfavorevole.
  • Utilizzando i metodi definiti nei listati precedenti:
    • efficienza del selection sort: stampare una tabella nella quale vengono mostrato il tempo impiegato per ordinare array random di double di dimensione crescente (100, 200, 400, 800, 1600, 3200, 6400, ...).
      I tempi possono essere calcolati attraverso la differenza tra i valori restituiti dal metodo System.currentTimeMillis(), chiamandolo immediatamente prima e immediatamente dopo l'ordinamento; il metodo restituisce, sotto forma di long, il numero di millisecondi trascorsi da una origine convenzionale del tempo.
      È utile definire un metodo che alloca e restituisce un array random, la cui dimensione viene passata come parametro, e modificare il metodo ordinaConSelectionSort in modo che invece di essere void restituisca il numero di millisecondi impiegati;
    • come al punto precedente, ordinando però con il metodo Arrays.sort() (importare java.util.Arrays).

torna all'elenco delle lezioni

23 Novembre 2011 (lab)
Argomenti

Esercizi di programmazione: Esercitazione 8

torna all'elenco delle lezioni

25 Novembre 2011
Argomenti

Algoritmo di ordinamento a bolle (Bubble sort) e suoi miglioramenti

Analisi della complessità computazionale del bubble sort

Riferimenti al testo Cormen, Leiserson, Rivest, pagg. 21-26

torna all'elenco delle lezioni

28 Novembre 2011
Argomenti

Introduzione alla ricorsione.

Esempio di algoritmo ricorsivo per il calcolo del fattoriale

Il paradigma divide et impera.

L'algoritmo di ordinamento per fusione (Merge Sort) MergeSort.java

Riferimenti al testo

Capitolo 12 e seguenti

Cormen, Leiserson, Rivest

torna all'elenco delle lezioni

30 Novembre 2011 (lab)
Argomenti

Eccezioni: eccezioni controllate e non controllate

Gestione delle eccezioni (costrutto try ... catch ... finally) e propagazione delle eccezioni (costrutto throws ...)

Posizionamento della gestione delle eccezioni

Listati ed esercizi proposti soluzioni della esercitazione precedente, con gestione delle eccezioni in input

torna all'elenco delle lezioni

2 Dicembre 2011
Argomenti

L'algoritmo Quick sort: QuickSort.java

Versione animata dell'algoritmo Quick sort, che mostra il funzionamento per ciascuna chiamata ricorsiva: QuickSortAnimato.java

Complessità computazionale del quick sort nel caso peggiore

Riferimenti al testo Cormen, Leiserson, Rivest (pagine indicate)

torna all'elenco delle lezioni

5 Dicembre 2011
Argomenti

Algoritmo per il calcolo del k-esimo elemento: Selection.java

Versione animata dell'algoritmo Selection, che mostra il funzionamento per ciascuna chiamata ricorsiva: SelectionAnimato.java

L'algoritmo di Euclide per il calcolo del Massimo Comun Divisore: versione ricorsiva MCDricorsivo.java

Complessità computazionale dell'algoritmo MCD di Euclide

Riferimenti al testo Cormen, Leiserson, Rivest (pagine indicate)

torna all'elenco delle lezioni

7 Dicembre 2011 (laboratorio)
Argomenti Accesso a file di testo
  • Introduzione al'uso di oggetti: la classe String e alcuni suoi metodi
  • Uso della classe Scanner:
    • costruttori Scanner(String) e Scanner(File)
    • metodi hasNextInt(), hasNextDouble(), ...
    • metodi nextInt(), nextDouble(), nextLine(), ...
  • classi wrapper: Integer, Double, ...

La classe BigInteger

Listati ed esercizi proposti

Esercitazione 9: accesso a file di testo. Nella stessa pagina è disponibile una soluzione alla esercitazione

torna all'elenco delle lezioni

12 Dicembre 2011
Argomenti

Analisi della complessità computazionale di algoritmi ricorsivi.

  • Soluzione di equazioni di ricorrenza attraverso il teorema principale (senza dimostrazione).
  • Esempi di applicazione del teorema principale: ricerca binaria, merge sort, algoritmo di Euclide per il MCD, quick sort nel caso migliore, algoritmo per il k-esimo elemento (selection).

Introduzione alla programmazione a oggetti

  • Principio dell'information hiding
  • Da variabile-tipo a oggetto-classe
  • Variabili membro e metodi membro
  • Privatezza delle variabili membro

Definizione della classe Contatore

  • descrizione dei requisiti
    • creazione dell'oggetto
    • incremento
    • restituzione del valore
    • azzeramento
  • signature dei metodi membro
  • variabili membro
  • costruttori
  • implementazione dei metodi membro

Riferimenti al testo

Equaz. di ricorrenza: Cormen, Leiserson, Rivest (pagine indicate)

Programmazione a oggetti: capitoli 8 e seguenti del testo Java

Listati proposti
  • realizzazione di una semplice classe Contatore (Contatore.java)
  • programma che usa un oggetto di classe Contatore (Divisori.java)
  • realizzazione della classe Osservazioni
  • programma che usa un oggetto di classe Osservazioni (UsaOsservazioni.java)

torna all'elenco delle lezioni

14 Dicembre 2011 (lab)
Argomenti

Esercitazione sulla definizione di classi

Estensione della classe Osservazioni in OsservazioniEsteso, come richiesto dal programma UsaOsservazioniEsteso.java

Soluzione: OsservazioniEsteso.java, con commenti Javadoc

torna all'elenco delle lezioni

16 Dicembre 2011
Argomenti

Codifica dell'informazione:

  • Generalità sulla notazione posizionale per numeri naturali, interpretazione di numeri espressi in base b
  • conversione da base b a base 10 e da base 10 a base 2
  • rappresentazione di numeri interi in modulo e segno
  • rappresentazione di numeri interi in complemento a due
  • Codifica ottale ed esadecimale, conversione da e verso la base 2
  • rappresentazione di caratteri: codifiche ASCII, ASCII esteso, Unicode

Riferimenti al testo appunti delle lezioni e testo di Ceri, Mandrioli, Sbattella
Listati ed esercizi proposti

CodificaPosizionale.java

torna all'elenco delle lezioni

19 Dicembre 2011
Argomenti

Esempio di definizione ed uso di una classe

Sovraccarico del costruttore: uso del this()

L'oggetto di invocazione: uso del this nella disambiguazione dei riferimenti

Definizione ed invocazione di metodi static e metodi membro

Definizione di sottoclassi: chiamata del costruttore della superclasse attraverso super

Riferimenti al testo Capitoli 8 e seguenti
Listati proposti

torna all'elenco delle lezioni

21 Dicembre 2011 (laboratorio)
Argomenti

Overriding: ridefinizione di metodi in sottoclassi

Il metodo toString() di Object e sua ridefinizione

Esercitazione sulla programmazione a oggetti

torna all'elenco delle lezioni