Paola Magillo, Univestita' di Genova, Corso di Programmazione II per SMID, a.a. 2007-2008.

Esercitazione durante l'anno

Esercizio 1

Definire la classe Punto2D che ha due coordinate intere x ed y. Incapsulare le due variabili definendo le corrispondenti funzioni "get" e "set". Scrivere anche una funzione "print" che stampa il punto. Scrivere anche un "main" che crea due punti e li stampa.

Suggerimento: e' simile alla classe Rectangle vista nei laboratori guidati.

Esercizio 2

Definire la classe Punto3D come sotto-classe di Punto2D che aggiunge la terza coordinata z. Incapsulare anche qui la variabile definendo le funzioni "get" e "set" corrispondenti. Re-implementare in modo opportuno la funzione "print". Scrivere anche un "main" che crea due punti, questa volta 3D, e li stampa.

Suggerimento: e' simile alla classe Cuboid, sotto-classe di Rectangle, vista nei laboratori guidati.

Esercizio 3

Modificare il "main" nella classe Punto3D nel seguente modo: dichiara due variabili di classe Punto2D, in una mette un nuovo oggetto di classe Punto3D e nell'altra un oggetto di classe Punto2D, poi stampa entrambe.

Esercizio 4

Riprendere la classe Punto2D e aggiungere una funzione di classe "distanza" che prende come argomenti due punti e restituisce la loro distanza calcolata con la nota formula d = sqrt( (x2-x1)^2 + (y2-y1)^2). Nel "main aggiungere il calcolo e la stampa della distanza tra i due punti.

Esercizio 5

Attenzione: questo esercizio e' lungo. Ci si puo' fermare alla prima parte.

Realizzare un'interfaccia grafica per l'esercizio 3, fatta dai seguenti componenti:

Il tutto sistemato, con l'aiuto di contenitori intermedi e di layout manager, secondo la seguente gerarchia di contenimento.

Rappresentazione ad albero:

                   Frame (BorderLayout)
                    /               \
                   /                 \
a nord Panel (GridLayout 2        a sud Panel (GridLayout
righe x 4 colonne)                1 riga x 2 colonne
  |  |  |  ...  |                     |         |
  |  |  |  ...  |                     |         |
4 Label e 4 TextField              Button      Label
a posizioni alternate

Rappresentazione a scatole cinesi:

        +--------------------------------------+
        | Panel a nord                         |
        |+------------------------------------+|
Frame   || Labelx1 TextField Labely1 TextField||
        || Labelx2 TextField Labely2 TextField||
        |+------------------------------------+|
        | Panel a sud                         |
        |+------------------------------------+|
        || Button            Label            ||
        |+------------------------------------+|
        +--------------------------------------+

Fine prima parte: ci si puo' fermare qui.

Associare al bottone un action listener che prende le quattro stringhe presenti nei campi di input, le converte a interi, crea due punti, calcola la distanza e infine scrive la distanza nella etichetta accanto al bottone.

Nota: la conversione a intero puo' causare errore se le stringhe sono vuote o non rappresentano numeri interi.

Gestire l'eccezione con un blocco try-catch: se tutto va bene comportarsi come sopra, se invece si ha eccezione scrivere "errore" nell'etichetta che dovrebbe contenere la distanza.